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 };
标签:hash,val,nums,int,元素,摩尔,169,vote,候选人 来源: https://www.cnblogs.com/MGFangel/p/16320516.html