[剑指Offer]数组中出现次数超过一半的数字
2018-01-21 21:04
281 查看
/* 思路: 数字中有一个数组出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现次数的和还要多。 因此我们可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字,一个是次数。 当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1 如果下一个数字和之前保存的数字不用,则次数减1. 如果次数为0,我们需要保存下一个数字,并把次数设为1. 由于我们要找的数字出现的次数比其他所有数字出现的次数之和还要多,那么要找的数字肯定是最后一次把数字设为1时对应的数字 */ class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { int len=numbers.size(); int result=numbers[0], time=1;//result答案,time保存的数出现次数 for(int i=1; i<len; i++) { if(time==0) { result=numbers[i]; time=1; } else if(result==numbers[i]) time++; else time--; } int check=0; for(int i=0; i<len; i++)//检查是否存在次数超过一半的数 if(result==numbers[i]) check++; if(check*2<=len) return 0; return result; } };
相关文章推荐
- 剑指offer-数组中出现次数超过一半的数字
- 剑指offer 面试题29—数组中出现次数超过一半的数字
- 《苦练算法》-剑指Offer- 二十八、数组中出现次数超过一半的数字-python编写
- 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
- 【剑指Offer学习】【面试题29 :数组中出现次数超过一半的数字】
- 剑指offer 28 数组中出现次数超过一半的数字
- 剑指offer——数组中出现次数超过一半的数字
- 剑指offer 数组中出现次数超过一半的数字
- 剑指offer-面试题29 找到数组中出现次数超过一半的数字-1
- 剑指OFFER之数组中出现次数超过一半的数字(九度OJ1370)
- 剑指offer_数组中出现次数超过一半的数字
- 剑指offer 数组中出现次数超过一半的数字
- 剑指offer——数组中出现次数超过一半的数字
- 剑指offer--数组中出现次数超过一半的数字
- 剑指offer之面试题29:数组中出现次数超过一半的数字
- 剑指Offer-29-数组出现次数超过一半的数字-基于Partition函数的O(n)算法
- 剑指offer-29:数组中出现次数超过一半的数字
- 【剑指offer】Q29:数组中出现次数超过一半的数字
- 剑指Offer之面试题29:数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字