题目:
数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
示例:
输入:[1,2,5,9,5,9,5,5,5]
输出:5
解题方法:
经常出现类似的题目,都是求出现次数的,以前的做法就是开一个数组,数组的索引就是要统计的数字,数组值用来统计数字出现次数,但是这样也有一个问题,就是需要知道数字的范围,或者说数字范围不能太大,所以字符串类问题经常用这个方法,对于数字就不是很好处理了。
但是我还是不太想放弃,想到了用map,但是怎么用一直搞不清楚,因为不知道怎么统计数字出现次数,看了题解以后,大致明白了,关键点就是map会自动初始化value。虽然最后的运行效果只能说一般,但是这个方法还是在刷题中有很多机会用到的。
代码和结果:
class Solution {
public:
int majorityElement(vector<int>& nums) {
map<int,int> ans;
for(int i=0;i<nums.size();i++)
{
ans[nums[i]]++;
}
for(map<int,int>::iterator mlt=ans.begin();mlt!=ans.end();mlt++)
{
if(mlt->second>nums.size()/2)
{
return mlt->first;
}
}
return -1;
}
};
运行结果:
原题链接:https://leetcode-cn.com/problems/find-majority-element-lcci/
网友评论