zoukankan      html  css  js  c++  java
  • leetcode 169. Majority Element

    题意:数组长度为N,找出数组中元素出现个数大于N/2 的众数

    法一:先排序,再来一次遍历硬数一下

    class Solution
    {
    public:
        int majorityElement(vector<int>& nums)
        {
            if (nums.size() == 1) return nums[0];
            int ret = 1,val,tmp=1;
            sort(nums.begin(),nums.end());
            for (int i=1; i<nums.size(); i++)
            {
                if (nums[i] == nums[i-1])
                {
                    tmp++;
                    if (tmp > ret)
                    {
                        ret = tmp;
                        val = nums[i];
                    }
                }
                else
                {
                    tmp = 1;
                }
            }
            return val;
        }
    };
    

     法二:Moore Voting Algorithm算法,动画在这里:http://www.cs.utexas.edu/~moore/best-ideas/mjrty/example.html#step12  看了动画就能理解了

    class Solution
    {
    public:
        int majorityElement(vector<int>& nums)
        {
            int elem = nums[0],ct = 1;
           for (int i=1; i<nums.size(); i++)
           {
               if (ct == 0)
               {
                   elem = nums[i];
                   ct = 1;
               }
               else  if (nums[i] == elem)
               {
                   ct++;
               }
               else  if (nums[i] != elem)
               {
                   ct--;
               }
           }
          return elem;
        }
    };
    

      法三:随机数,

    class Solution
    {
    public:
        int majorityElement(vector<int>& nums)
        {
           if (nums.size() == 1)return nums[0];
            
            while (1)
            {
                int pos = rand()%(nums.size() -1);
                int ct = 0;
                for (int i=0; i<nums.size(); i++)
                {
                    if (nums[i] == nums[pos])ct++;
                }
                if (ct > nums.size()/2 )
                    return nums[pos];
            }
        }
    };
    

      

      

  • 相关阅读:
    %取余的用法
    数据结构总结
    【OpenCV】访问Mat中的每个像素值
    逻辑运算的妙用-Single Number
    Android EditText设置为Number类型后获取数字
    XX.exe 系统找不到指定文件
    error LNK2001: unresolved external symbol _main
    [c++] opencv加载png
    CDH 不能监控hadoop状态
    GoLang安装
  • 原文地址:https://www.cnblogs.com/sxy-798013203/p/7658906.html
Copyright © 2011-2022 走看看