劍指offer____陣列中出現次數超過一半的數字
阿新 • • 發佈:2018-11-11
陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
class Solution { public: bool CheckHalfNum(vector<int> numbers,int result) { unsigned long times = 0; for(unsigned long i = 0; i < numbers.size(); ++i) { if(numbers[i] == result) { times++; } } bool isMoreHalf = true; if(times *2 <= numbers.size()) { isMoreHalf = false; } return isMoreHalf; } int MoreThanHalfNum_Solution(vector<int> numbers) { if(numbers.size() == 0) return 0; int result = numbers[0]; int times = 1; for(unsigned long i = 1; i < numbers.size(); ++i) { if(times == 0) { result = numbers[i]; times = 1; } else if(numbers[i] == result) { times++; } else { times--; } } if(!CheckHalfNum(numbers,result)) { result = 0; } return result; } };