题解 | #数组中出现次数超过一半的数字#
数组中出现次数超过一半的数字
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163
#include <algorithm> #include <vector> #include <iostream> using namespace std; class Solution { public: int MoreThanHalfNum_Solution(vector<int>& numbers) { if(numbers.size()==1){ return numbers[0]; } std::sort(numbers.begin(),numbers.end()); int Foud=numbers.size()/2;//中间次数 int a=0; int firstpoint=1; int lastpoint=1; for(lastpoint=1;lastpoint<numbers.size();lastpoint++){ if(numbers[lastpoint]==numbers[lastpoint-1]){//我这个firstpoint意义不大,本来想前后指针,发现不用 numbers[firstpoint]=numbers[lastpoint]; ++firstpoint; ++a;//及时更新次数 } if(a>=Foud){ return numbers[firstpoint-1];//返回上一个比较的值 } if(numbers[lastpoint]!=numbers[lastpoint-1]){ a=0;//不相等重置a } } return -1; } };