牛客网----2016腾讯,,微信红包
来源:互联网 发布:淘宝刷佣金单有风险吗 编辑:程序博客网 时间:2024/05/18 01:45
时间限制:3秒
空间限制:32768K
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。
若没有金额超过总数的一半,返回0。测试样例:
[1,2,3,2,2],5
返回:2
代码如下:
class Gift {public: int getValue(vector<int> gifts, int n) { // write code here if(gifts.size() == 0 || n <= 0) return 0; int data = gifts[0]; int times = 1; for(int i = 1; i < n; ++i) { if(gifts[i] == data) { ++times; } else { --times; if(times == 0) { data = gifts[i]; times = 1; } } } int c = 0; for(int i = 0; i < n; ++i) { if(gifts[i] == data) ++c; } if(c >= n/2) { return data; } else return 0; }};
思路:这是一个求数组中出现次数超过一半的数字的题。在剑指offer上有的。剑指offer上提供了两种思路,一个是使用快速排序中的partition,另一个思路使用统计次数。当然最后还要进行核对。两种思路的时间复杂度都是O(n).
但是使用快速排序中的partition的算法改变了原始数组。
使用统计次数的算法没有改变原数组。
阅读全文
0 0
- 牛客网----2016腾讯,,微信红包
- 牛客网---2016---腾讯微信红包
- 腾讯-微信红包 腾讯-生成格雷码
- 2016年腾讯模拟笔试“微信红包”问题
- 微信红包(腾讯2016研发工程师编程题)
- 腾讯2016研发工程师编程题之微信红包
- 微信红包(2016腾讯校招笔试题)
- 腾讯2016研发工程师编程题(二)----微信红包
- 腾讯笔试题 微信红包
- [腾讯校招] 微信红包
- 腾讯笔试题--微信红包
- 微信红包-腾讯校招
- 腾讯笔试题--微信红包
- 腾讯2016研发工程师编程题——微信红包
- 腾讯2016笔试题-微信红包-找出数组中过半数的数字
- 名企笔试:腾讯2016招聘笔试(微信红包)
- 名企笔试:腾讯2016招聘笔试(微信红包)
- 2016校招真题编程练习——微信红包(腾讯)
- js异步加载的三种解决方案
- 数据标准化 Normalization
- Linux进程间通信之管道
- 抽象类和抽象方法
- [BZOJ]2434 阿狸的打字机 AC自动机+Fail树+树状数组
- 牛客网----2016腾讯,,微信红包
- 百度地图海量点清除(始终保留最新的点)
- Android系统service的包名是:"android"
- C陷阱与缺陷
- 多线程---join---模拟打麻将
- 【C++心路历程35】【bzoj1632】[Usaco2007 Feb]Lilypad Pond
- HTTP协议的头信息
- luogu1077【2012普及】 摆花(dp)
- boost::function/bind 的使用