版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
(数组)题目:
数字1到1000放在含有1001个元素的数组中,其中只有唯一的一个元素值重复,其他数字均只出现一次。 设计一个算法,讲重复元素找出来,要求每个数组元素只能访问一次。如果不使用辅助存储空间,能否设计一个算法实现?
分析:
首先在看到这个题的时候,要特别注意几个条件:
1.每个数组元素只能访问一次。(如果可以访问多次,可以慢慢遍历过来,但是时间复杂度就提高了)
2.不使用辅助存储空间(如果可以使用辅助空间这个题,就变得非常容易了)
3.数组元素(数字1到1000放在含有1001个元素的数组中),所以在测试方法的时候要特别的注意
采用异或的方式,很大程度的解决了这个问题,异或的概念就不多多介绍了,自行百度即可。具体的细节,就看代码吧。
代码:
/**
*
* @param arr:
* 数组
* @return
* 重复的元素
*/
public static int findDup(int[] arr) {
if (arr==null) return -1;//如果if条件判断,只有一条语句,可以省略{}
//声明空间,减少变量的声明
int len=arr.length;
int result=0;
int i;
//将数组中的所有异或运算
for (i=0;i<len;i++){
result^=arr[i];
}
//因为从数字1到1000,所以我在这里借助1:1000的数字去和数组的元素异或运算
for (i=1;i<len;i++){
result^=i;
}
//返回重复元素的值
return result;
}