Given an array of size n, find the majority element. The majority element is the element that appears more than ?
times.
n/2 ?
You may assume that the array is non-empty and the majority element always exist in the array.
其实就是找到序列中出现次数最多的元素,而且已经提出假设这个序列不为空,同时这样的数字是一定存在的
我自己的解法比较土,就是利用一个map记录了每一个元素的出现的次数
class Solution { public: int majorityElement(vector<int> &num) { int length = num.size(); map<int,int> NumCount; for(int i = 0; i < length; i++) { NumCount[num[i]]++; } int maxNum = 0; int RetVal = 0; map<int,int>::iterator mapit = NumCount.begin(); for(;mapit != NumCount.end(); mapit++) { if(mapit->second > maxNum) { maxNum = mapit->second; RetVal = mapit->first; } } return RetVal; } };
每找出两个不同的element,则成对删除。最终剩下的一定就是所求的。
可扩展到? n/k ?的情况,每k个不同的element进行成对删除。但是这个是在这样的数据一定存在的前提下才可以,如果有两个数出现的次数相同,这个就不好扩展了
class Solution { public: int majorityElement(vector<int> &num) { int nTimes = 0; int candidate = 0; for(int i = 0; i < num.size(); i ++) { if(nTimes == 0) { candidate = num[i]; nTimes = 1; } else { if(candidate == num[i]) nTimes ++; else nTimes --; } } return candidate; } };
class Solution { public: int majorityElement(vector<int> &num) { int n = num.size(); sort(num.begin(),num.end()); return num[n/2]; } };
时间: 2024-10-01 11:07:53