笔试练习二
来源:互联网 发布:java android api 编辑:程序博客网 时间:2024/05/21 07:52
一. 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
int Get_MoreThanHalf_Num(char arr[],int n){if (n <= 0){return -1;}int ret = 0;int times = 0;for (int i = 0; i < n; ++i){if (times == 0){ret = arr[i]; times++ }if (arr[i] == ret){times++;}else{times--;}}int count = 0;for (int i = 0; i < n; ++i){if (arr[i] == ret){count++;}}return (count > n / 2) ? ret : 0;}
二.大数乘法
输入的数据有两行,分别是两个非负数,最多10000位
输出他们的乘积
示例:
213897129837128937123
43502789523572345
输出
9305121819000846375051301723846663435
string big_number_multiply(string a, string b){int a_len = a.length();int b_len = b.length();int len = a_len + b_len;vector<int> multi(len, 0);for (int i = 0; i < b_len; ++i){for (int j = 0; j < a_len; ++j){multi[i + j] += (b[b_len - i - 1] - '0') * (a[a_len - j - 1] - '0');}}int inc = 0; //进位for (int i = 0; i < len; ++i){multi[i] += inc;inc = multi[i] / 10;multi[i] %= 10;}int flag = 0;for (int i = len - 1; i >= 0; --i){if (multi[i] != 0){flag = i;break;}}string strRet;strRet.resize(flag+1);for (int i = flag; i >= 0; --i){strRet[flag-i] = multi[i] + '0';}return strRet;}
1 0
- 笔试练习二
- 笔试题练习(二)
- C语言笔试练习(二)
- [笔试练习]
- 笔试题练习1
- [笔试] 编程练习小计
- 笔试题目练习
- Java笔试题练习
- 笔试习题练习
- C笔试题练习
- 华为笔试2014---练习
- 4.10 华为笔试练习
- c#笔试练习
- 笔试题程序练习
- 笔试练习一
- 笔试练习三
- 笔试练习四
- 笔试练习四
- 关于大型网站技术演进的思考(十四)--网站静态化处理—前后端分离—上(6)
- 挖掘DBLP作者合作关系,FP-Growth算法实践(5):挖掘研究者合作关系
- 文档词频分析小工具
- 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)
- UVa 340 - Master-Mind Hints
- 笔试练习二
- 有关Mac版本AS类里面无法编写代码的问题
- MYSQL中group_concat有长度限制!默认1024
- 微信手机网页上传图片高效率压缩(Canvas+Base64)
- Java中的native方法
- 《深入理解java虚拟机》读书笔记:Java对象的内存布局
- MarkDown使用说明
- 山东省第一届ACM大学生程序设计竞赛 Shopping 水。。。。。。。
- SpringMVC -- HelloWorld/@RequestMapping(1)