zoukankan      html  css  js  c++  java
  • OJ练习35——T169 Majority Element

    得到一串整数的主元素。

    主元素即出现次数多于n/2(下界)的数。

    【思路】1.用map<int,int>类型,记录每个数据出现的次数。

    2.用博主陆草纯的算法,当连续两数不同时,就把两者抵消掉,剩下的就是主元素。

    【my code】

    int majorityElement(vector<int>& nums) {
            map<int,int>m;
            int num=nums.size()/2;
            for(int i=0; i<nums.size(); i++){
                m[nums[i]]++;
                if(m[nums[i]]>num)
                    return nums[i];
            }
        }

    【other code】

    int majorityElement(vector<int>& nums) {
            int nTimes = 0;
            int candidate = 0;
            for(int i = 0; i < nums.size(); i ++)
            {
                if(nTimes == 0)
                {
                    candidate = nums[i];
                    nTimes = 1;
                }
                else
                {
                    if(candidate == nums[i])
                        nTimes ++;
                    else
                        nTimes --;
                }
            }
            return candidate;
        }

    【评价】

    1.我的方法耗时40ms,排名较为靠后。

    2.陆神算法用时25ms,排名前排。但是陆神的算法适用于该数列已经排序的情况,说明题目是有这个条件的!

    先想到这里。

  • 相关阅读:
    meanshift聚类的实现
    birch聚类算法
    DBSCAN聚类算法的实现
    discrete adaboost的C++实现
    kd-tree的实现
    红黑树的实现——插入
    24位位图转8位灰度图
    将RGB数据写入BMP位图文件
    splay树的实现
    AVL树的实现
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4465028.html
Copyright © 2011-2022 走看看