class Solution {
public:
//还有不用空间的o(n)方法,两个数,一个是记录当前数result,一个是次数times
//初始时候,times=1,result=nums[0],如果下一个数字与当前不等,times--,
//如果下一个数字与当前相等,times++,如果times减到0了,那么需要更新result为
//下一个数字。
int majorityElement(vector<int>& nums) {
unordered_map<int,int> c;
for(int i=0;i<nums.size();i++)
{
if(c.count(nums[i])) c[nums[i]]+=1;
else c[nums[i]]=1;
}
int max = 0;
int res = 0;
for(unordered_map<int,int>::iterator it=c.begin();it!=c.end();it++){
if(it->second>max) {max=it->second;res=it->first;}
}
return res;
}
};
借助hash,写出了o(n)的算法,看了答案上还有不开辟额外的存储空间实现o(n)的方法,在此记录一下。 不用空间的o(n)方法,两个数,一个是记录当前数result,一个是次数times,初始时候,times=1,result=nums[0],如果下一个数字与当前不等,times--,
如果下一个数字与当前相等,times++,如果times减到0了,那么需要更新result为,下一个数字。因为一定会有一个数出现次数大于n/2,所以最后剩下的一定是这个数。