腾讯精选50题(8)

136.只出现一次的数字
https://leetcode-cn.com/problems/single-number/
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

1.经典方法:使用异或操作

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res=0;
        for(int i=0;i<nums.size();i++){
            res = res^nums[i];
        }
        return res;
    }
};

2.哈希表(效果不是很好)

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        map<int,int> n;
        for(int i=0;i<nums.size();i++){
            if(n.find(nums[i])==n.end()){
                n[nums[i]]=1;
            }
            else{
                n[nums[i]]++;
            }
        }
        int i;
        for(i=0;i<nums.size();i++){
            if(n[nums[i]]==1){
                break;
            }
        }
        return nums[i];
    }
};

3.python的字典(原理和上面hash一样)

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        dict={}
        for num in nums:
            dict[num] = dict.get(num,0)+1
        for num in nums:
            if dict.get(num) == 1:
                return num
发布了48 篇原创文章 · 获赞 0 · 访问量 1872

猜你喜欢

转载自blog.csdn.net/weixin_43527195/article/details/99177304