首页 > 代码库 > LeetCode—Majority Element
LeetCode—Majority Element
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.
其实就是找到序列中出现次数最多的元素,而且已经提出假设这个序列不为空,同时这样的数字是一定存在的
我自己的解法比较土,就是利用一个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]; } };
LeetCode—Majority Element
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。