[Leetcode]Majority Element

来源:互联网 发布:c语言windows驱动编程 编辑:程序博客网 时间:2024/06/06 20:08

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.

class Solution {public:    /*algorithm1: sort and count the same elememnt      time: O(nlogn) space O(1)    */    int majorityElement(vector<int>& nums) {        if(nums.size() < 1)return 0;        int majCnt = 1,cnt = 1;        int maj = nums[0];        sort(nums.begin(),nums.end());        for(int i = 1;i < nums.size();i++){            if(nums[i]==nums[i-1]){                cnt++;            }            if(nums[i] != nums[i-1] || (i+1)==nums.size()){                if(cnt > majCnt){                    majCnt = cnt;                    maj = nums[i-1];                }                cnt = 1;            }        }        if(majCnt > nums.size()/2)return maj;        return 0;    }};class Solution {public:    /*algorithm2: count based on hash table       time: O(n) space O(n)    */    int majorityElement(vector<int>& nums) {        unordered_map<int,int>hash;        for(int i = 0;i < nums.size();i++)hash[nums[i]]++;        for(auto it = hash.begin();it != hash.end();it++){            if(it->second > nums.size()/2)return it->first;        }        return 0;    }}; class Solution {public:    /*algorithm3: voting algorithm      time: O(n) space O(1)      1,2,2    */    int majorityElement(vector<int>& nums) {        int n = nums.size();        if(n < 1)return -1;        int maj = nums[0],cnt = 1;        for(int i = 1;i < n;i++){            if(maj == nums[i]){                cnt++;            }else{                cnt--;                if(cnt == 0){                    maj = nums[i];                    cnt++;                }            }        }        cnt = 0;        for(int i = 0;i < n;i++){            if(maj == nums[i])cnt++;        }        if(cnt > n/2)return maj;        return -1;    }};


0 0