Title
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Solution
排序 & 遍历
class Solution {
public:
int singleNumber(vector<int>& nums) {
if (nums.size() == 1) {
return nums[0];
}
if (nums.size() == 2 || nums.size() == 3) {
return -1;
}
sort(nums.begin(), nums.end());
decltype(nums.size()) i=2;
while (i!=nums.size()) {
if (nums[i-2] == nums[i] && nums[i] == nums[i-1]) {
i += 3;
}
else {
return nums[i-2];
}
}
return nums[i-2];
}
};
runtime: 19ms
map
class Solution {
public:
int singleNumber(vector<int>& nums) {
if (nums.size() == 1) {
return nums[0];
}
map<int, int> mNum;
for (const auto &key : nums) {
++mNum[key];
}
for (auto i = mNum.begin(); i != mNum.end(); ++i) {
if (i->second == 1) {
return i->first;
}
}
return -1;
}
};
runtime: 28ms
位运算
以后再说。