剑指offer 数组中出现次数超过一半的数字
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路一:
1 class Solution { 2 public: 3 int MoreThanHalfNum_Solution(vector<int> numbers) { 4 int len = numbers.size(); 5 if (len == 0) 6 return 0; 7 int num = 1, temp = numbers[0]; 8 for (int i = 1; i < len; i++) { 9 if (numbers[i] != temp) { 10 if (num == 0) { 11 temp = numbers[i]; 12 num = 1; 13 } else { 14 num--; 15 } 16 } else { 17 num++; 18 } 19 } 20 int ans = 0; 21 for (int i = 0; i < len; i++) { 22 if (temp == numbers[i]) 23 ans++; 24 } 25 if (ans > (len >> 1)) 26 return temp; 27 else 28 return 0; 29 } 30 };
思路二:
借鉴快排思想。
越努力,越幸运