本题目源自:AcWing
题目链接:52. 数组中出现次数超过一半的数字 - AcWing题库
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
假设数组非空,并且一定存在满足条件的数字.
样例
输入:[1,2,1,1,3]
输出:1
思路:在遍历这个数组的时候,我们希望直接得到这个数据对应出现的次数,所以我们使用map来存放,每次存放的时候就判断是否大于了数组的长度的一半,以最早的时间返回出去。
代码如下:
class Solution {
public:
map<int, int> mp;
int moreThanHalfNum_Solution(vector<int>& nums) {
for (unsigned i = 0;i < nums.size(); i ++) {
if (mp[nums[i]] != 0) {
mp[nums[i]] ++;
if (mp[nums[i]] > nums.size() / 2) return nums[i];
}
else{
mp[nums[i]] = 1;
if (mp[nums[i]] > nums.size() / 2) return nums[i];
}
}
}
};