Majority Element
生活随笔
收集整理的這篇文章主要介紹了
Majority Element
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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.
給定size 為n的數(shù)組,查找出主元素,就是出現(xiàn)次數(shù)大于n/2次的元素。你可以假定數(shù)組非空,而且主元素一定存在。
class Solution { public:int majorityElement(vector<int>& nums) {map<int, int> im;for (int i = 0; i < nums.size(); ++i){map<int, int>::iterator it = im.find(nums[i]);if (it == im.end()) {im[nums[i]] = 1;} else {im[nums[i]]++;}if (im[nums[i]] > nums.size()/2) {return nums[i];}}return 0;} };
有一種算法叫 Moore’s Voting Algorithm,由Robert S.Boyer 和J Strother Moore于1980年發(fā)明,是線性時(shí)間復(fù)雜度。
int majorityElement(vector<int> &num) {int majority;int cnt = 0;for(int i=0; i<num.size(); i++){if ( cnt ==0 ){majority = num[i];cnt++;}else{majority == num[i] ? cnt++ : cnt --;if (cnt >= num.size()/2+1) return majority;}}return majority; }當(dāng)然,這種算法對(duì)于存在主元素的數(shù)組是有效的,如:
A A A C C B B C C C B C C
它肯定能返回主元素C。但是,如果不存在主元素,那么得到的結(jié)果就跟遍歷順序有關(guān)了。如:
A A A C C C B
如果是從左到右,那么結(jié)果是B,如果是從右到左,那么結(jié)果是A。
class Solution { public:int majorityElement(vector<int>& nums) {int n = nums.size(); sort(nums.begin(),nums.end()); return nums[n/2]; } };#include<iostream> #include<vector> #include<algorithm> #include<map> using namespace std; int major(vector<int>); int main() {vector<int>a = { 1, 2, 3, 4, 2, 2, 5, 2, 2, 2, 2, 2, 2 };cout << major(a) << endl;system("pause");return 0;} int major(vector<int> a) {/*sort(a.begin(), a.end());return a[a.size() / 2];*//*map<int, int> m;for (int i = 0; i < a.size(); i++){if (m.find(a[i]) == m.end()){m[a[i]] = 1;}else{m[a[i]]++;}if (m[a[i]]>a.size() / 2)return a[i];}*///標(biāo)志位想減法 可以判斷出現(xiàn)次數(shù)做多數(shù)int major;int num = 0;for (int i = 0; i < a.size(); i++){if (num == 0){major = a[i];num++;}else{if (major != a[i])num--;else{num++;}}if (num > a.size() / 2) return major;}}
總結(jié)
以上是生活随笔為你收集整理的Majority Element的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Roman to Integer
- 下一篇: Factorial Trailing Z