題目:
鏈接:劍指 Offer 56 - II. 數(shù)組中數(shù)字出現(xiàn)的次數(shù) II
難度:中等
在一個數(shù)組 nums 中除一個數(shù)字只出現(xiàn)一次之外,其他數(shù)字都出現(xiàn)了三次。請找出那個只出現(xiàn)一次的數(shù)字。
示例 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
方法一:
位運(yùn)算:
看不懂學(xué)不會,直接看力扣題解吧。
方法二:
哈希表:
人類的方法,沒技術(shù)含量,統(tǒng)計出現(xiàn)次數(shù)。
代碼二:
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_map<int, int> hash;
for(auto n : nums)
hash[n]++;
for(auto n : hash)
if(n.second == 1) return n.first;
return 0;
}
};
時間復(fù)雜度O(N)。
空間復(fù)雜度O(N)。
方法三:
排序:
排個序,看左右值是否相等,沒相等的就是單獨(dú)出現(xiàn)的數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-546002.html
代碼三:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int len = nums.size();
sort(nums.begin(), nums.end());
for(int i = 0; i < len; i++)
{
if((i != 0 ? nums[i] != nums[i - 1] : true) && (i != len - 1 ? nums[i] != nums[i + 1] : true)) return nums[i];
}
return 0;
}
};
時間復(fù)雜度O(N)。
空間復(fù)雜度O(1)。文章來源地址http://www.zghlxwxcb.cn/news/detail-546002.html
到了這里,關(guān)于劍指 Offer 56 - II. 數(shù)組中數(shù)字出現(xiàn)的次數(shù) II(位運(yùn)算 / 哈希表 / 排序)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!