剑指offer—数组中出现次数超过一半的数字
来源:互联网 发布:知乎超过1000赞的回答 编辑:程序博客网 时间:2024/05/16 01:02
华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/4
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
解析:对数组进行两次遍历,第一次找出唯一可能是超过数组长度一半的数字,第二次遍历进行验证。对于 第一步有很多实现。可以每次都采用删除两个不相同的数字,知道最后一个或者两个。也可以采用抵消计数(若出现一个不同的数字计数减一,下面代码1)
class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { int n = numbers.size(); if (n == 0) return 0; int num = numbers[0], count = 1; for (int i = 1; i < n; i++) { if (numbers[i] == num) count++; else count--; if (count == 0) { num = numbers[i]; count = 1; } } count = 0; for (int i = 0; i < n; i++) { if (numbers[i] == num) count++; } if (count * 2 > n) return num; return 0; }};
C++ lambda表达式解法:
class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { if (numbers.empty()) return NULL; int result=*find_if(numbers.begin(), numbers.end(), [numbers](int x) { return (count(numbers.begin(), numbers.end(), x) * 2) > numbers.size(); }); return result; }};
0 0
- 剑指offer--数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 【剑指Offer】数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字||剑指offer
- 剑指offer 数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- [剑指offer]数组中出现次数超过一半的数字
- 《剑指offer》-数组中出现次数超过一半的数字
- 剑指offer|数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer - 数组中出现次数超过一半的数字
- 剑指Offer:数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 剑指offer 数组中出现次数超过一半的数字
- Android中微信抢红包插件原理解析和开发实现
- POJ 2803 Defining Moment(水~)
- [leetcode-289]Game of Life(java)
- Mysql多列索引
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- 剑指offer—数组中出现次数超过一半的数字
- 堆栈溢出的原因
- 图片数字时钟
- 出现No module named numpy的解决办法
- Python-__builtin__与__builtins__的区别与关系
- 手机可以找到wifi,笔记本却找不到
- JSON 数据格式
- 操作系统基本知识
- 文件搜索命令-用户管理命令