题解 | #数组中出现次数超过一半的数字# 很妙!
数组中出现次数超过一半的数字
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163
class Solution {
// 实际上 官解也没满足空间复杂度的要求
// 看到 一个挺秒的方法
// https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=295&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int n=numbers.size();
if(n<=2)
{
return numbers[0];
}
int sum=0 ; // 1的求和
int ans;
for(int i=0; i<n; ++i)
{
if(sum==0)
{
sum = 1;
ans = numbers[i];
}
else
{
if(numbers[i]==ans) // ana视为1
{
sum++;
}
else // 其他数均视为 -1
{
sum--;
}
}
}
return ans;
}
};
所谓性质构造
