题解 | #数组中出现次数超过一半的数字#

数组中出现次数超过一半的数字

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;
        }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务