腾讯2016测试开发岗笔试题--数组中出现次数超过一半的数字
2015-09-07 20:53
417 查看
题目:春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
思路:这题其实就是剑指offer上的第29题,书上给了两种思路,一个是排序后的中位数,一个是利用规律,即它出现的次数比其他所有数字出现的次数的和还要多。
思路:这题其实就是剑指offer上的第29题,书上给了两种思路,一个是排序后的中位数,一个是利用规律,即它出现的次数比其他所有数字出现的次数的和还要多。
package org.algorithm.pointoffer; public class Item29 { public static int MoreThanHalfNum(int[] num, int length) { if(num.length <= 0 || num == null) return -1; int result = num[0]; int time = 1; for(int i = 1; i < length; i++) { if(time == 0) { result = num[i]; time = 1; } else if(result == num[i]) time ++; else time --; } time = 0; for(int i = 0; i < length; i++) if(num[i] == result) time ++; if(time*2 > length) return result; else return -1; } public static void main(String[] args) { // TODO Auto-generated method stub int testArray[] = { 1, 2, 3, 2, 2, 2, 5, 4, 2 }; System.out.println(MoreThanHalfNum(testArray, 9)); } }
相关文章推荐
- 目录与文件的权限意义
- 【CQOI2006】【BZOJ2618】凸多边形
- POJ 2348 Euclid's Game
- HDU 1217 Arbitrage(Flody)
- POJ3632解题报告
- Python之面向对象初体验
- iOS学习篇章3--SEL与@selector
- 小马哥---高仿红米note 主板型号T600 分A B D 三版本 拆机主板图与开机界面图
- 记录一个查询颜色RGB和HSV值还有HTTP状态码等的网站
- MAP集合应用
- python会什么比c慢
- Internet应用简介和使用学习工具总结
- HDU 1542 Atlantis (线段树 +离散化+ 扫描线)
- HDU5095
- Hadoop源码分析之DataNode的启动与停止
- hashmap
- 1-6 Zabbix 一些基本监控项
- android模拟器无法复制文件到sdcard
- 分支结构:(Day-2)
- Mac下清理DNS缓存的方法