题目描述:
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
思考:
求一个给定数组的出现次数为单数的那个数,其他都出现两次,关键在于要求使用线性时间O(N),并且空间复杂度为O(1) (不会因为n的大小而决定)参考了网上的说使用位运算。
复习一下四种位运算:
1,非:0变1,1变0.
2,与:只有两个1时,结果才为1.
3,异或:相同为0,不同为1.
4,或:只有两个为0,结果才为0.
任何数字和0异或的结果为那个数字本身。如00 ^ 11 结果为 11.所以把前面出现两次的数字异或最后肯定为0与单数次数的那个数异或。
代码(java):
public class SingleNumber {
public static void main(String[] args){
int[] nums = {1,1,2,3,3,2,5,6,6};
singleNumber(nums);
}
public static int singleNumber(int[] nums) {
int result = 0;
for(int i = 0 ; i < nums.length ; i++){
result = result ^ nums[i];
}
System.out.println(result);
//满足leetcode的格式~
return result;
}
}