题意
找出在数组中出现次数严格大于数组长度的一半的数。
输入保证这样的数一定存在。
分析
出现次数严格大于一半是一个很强的性质,这意味着其他数出现的次数加起来也没有这个数多。
利用这个性质,我们用一个变量记录一个值,另一个变量记录一个次数。
由于出现次数大于一半这个性质,考虑这样一个方法,如果每个众数出现和一个其他数出现相抵消,那么最后剩下的数就会是这个众数。
class Solution {
public:
int moreThanHalfNum_Solution(vector<int>& nums) {
int count = 0, value = 0x7f7f7f7f;
int len = nums.size();
for(int i = 0; i < len; i ++){
if(count == 0){
value = nums[i];
count ++;
}else if(value == nums[i])count ++;
else if(value != nums[i])count --;
}
return value;
}
};
芯片检测问题和这个问题的思路是差不多的: 有一堆芯片,正常芯片个数大于一半,芯片之间可以相互检测,好芯片的结果是准的,不合格的芯片结果可能准也可能不准,要找出所有合格的芯片。