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


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

              第一个元素作为第一个士兵,镇守阵地,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;
        
        }
    };

  • 相关阅读:
    Java设计模式
    Java复习,Java知识点以及Java面试题(七)
    Java复习,Java知识点以及Java面试题(六)
    Java复习,Java知识点以及Java面试题(五)
    Java复习,Java知识点以及Java面试题(四)
    Java复习,Java知识点以及Java面试题(三)
    Java复习,Java知识点以及Java面试题(二)
    代理模式
    String的花式比较
    spring配置shiro的案例学习笔记
  • 原文地址:https://www.cnblogs.com/xiaoji123/p/10563032.html
Copyright © 2020-2023  润新知