如何找出数组中唯一成对的数组元素

题目:1——1000这1000个数,放入含有1001个数组元素的数组中,只有唯一的一个值重复,其它均止出现一次。遍历数组,每个数组元素均只能访问一次,设计算法,将其找出?

异或 ^ : 相同位0 , 不同位1。 任何数与0异或就是它本身

	0 ^ 0 = 0       x ^ 0  = x          x ^ x  = x
//   C语言版 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
	  #define INDEX 1001 // 数组元素个数
	  int index; // 随机数组下标
	  int i ; 
	  int repeatNumber = 0; // 重复数组元素
	  int arr[ INDEX] = { 0 };
	  srand( time ( 0 ) );
	  
	index = rand( ) % INDEX ; // 产生随机下标
	for( i = 0 ; i < INDEX ;i++){
	
	arr[ i ] = i + 1 ;
		
	}
	
	if( i = index){
	
	arr[ i ] = rand( ) % ( INDEX -1 )+1 ; // 产生随机数 赋给 随机下标数组单元
	
	}

	for( i = index +1 ; i < INDEX ; i++){

	 arr[i] = i;

	}
	 for( i = 0 ; i < INDEX ;i++){
	
	printf( "%d \t" , arr[ i ]);  
	
	}

	 for( i = 0 ; i < INDEX ;i++){
          
          repeatNumber = repeatNumber ^ i;  // 从0 开始 异或 INDEX-
          
          }
	
	 
	 for( i = 0 ; i < INDEX ;i++){	
	
	repeatNumber = repeatNumber ^ arr[ i ] ; // 异或数组元素,只剩下 repeatNumber
        }

	printf( "\n 该数值中的重复元素为 %d ",repeatNumber );
}

// java版
public  class RepeatNumber{	
	final static int N = 1001;
	static int arr[] = new int[N];
	static int index = ( int )( Math.random() * N );

public static void main(String[] args) {
	
	int repeatNumber = 0;
	for( int i = 0 ; i <N-1 ; i++) {
	 arr[i] = i+1;

	
	}
	arr[arr.length-1] = ( int )( Math.random() *(N-1 )+1) ;
	swap( arr[arr.length-1]);
          
          for( int i = 0 ; i <arr.length ; i++ ) {
	
	repeatNumber = repeatNumber ^ i;
 
       }
       
	for( int i = 0 ; i < N ;i++){ 
	repeatNumber = repeatNumber ^ arr[ i ] ; // 异或数组元素,只剩下 repeatNumber
      }
	System.out.println("该数为:"+ repeatNumber);


}

public static void swap( int number ) {
 	int space = 0;
	 space = arr[index];
	 arr[index] = number;
	arr[arr.length-1] = space;
   } 


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值