剑指offer其他算法39.数组中出现次数超过一半的数字
Posted trevo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer其他算法39.数组中出现次数超过一半的数字相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/
循环抵消
统计数字出现的个数cnt = 0, val = -1;
遍历数组中每个数字x
如果val = x, cnt++
如果val != x,
1. cnt != 0, cnt--;
2. cnt == 0, 更新val和cnt
时间复杂度O(N) 空间复杂度O(1)
class Solution {
public:
int majorityElement(vector<int>& nums) {
int cnt = 0, val = -1;
for (auto x : nums)
{
if (x == val) cnt ++ ;
else
{
if (cnt) cnt -- ;
else
{
cnt = 1;
val = x;
}
}
}
return val;
}
};
以上是关于剑指offer其他算法39.数组中出现次数超过一半的数字的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 39. 数组中出现次数超过一半的数字 的 详细题解