标签:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
给一数组,找出数组中的众数,众数就是出现的次数大于其他所有数出现次数之和。
假设数组不为空,且众数一定存在
通过遍历数组,将数组每个数都通过hashmap来统计其出现的个数,如果某个数个数超过一半,则为众数。
时间空间复杂度均为O(n)
众数存在的情况下,每次扔掉两个不同的数,众数不变,最终剩下的数一定是众数。
时间复杂度O(n),空间复杂度O(1)
class Solution { public: // hash_map method int majorityElement1(vector<int> &num) { int n =num.size(); if(n==1) return num[0]; map<int,int> m; for(vector<int>::iterator it=num.begin();it!=num.end();it++){ m[*it]+=1; if(m[*it] > floor(n/2)) return *it; } } // moore voting algorithm int majorityElement2(vector<int> &num){ int n=num.size(); if(n==1) return num[0]; int count=0; int x; for(int i=0;i<n;i++){ if(count==0){ x=num[i]; count=1; } else if(x==num[i]) ++count; else --count; } return x; };
(LeetCode 169) Majority Element
标签:
原文地址:http://www.cnblogs.com/AndyJee/p/4473484.html