数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/
链接:https://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163
class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { // 判空和numbers的元素如果是一个,则直接返回第一个元素 if(numbers.empty()) return 0; if(numbers.size() == 1) return numbers[0]; // 如果count==0,那么numbers[0]会多循环一次,所以count==1 int count = 1; int num = numbers[0]; int len = numbers.size(); for(int i = 1; i < len; i++) { // 如果相等,那么count++,反之则-- if(num == numbers[i]) count++; else count--; if(count == 0) { // 记录每次的数字 num = numbers[i]; count = 1; } } count = 0; // 重新算count的个数,如果大于直接返回记录的num,反之返回0 for(int i = 0; i < len; i++) { if(num == numbers[i]) count++; } return count > (len / 2) ? num : 0; } };