169. 多數元素(hash表+摩爾投票法)
阿新 • • 發佈:2022-05-28
169. 多數元素
給定一個大小為 n
的陣列 nums
,返回其中的多數元素。多數元素是指在陣列中出現次數 大於 ⌊ n/2 ⌋
的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。
示例 1:
輸入:nums = [3,2,3] 輸出:3
示例 2:
輸入:nums = [2,2,1,1,1,2,2] 輸出:2提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
解法一:(hash表)
1 class Solution { 2 public: 3 intmajorityElement(vector<int>& nums) { 4 int n = nums.size(); 5 unordered_map<int, int> hashMap; // key->陣列中元素,value->元素出現的次數 6 for (auto &val : nums) { 7 hashMap[val]++; 8 if (hashMap[val] > (n / 2)) { 9 returnval; 10 } 11 } 12 return -1; 13 } 14 };
解法二:(摩爾投票法)
1 class Solution { 2 public: 3 int majorityElement(vector<int>& nums) { 4 int candicate = -1; // 候選人 5 int vote = 0; // 候選人票數 6 for (auto &num : nums) { 7 if (vote == 0) { // 如果候選人票數為0,則更新當前人為候選人 8 candicate = num; 9 } 10 if (candicate == num) { // 如果當前人為候選人,則候選人票數++ 11 vote++; 12 } else { // 否則票數抵消一個 13 vote--; 14 } 15 } 16 // 最終剩下的人即為多數元素 17 return candicate; 18 } 19 };