摘自传智播客公开课
package test;
/*
* 传智播客公开课笔记
*/
public class Arithmetic {
public static void main(String[] args) {
/*
题设:现有0到99,共计100个整数,各不相同,将所有数放入一个
数组,随机排布。数组长度101,多余的数字是0到99其中任
意一个数(唯一重复的数字)
问题:将这个重复的数字找出来
*/
/*
* 构造题目
*/
int[] num = new int[101];
for(int i=0;i<num.length;i++) {
num[i] = i;
}
num[100] = 55;
for(int i=0;i<10000;i++) {
int num1 = (int)(Math.random()*101);
int num2 = (int)(Math.random()*101);
int temp;
temp = num[num1];
num[num1] = num[num2];
num[num2] = temp;
}
//题目测试
for(int i = 0;i<num.length;i++) {
System.out.print(num[i] + "\t");
if((i+1)%10==0)
System.out.println();
}
//问题解决
/*
* 方案一
*/
feng:
for(int i = 0;i<num.length;i++) {
for(int j = i+1;j<num.length;j++) {
if(num[j]==num[i]) {
System.out.println("\n" + "方案一找出来的数字为:" + num[i]);
break feng;
}
}
}
//缺点:随着基数的增大,计算次数可能会成倍增大
/*
* 方案二
*/
int sum = 0;
for(int i=0;i<num.length;i++) {
sum += num[i];
}
for(int i=0;i<100;i++) {
sum -= i;
}
System.out.println("\n" + "方案二找出来的数字为:" + sum);
//缺点:如果计算的数字特别多,比如有3万亿个数据,超出了数据类型
/*
* 方案三
*/
int test = num[0];
for(int i=1;i<num.length;i++) {
test = test^num[i];
}
for(int i=0;i<100;i++) {
test = test^i;
}
System.out.println("\n" + "方案三找出来的数字为:" + test);
}
}
转载于:https://blog.51cto.com/rainday5/1360390