AcWing 52 数组中出现次数超过一半的数字
2019-03-10 09:48
148 查看
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,并且一定存在满足条件的数字。
样例
[code]输入:[1,2,1,1,3] 输出:1
分析:
有趣的问题。采用两个变量存储中间状态,val表示可能的解,cnt表示其出现的次数。
初始val取第一个数,cnt为1;继续向后扫描,如果扫到的元素值与val相等,则cnt++;否则判断cnt是否为0,是则val换人,不是则cnt--。这样到结尾,由于所求的元素出现次数超过一半,最后的获胜者一定是它。
[code]class Solution { public: int moreThanHalfNum_Solution(vector<int>& nums) { int val = nums[0],cnt = 1; for(int i = 1;i < nums.size();i++){ if(nums[i] == val) cnt++; else{ if(!cnt) val = nums[i]; else cnt--; } } return val; } };
相关文章推荐
- 数组中出现次数超过一半的数字:虽然hash是o(1)的时间,但是空间却有O(n)
- 数组中出现次数超过一半的数字
- 剑指Offer学习总结-数组中出现次数超过一半的数字
- 找数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 剑指offer(25)-数组中出现次数超过一半的数字
- 剑指offer第二十八题【数组中出现次数超过一半的数字】c++实现
- 剑指Offer:面试题29 数组中出现次数超过一半的数字
- 剑指-数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 《剑指offer》-找出数组中出现次数超过一半的数字
- 剑指offer面试题 求数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字
- 《剑指Offer》学习笔记--面试题29:数组中出现次数超过一半的数字
- 剑指offer-----面试题29(数组中出现次数超过一半的数字)
- 剑指offer-29:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字
- 剑指Offer 29 数组中出现次数超过一半的数字