leetcode 136.只出现一次的数字

77 阅读1分钟

136. 只出现一次的数字 - 力扣(LeetCode)

image.png

1.位运算 异或

首先,一个数模0还是这个数

image.png 第二,一个数模本身为0:

image.png 第三,异或满足乘法交换律: image.png

解: image.png

代码:

class Solution {
public:
    int singleNumber(vector<int>& nums) {

    
     int result=0;
    for(int i=0;i<nums.size();i++)
    {
       
        result^=nums[i];

    }
    return  result;
    }
};

image.png

2.set

image.png

class Solution {
public:
    int singleNumber(vector<int>& nums) {

unordered_set <int> once;
 for(auto rar:nums)
 {
     
    if(once.count(rar)) once.erase(rar);
    else
    once.insert(rar);
 }

int ans=0;
for(auto j:once)
ans=j;
return ans;

    }
};

image.png

3.map

image.png

class Solution {
public:
    int singleNumber(vector<int>& nums) {

int result=0;
        unordered_map<int,int> oncemap;

       for(int i=0;i<nums.size();i++)
       {
           oncemap[nums[i]]++;
       }
        unordered_map<int,int>:: iterator it=oncemap.begin();
        for(it=oncemap.begin();it!=oncemap.end();it++)
        {
            if(it->second==1)
            result=it->first;
        }
        return result;
    }
};

image.png