zoukankan      html  css  js  c++  java
  • leecode第一百六十九题(求众数)

    class Solution {
    public:
        void quick_sort(vector<int>& nums,int res,int res_end)
        {
            if(res_end-res<1)//错过,不能小于2
                return;
            int begin=res;
            int end=res_end;
            bool flag=true;
            
            while(res!=res_end)
            {
                if(flag)
                {
                    if(nums[res]>nums[res_end])
                    {
                        int temp=nums[res];
                        nums[res]=nums[res_end];
                        nums[res_end]=temp;
                        res++;
                        flag=!flag;
                    }
                    else
                        res_end--;
                }
                else
                {
                    if(nums[res]>nums[res_end])//错过,不小心写成小于了
                    {
                        int temp=nums[res];
                        nums[res]=nums[res_end];
                        nums[res_end]=temp;
                        res_end--;
                        flag=!flag;
                    }
                    else
                        res++;
                }
            }
            
            quick_sort(nums,begin,res);
            quick_sort(nums,res+1,end);
            
        }
        
        
        
        int majorityElement(vector<int>& nums) {
            int len=nums.size();
            //int res;
            //sort(nums.begin(),nums.end());//解法一:现成API
            //quick_sort(nums,0,len-1);//解法二:手写了快排,但是最长的那个时间通不过,这是因为sort()函数里面不是单纯的快排,里面还有堆排序和插入排序等情况
            //return nums[len/2];
            
            int count = 1;//解法三,网友提供,从第一个数开始count=1,遇到相同的就加1,遇到不同的就减1,减到0就重新换个数开始计数,总能找到最多的那个
            int maj = nums[0];
            for (int i = 1; i < len; i++) {
                if (maj == nums[i])
                    count++;
                else {
                    count--;
                    if (count == 0) {
                        maj = nums[i + 1];
                    }
                }
            }
            return maj;
            
            //解法4:哈希表
        }
    };

    分析:

    题简单但是思想不简单啊,尤其是网友公认的这个,值的学习。

  • 相关阅读:
    Hackerrank--Emma and sum of products (FFT)
    Hdu 1402 (FFT)
    Hackerrank--Divisibility of Power(Math)
    Hackerrank--Stock Maximize(DP Practice)
    Codeforces 455B
    vim 简明教程(转自飘过的小牛)
    ACdream 1007 (快速幂)
    编写可维护的JS 02
    编写可维护的JS 01
    图片加载-从模糊到清晰
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10718587.html
Copyright © 2011-2022 走看看