腾讯2015年应用开发笔试最后一题抽象--找到数组中一个超过数组长度一半的数字(java实现)

来源:互联网 发布:手机淘宝怎么取消授权 编辑:程序博客网 时间:2024/06/05 19:11

原题大概是一个现实情况,小明微信收到很多红包很开心,他发现有个红包金额出现的次数超过了总红包数的一半,求一种算法能快速找到这个金额。

抽象起来就是一个数组,存在一个数重复次数超过了数组长度的一半,找到这个数。

思想:用计数的方式表示删除两两个不同的元素,最后剩余的一定是要找的这个数字,时间复杂度为O(n),空间复杂度为O(1)

java程序如下:

public class Solution {boolean inputinvalid = false;public int moreThanHalfNum(int[] numbers,int length){if(numbers==null&&length==0){inputinvalid=true;return 0;}inputinvalid = false;int result = numbers[0];int times = 1;for(int i=1;i<length;i++){if(times==0){result=numbers[i];times=1;continue;}else if(result == numbers[i]){times++;}else{times--;}}//ensure the result appears more than half the lengthtimes = 0;for(int i=0;i<length;++i){if(result==numbers[i]){times++;}}if(times*2<=length){inputinvalid = true;return 0;}return result;}}




0 0
原创粉丝点击