码迷,mamicode.com
首页 > 微信 > 详细

[编程题] 微信红包

时间:2016-10-28 23:19:45      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:大于   数据   i++   space   编程   code   思路   思想   返回   


 

春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。

给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。

若没有金额超过总数的一半,返回0。

测试样例:
[1,2,3,2,2],5
返回:2
思想:这个算法的时间复杂度是O(n),另外用了两个辅助变量。
     k用于临时存储数组中的数据,j用于存储某个数出现的次数。
     开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k
     因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。
code
 public int getValue(int[] gifts, int n) {
        int k = gifts[0], j= 1; 
        for(int i = 1;i<n;i++){
             if(j==0)
                 k=gifts[i];
             if(gifts[i]==k)
                 j++;
             else j--;
         }
             
         if(j>1)
             return k;
         else 
             return 0;
    }

 

[编程题] 微信红包

标签:大于   数据   i++   space   编程   code   思路   思想   返回   

原文地址:http://www.cnblogs.com/chongerlishan/p/6009416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!