【摩尔投票法】求数组中出现次数超过一半的数
摩尔投票法
学习资料:
1.算法讲解116【扩展】摩尔投票大加强,线段树里捉海王
练习题
写法一
class Solution {
public:
//摩尔投票法 https://www.bilibili.com/video/BV1Br421G7hB/
int majorityElement(vector<int>& nums) {
int val = 0, cnt = 0;
for (int &x : nums)
{
if (cnt == 0) val = x, cnt = 1; //下面两行是每个写法的区别
else if (val == x) cnt++;
else cnt--;
}
cnt = 0;
for (int &x : nums)
if (x == val)
cnt++;
if (cnt > nums.size() / 2) return val;
return -1;
}
};
写法二
class Solution {
public:
//摩尔投票法 https://www.bilibili.com/video/BV1Br421G7hB/
int majorityElement(vector<int>& nums) {
int val = 0, cnt = 0;
for (int &x : nums)
{
if (cnt == 0) val = x, cnt = 1;//下面两行是每个写法的区别
else if (val != x) cnt--;
else cnt++;
}
cnt = 0;
for (int &x : nums)
if (x == val)
cnt++;
if (cnt > nums.size() / 2) return val;
return -1;
}
};
写法三
class Solution {
public:
int majorityElement(vector<int>& nums) {
int val = 0, cnt = 0;
for (int &x : nums)
{
if (cnt == 0) val = x, cnt = 1;//下面两行是每个写法的区别
else if (val != x) cnt--;
else if (val == x) cnt++;
}
cnt = 0;
for (int &x : nums)
if (x == val)
cnt++;
if (cnt > nums.size() / 2) return val;
return -1;
}
};

浙公网安备 33010602011771号