java实现找出数组中唯一成对的数

详细步骤都在注释里

忽略类名…(手动狗头)

public class WeiYiChengDui {

	public static void main(String[] args) {
		//找到数组中重复的数字,不能利用额外存储空间
		//定义一个长度为1001的数组,存放1-1000之中的数字,会有一个数字重复
		int N=1001;
		int arr[]=new int[N];
		//放1000个数字
		for (int i = 0; i < arr.length-1; i++) {
			arr[i]=i+1;
		}
		//生成一个1-1000的随机数
		int aver=new Random().nextInt(N-1)+1;
		//暂时把这个数字先放到最后一个位置
		arr[arr.length-1]=aver;
		//生成一个随机位置,把这个数字放到随机位置上
		int index=new Random().nextInt(N);//0-1000
	    int temp=arr[index];
	    arr[index]=aver;
	    arr[arr.length-1]=temp;
	    System.out.println(Arrays.toString(arr));
	    //到此,数组生成完毕
	    //利用异或运算符的去重功能来完成余下任务
	    
	    int x=0;
	    for(int i=0;i<N;i++)
	    {
	    	x=x^i;
	    }
	    for (int i = 0; i < arr.length; i++) {
			x=(arr[i]^x);
		}
	    //留下来的就是重复的那个
	    System.out.println(x);
	    
	    
	    //利用辅助空间的暴力版本
	    //思路:遍历arr,在辅助空间的相应位置+1
	    int help[]=new int[N];
	    for (int i = 0; i < arr.length; i++) {
			help[arr[i]]++;
		}
	    System.out.println(Arrays.toString(help));
	    for (int i = 0; i < help.length; i++) {
			if(help[i]==2)
			{
				System.out.println(i);
				break;
			}
		}
	}
}

位运算真的太6了

发布了24 篇原创文章 · 获赞 10 · 访问量 1295

猜你喜欢

转载自blog.csdn.net/qq_41625102/article/details/104399513
今日推荐