怎么从一个除了一个数只有一位,其他数都是两位的数组里提取出这个数字–来自LeetCode136只出现一次的数字
- 思路1
一开始想的思路,比较简单,但是空间时间复杂度比较复杂
就是把整个数组排序,由小到大或者由大到小
然后开始遍历,如果一个数和它后面一个数不同,则直接提取
代码如下:
class Solution {
public int singleNumber(int[] nums) {
for(int i=0;i<nums.length-1;i++){
for(int j=0;j<nums.length-i-1;j++){
if(nums[j]>nums[j+1]){
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
for(int i=0;i<nums.length;i=i+2){
if(i==nums.length-1||nums[i]!=nums[i+1]){
return nums[i];
}
}
return 0;
}
}
- 思路2
最简单的办法,通过异或运算
异或运算是指
1^1=0 和 0^0=0 其余为1^0=1
并且满足交换律: a ^ b ^ a = a ^ a ^ b
所以有代码
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
single ^= num;
}
return single;
}
}
显然,思路2很简单
继续加油!