https://leetcode.com/problems/single-number/description/
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?
思路:用XOR求解
因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果:
(2^1^4^5^2^4^1) => ((2^2)^(1^1)^(4^4)^(5)) => (0^0^0^5) => 5
就把只出现了一次的元素(其余元素均出现两次)给找出来了!
package go.jacob.day803;
import java.util.Arrays;
public class Demo2 {
/*
* 用异或求解,不需要对数组进行排序
*/
public int singleNumber(int[] nums) {
int res=0;
for(int i=0;i<nums.length;i++){
//异或
res=res^nums[i];
}
return res;
}
/*
* My solution
*/
public int singleNumber_byme(int[] nums) {
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(i==nums.length-1)
return nums.length-1;
if(nums[i]!=nums[i+1])
return nums[i];
}
return -1;
}
}