//https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&&tqId=11181&rp=1&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking //JZ39 数组中出现次数超过一半的数字 //遍历把两个不同的数删去,最后剩下的就是众数 class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { // sort(numbers.begin(), numbers.end()); // int ans = numbers[numbers.size() / 2]; // return ans; int ans = 0; int count = 0; //count计数 for (int i = 0; i < numbers.size(); ++i) { if (count == 0) { //如果count为 0,把ans换成当前的数继续遍历 ans = numbers[i]; ++count; } else { ans == numbers[i] ? count++ : count--; //如果两个数相同就--count,不相同就++count //比如说当前ans是4,count是1,下一个数也是4,那么count就会是2,那么要再遍历两个不同于4的数从才把ans换成别的数 } } return ans; } };