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

思路:采用阵地攻守的方法

          第一个元素作为第一个士兵,镇守阵地,times=1;当遇到相同的元素,则当做是朋友,times++,当遇到不同的元素,当做是敌人,则同归于尽。如果times==0,表示阵地没有士兵,则令下一个士兵作为坚守阵地,且times=1;循环遍历结束后,最后留在阵地的元素可能是主元素。

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        if(numbers.empty() || numbers.size()==0)
            return 0;
        int res=numbers[0];
        int times=1;
        for(int i=1;i<numbers.size();i++)
        {
             if(times==0)
             {
                 res=numbers[i];
                 times=1;
             }
            
            else if(res==numbers[i])
                times++;
            else
                times--;
        }
       if(times>=1)
       {
           times=0;
           for(int i=0;i<numbers.size();i++)
           {
               if(numbers[i]==res)
                   times++;
           }
           if(2*times<numbers.size())
               return 0;
           else
               return res;
       }
       else
           return 0;
    
    }
};

 

posted on 2019-03-20 09:54  小季123  阅读(73)  评论(0编辑  收藏  举报

导航