【数组】169. 多数元素-数组中出现次数大于[n/2]的元素
题目:

解答:
思路:
如果我们把众数记为+1,把其他数记为-1,将它们全部加起来,显然和大于0,从结果本身我们可以看出众数比其他数多。
算法:
Boyer-Moore算法的详细步骤如下:
1)维护一个候选众数candidate和它出现的次数count。初始时,candidate可以为任意值,count为0;
2)遍历数组nums中的所有元素,对于每个元素x,在判断x之前,如果count的值为0,我们先将x的值赋值给candidate,随后我们判断x:
A. 如果x与candidate相等,那么计数器count的值增加1;
B. 如果x与candidate不等,那么计数器count的值减少1;
3)在遍历完成后,candidate即为整个数组的众数。
1 class Solution { 2 public: 3 int majorityElement(vector<int>& nums) 4 { 5 int curNum = nums[0]; 6 int len = nums.size(); 7 8 int count = 1; 9 for (int i = 1; i < len; ++i) 10 { 11 if (count == 0) 12 { 13 curNum = nums[i]; 14 count = 1; 15 } 16 else 17 { 18 if (nums[i] != curNum) 19 { 20 count--; 21 } 22 else 23 { 24 count++; 25 } 26 } 27 } 28 29 return curNum; 30 } 31 };

浙公网安备 33010602011771号