LeetCode初级 只出现一次的数字

120 阅读1分钟

​ description:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

​ 我的解法(10ms):

class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        int i=1;
        if(nums.length==1){
            return nums[0];
        }
        
        if(nums[0]!=nums[1]){
            return nums[0];
        }
        if(nums[nums.length-1]!=nums[nums.length-2]){
            return nums[nums.length-1];
        }
        while(i<nums.length){
            if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1]){
                return nums[i];
            }
            i++;
        }
        return 0;
    }
}

仅仅按照题意一个一个的把所有情况都列举了出来,有点穷举法味道


最优解法 1ms:

class Solution {
    public int singleNumber(int[] nums) {
        int ans = nums[0];
    	for(int i = 1, len = nums.length; i < len; i++){
    	    ans ^= nums[i];
    	}
    	return ans;
        
    }
}

位运算比直接进行数值比较要快,这里的^=异或运算,两个数字相比,如果相同,则返回0,不同则返回不同的那个数,只要经过两次相同数的异或运算,必然回到最开始异或运算的那个数。