1. 程式人生 > 其它 >169. 多數元素(hash表+摩爾投票法)

169. 多數元素(hash表+摩爾投票法)

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     int
majorityElement(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 return
val; 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 };