JZ39 数组中出现次数超过一半的数字 #哈希# #排序#
数组中出现次数超过一半的数字
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&tqId=11181&ru=/exam/oj
解题思路:
思路一:哈希
- 遍历数组,将数字映射到哈希数组的元素加一,统计出各数字出现的次数。
- 遍历哈希数组,选出出现次数超过一半的数字。
思路二:排序取中
- 数组排序后,如果符合条件的数存在,则一定是数组中间那个数
- 比如:1,2,2,2,3;或2,2,2,3,4;或2,3,4,4,4等等
题解:
思路一:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
vector<int> hash;
hash.resize(10000);
for(auto e : numbers)
{
++hash[e];
}
for(size_t i = 0; i<hash.size(); ++i)
{
if(hash[i] > numbers.size()/2)
{
return i;
}
}
return 0;
}
};
思路二:
class Solution
{
public:
int MoreThanHalfNum_Solution(vector<int> numbers)
{
sort(numbers.begin(),numbers.end()); // 排序,取数组中间那个数
int middle = numbers[numbers.size()/2];
return middle;
}
};
智元机器人成长空间 207人发布