七十九.找出唯一成对的数(位运算)

1——N,这N个数放在含有N+1个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法将它找出来;不用辅助存储空间,能否设计一个算法实现?

import java.util.Random;

public class LianXi {
    
    
	//交换函数
	public static void swap(int[] a, int index, int i) {
    
    
		int temp = index;
		index = i;
        i=temp;
	}
	
	public static void main(String[] args){
    
    
		//定义一个长度为N的数组
		int N = 11;
		int []a = new int[N];
		for(int i = 0; i < a.length; i++ ){
    
    
			a[i] = i + 1;
		}
		
		//数组最后一个数随机生成
		a[a.length - 1] = new Random().nextInt(N - 1) + 1;
		
		//随机下标
		int index = new Random().nextInt(N);
		
		//数组最后一个数的下标和随机下标进行交换
		swap(a,index,a.length-1);
		
		//遍历最终的数组
		for(int i = 0; i < a.length; i++){
    
    
			System.out.print(a[i] + " ");
		}
		System.out.println("\n");
		
		//进行异或运算,找出重复元素
		int x1 = 0 ;
		//任意一个数与0异或为这个数本身 : A^0=A
		for(int i = 1; i < N - 1; i++){
    
    
			x1 = x1 ^ i;
		}
		//  A^A = 0 ; A^A^B = B
		for(int i = 0; i < N; i++){
    
    
			x1 = x1 ^ a[i];
		}
		System.out.println(x1);
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/JiangYu200015/article/details/112888802