229. Majority Element II

来源:互联网 发布:网络编辑发展前景 编辑:程序博客网 时间:2024/06/05 16:04
//64ms 用了多余的空间class Solution {public:    vector<int> majorityElement(vector<int>& nums) {        unordered_map<int,int> m;        vector<int> v;        int n=nums.size();        for(int i=0;i<n;i++)        {            if(m.find(nums[i])==m.end()) m[nums[i]]=1;            else             {                m[nums[i]]++;            }            if(m[nums[i]]>n/3)            {                //cout<<nums[i]<<" ";                v.push_back(nums[i]);                m[nums[i]]=-n;            }        }        return v;    }};
//20ms//similar to quicksort//排序时候将其分为三部分,小于mark,等于mark,大于mark的,然后判断等于mark的个数够不够class Solution {public:    pair<int,int> find_partition(vector<int>& nums,int l,int r)    {        if(l==r) return {l,l};        int l0=l,r0=r;        int p=nums[l];        int start=l++;        int eq=l;        for(int i=l;i<=r;i++)        {            if(nums[i]<p)            {                if(i!=l)                {                     if(eq!=l)                    {                        int temp=nums[l];                        nums[l]=nums[i];                        nums[i]=nums[eq];                        nums[eq]=temp;                    }                    else                    {                        int temp=nums[l];                        nums[l]=nums[i];                        nums[i]=temp;                                             }                }                eq++;                l++;            }            else if(nums[i]==p)            {                int temp=nums[eq];                nums[eq]=nums[i];                nums[i]=temp;                 eq++;            }        }        l--;        int temp=nums[l];        nums[l]=nums[start];        nums[start]=temp;                return {l,eq-1};    }    void quick_sort(vector<int>& nums,int l,int r,vector<int>& v)    {        if(l>r) return;        pair<int,int> q=find_partition(nums,l,r);        if(q.second-q.first>=nums.size()/3)  v.push_back(nums[q.second]);        if(q.first-l>nums.size()/3) quick_sort(nums,l,q.first-1,v);        if(r-q.second>nums.size()/3) quick_sort(nums,q.second+1,r,v);    }    vector<int> majorityElement(vector<int>& nums) {        if(nums.size()<2) return nums;        vector<int> v;        int n=nums.size();        quick_sort(nums,0,nums.size()-1,v);        return v;    }};
0 0
原创粉丝点击