题目地址
难度:⭐
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例1:
1 2
| 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2
|
限制:
🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️解题过程🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️
解题过程:
思路:
计数法:
unordered_map集合(数字为键,次数为值)存储数组中数字出现的次数,然后遍历集合查找出现次数超过数组长度一半的数字并返回。
c++代码:(执行用时48ms,击败59.81%,内存消耗18.9M,击败5.17%)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public: int majorityElement(vector<int>& nums) { unordered_map<int,int> m; int len=nums.size()/2; for(int i:nums){ ++m[i]; } for(auto j:m){ if(j.second>len){ return j.first; } } return 0; } };
|
⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳总 结⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳
总结:
没有官方题解,over。