Majority Element

来源:互联网 发布:北京金和网络北京 编辑:程序博客网 时间:2024/06/05 11:10

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.

解法一:
Moore voting algorithm–每找出两个不同的element,就成对删除即count–,最终剩下的一定就是所求的。时间复杂度:O(n)
这种算法很难想到,却很巧妙。

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

解法二:
将数组里的书保存到一个哈希表,然后找到个数大于n/2的数。

int majorityElement2(vector<int>& nums){    map<int, int> m;    map<int, int>::iterator iter;    for (int i = 0; i < nums.size(); i++){        iter = m.find(nums[i]);        if (iter == m.end()){            m[nums[i]] = 1;        }        else{            m[nums[i]]++;        }        if (m[nums[i]] > nums.size() / 2){            return nums[i];        }    }    return 0;}

参考:http://blog.csdn.net/booirror/article/details/42738563

0 0
原创粉丝点击