题解 | #数组中出现次数超过一半的数字#
数组中出现次数超过一半的数字
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163
#include <ctime> class Solution { public: //迭代更新,取众数,ret就是数组第一个值,times表示出现次数。最后值可以作为判断标准 int MoreThanHalfNum_Solution(vector<int> numbers) { if(numbers.empty()) return 0; int ret=numbers[0]; int times=1; for(int i=1;i<numbers.size();i++) { if(times!=0) { if(ret==numbers[i]) { times++; } else { times--; } } else { ret=numbers[i]; times=1; } } //遍历数组,找众数 times=0; for(int i=0;i<numbers.size();i++) { if(ret==numbers[i]) { times++; } } if(times>numbers.size()/2) return ret; return 0; } };
数组第一个作为数组第一个假设值,记录次数。然后进行比较相同时数字times++,不同数字times--。然后判断times进行最后数组众数比较。看出现次数是否过半。