题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例:
输入:[2,2,1]
输出:1
输入:[4,1,2,1,2]
输出:4
两种思路:
- 一开始没有用异或位运算,思路如下:
先将数组排序;
因为只有一个元素出现一次,其他元素均出现了两次,所以这个元素一定在奇数位上,在数组中的下标就是偶数。所以设置一个循环,从数组的第一位开始,拿当前位与后一位比较:若相等则这个元素不是我们要找的,那么下标加2继续循环,否那么答案就出来了。代码:
public static int singleNumber(int[] nums) { int result=0; Arrays.sort(nums); //排序 for(int n=0;n<nums.length;n+=2) { if(n!=nums.length-1) { //当前元素非最后一个元素 if(nums[n]!=nums[n+1]) { //前后元素不等 result=nums[n]; return result; } } else { //当前元素为最后一个元素 result=nums[nums.length-1]; } } return result; }
2.但我们要求降低时间复杂度,那还是用异或运算吧,代码:
public static int singleNumber(int[] nums) { int result=0; for(int n=0;n<nums.length;n++) { result^=nums[n]; } return result; }