《剑指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%的用户
位运算算法后序补充。