查找出重复数字

题设一:现有0到99,共计100个整数,各不相同,将所有数放入一个数组,随机排布。数组长度101,多余的数字是0到99其中任意一个数(唯一重复的数字)。

问题一:将这个重复的数字找出来。

【初始化条件】

                //创建了一个101个整数的空间
		//初始化了一个空间为101的数组,并对其进行了数据初始化
		
		int[] arr = new int[101];
		for(int i = 0;i<=99;i++){
			arr[i] = i;
		}
		arr[100] = 69;
		
		for(int x = 1;x<=10000;x++){
			//随机排列
			int num1 = (int)(Math.random()*101);
			int num2 = (int)(Math.random()*101);
			//arr[num1]		arr[num2] 两个数据互换位置
			int temp = arr[num1];
			arr[num1] = arr[num2];
			arr[num2] = temp;
		}

【方法一】

		itcast:
		for(int i = 0;i<arr.length;i++){
			//取出第一个数字,然后与后面的所有数字比对
			//arr[i]与后面所有的数字比  arr[i+1]向后的数字
			for(int j =i+1;j<arr.length;j++){
				if(arr[i]==arr[j]){
					System.out.println("找到了重复的数字"+arr[i]);
					break itcast;
				}
			}
		}

【方法二】

		//0到99 ,其中有一个重复的数字
		//将数组中所有的数字加一起0到99的和+重复的那个数字
		//将上述结果减去0到99的和  就可以得到重复的数字了
		
		int sum = 0;
		//将数组中所有的数字都加一起
		for(int i = 0;i<arr.length;i++){
			sum+=arr[i];
		}
		//使用上面的结果减0到99
		for(int i = 0;i<=99;i++){
			sum-=i;
		}
		System.out.println(sum);
		//方案二如果计算的数字特别多,比如有3万亿个数据,超出了数据类型
【方法三】(推荐)

		//0^1^2^3..^m...^99^m  ^0^1^2^3.....^99 = x
		//使用数组中的第一个数据,异或后面的所有数据
		for(int i = 1;i<arr.length;i++){
			arr[0]=arr[0]^arr[i];
		}
		for(int i = 0;i<=99;i++){
			arr[0]=arr[0]^i;
		}
		System.out.println(arr[0]);







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值