2016腾讯模拟试题编程第二道
2016-04-02 21:01
295 查看
1、题目描述
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。
2、算法与思路
先将数组排序(至于采用什么的排序方法就随你了),如果有某金额超过一半,那么排序后数组中央必定也是改元素,然后遍历该数组,将所有等于中间数的值统计一下,即可得到出现最多红包的数量。如果该数目超过了数组长度的一半,则返回最多数量红包的金额,当然,如果不存在这样的红包,那么返回0;3、程序实现
</pre><pre code_snippet_id="1632794" snippet_file_name="blog_20160402_1_924315" name="code" class="cpp">#include<iostream> #include<cmath> #include<vector> using namespace std; class Gift { public: int getValue(vector<int> gifts, int n) { // write code here //先冒泡排序 int len = n; int tmp; for(int i=0;i<len;i++){ for(int j=0;j<len-i-1;j++){ if(gifts[j]>gifts[j+1]){ tmp = gifts[j]; gifts[j] =gifts[j+1]; gifts[j+1] = tmp; } } } int Maxnum = 0; int compa = gifts[len/2]; for(int i=0;i<len;i++){ if(gifts[i] == compa){ Maxnum++; } } if(Maxnum>len/2){ return compa; } return 0; //for(int i=0;i<len;i++){ // cout<<gifts[i]<<" "; //} } }; int main(){ vector<int> gifts; int e; int len=0; Gift g; cin>>e; while(e>0){ //如果大于0,则存入数组,长度+1; len++; gifts.push_back(e); cin>>e; } cout<<len<<endl; int max = g.getValue(gifts,len); cout<<max<<endl; return 0; }
相关文章推荐
- JAVA_基本LDAP操作实例
- Java 内存区域和GC机制(上)
- Java-Arrays的工具类
- 电网QT项目|QT的QTextEdit
- Java序列化机制和原理
- C++中文件流(fstream)的使用方法及示例
- java源文件的声明原则
- Java动态代理
- “浪潮杯”山东省赛 sdut 3256 BIGZHUGOD and His Friends II
- php获取复选框的值CheckBox的多个值
- LaTeX之代码语法高亮
- C++ 学习之路(11):多态性与虚函数
- java编程实战之闰年的判断程序编写
- Git命令学习之旅——分支
- java包package之二
- 如何查看 JAR 包的源代码
- springMVC简单的安全防御配置
- PHP之创建图像验证码 ---实例
- Java继承与组合
- Yii 框架学习--01 框架入门