01.算法设计(二)

来源:互联网 发布:安卓扫街软件 编辑:程序博客网 时间:2024/06/06 01:57
/** * 题设:现在有0-99,共计100个整数,各不相同,将所有数放入一个数组,随机排布, * 数组长度100,将里面任意一个数字替换成0-99的另一个数字(唯一重复的数字) * 问题:将这个重复的数字找出来 */

同样的这段代码, 也可以解决01.算法设计(一)的问题。

package test6;import org.junit.Test;public class test6 {    @Test    public void test1(){        //组装数据        int[] arr = new int[100];        for(int i=0;i<=99;i++){            arr[i] = i;        }        //随机打乱数组的排列顺序100次。        for(int i=0;i<100;i++){            int num1 = (int) (Math.random()*100);            int num2 = (int) (Math.random()*100);            int temp = arr[num1];            arr[num1] = arr[num2];            arr[num2] = temp;        }        //将其中的一个数,替换成另一个        int n1 = (int) (Math.random()*100);        int n2 = (int) (Math.random()*100);        if(n1==n2){//如果两个值相同, 在随机生成一次,保证题目正确            n1 = (int) (Math.random()*100);        }        arr[n1] = arr[n2];        //查看我们题目的数组是什么样的        for(int i=0;i<arr.length;i++){            System.out.print(arr[i]+",");        }        /**         * 使用方案一,同样可以解决         */        /**         * 方案二:创建一个辅助的数组空间(相同长度),里面元素全都是0         * 2.遍历原始数组,使用里面的数组作为新数组的下标,进行自加         * 如果出现多次 那么值,肯定>1         */         //由于用的是数组,数组是需要消耗内存空间的,所以,这种方式,加快了速度, 但是消耗了内存        int[] newArr = new int[100];        for(int i=0;i<arr.length;i++){            newArr[arr[i]]++;            if(newArr[arr[i]]>1){                System.out.println("重复的数字是:"+arr[i]);            }        }    }}

下面是原理图:
这里写图片描述

阅读全文
0 0
原创粉丝点击