题目:找到给定数组中出现次数大于长度一半的数字,若没有,则返回0。
思路:
第一种方法:直接利用map<int,int>其中第一个元素存放数组中出现的元素种类,第二个元素存放相对应元素出现的次数。
最后进行检查,判断是否有次数大于数组长度的一半。
这种方法的优点是简单容易理解,缺点是需要申请内存空间O(n)。
第二种方法:这种方法的思路是这样的:每次“删除”两个不同的元素,最后剩下的那个元素才可能是我们需要的结果,若剩下元素是不存在的,那么就是不存在。这种方法只需要申请O(1)的内存空间。
程序1:第一种方法:
class Solution {
public:int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty()) return 0;
map<int,int> temp;
for(int i=0;i<numbers.size();i++){
if(temp.find(numbers[i])!=temp.end()){
temp[numbers[i]]++;
}
else{
temp[numbers[i]]=1;
}
}
for(map<int,int>::iterat