《剑指offer》面试题56 - II. 数组中数字出现的次数 II

问题描述

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:

输入:nums = [3,4,3,3]
输出:4
示例 2:

输入:nums = [9,1,7,9,7,9,7]
输出:1
 

限制:

1 <= nums.length <= 10000
1 <= nums[i] < 2^31

代码

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        unordered_map<int,int> table;
        //map<int,int> table;使用map慢
        int ans;
        for(int &num:nums)
            ++table[num];
        for(auto &x:table)
        {
            if(x.second == 1)
            {
                ans = x.first;
                break;
            }
        }
        return ans;
    }
};

结果

执行用时 :80 ms, 在所有 C++ 提交中击败了49.31%的用户
内存消耗 :18.5 MB, 在所有 C++ 提交中击败了100.00%的用户

代码

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int n = nums.size(),i;
        for(i = 0; i < n-2; i+=3)
        {
            if(nums[i]!=nums[i+2])
            {
                return nums[i];
            }
        }
        return nums[n-1];
    }
};

结果

执行用时 :136 ms, 在所有 C++ 提交中击败了10.73%的用户
内存消耗 :16.4 MB, 在所有 C++ 提交中击败了100.00%的用户

位运算算法后序补充。

posted @ 2020-05-13 14:07  曲径通霄  阅读(85)  评论(0编辑  收藏  举报