腾讯2016笔试题-红包

    下面这道题据说是腾讯2016年的一道校招笔试题,下面我给出一个菜鸟的分析与解答。

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

[1,2,3,2,2],5

返回:2
<pre name="code" class="java">package tencent;

import java.util.*;

public class tencentTest {	
		public int getValue(int[] gifts, int n) {
	        // write code here
	        int fre = 0;
	        int fremax = 0;
	        int res = 0;
	        int[] c = new int[n];
	        for(int x=0;x<n;x++){
	            fre = 0;//每一个金额出现次数重置
	            for(int y = 0;y<n;y++){
	                if(gifts[x]==gifts[y]){
	                    fre +=1;  
	                }
	            }
	            c[x]=fre;
	        }
	        for(int x=0;x<n;x++){
	        	fremax = c[0];
	            if(c[x]>=fremax){
	            	fremax=c[x];
	            }
	        }
	        for(int x=0;x<n;x++){	        	
	            if(fremax==c[x]){            	
	                res = x;	                
	            }
	        }
	        return gifts[res];
	    }
	
      public static void main(String args[]){
    	  int a[] = {37256,61520,11540,61520,69323,61520,61520};
    	  tencentTest t = new tencentTest();
    	  int s = t.getValue(a, 7);
    	  System.out.println(s);
      }
}



      根据题目要求,我们首先要统计每一个红包金额出现的次数,可以遍历gift数组,每取出一个金额数,遍历一遍该数组,以计算该金额数的次数。将对应的次数存入一个数组从c[n]中,当某个金额数出现的次数大于n/2时,那么他肯定是c[n]数组中所有值的最大值,我们通过判断该值在c[n]中的位置,即可得出对应的金额数。

      当然算法比较笨,效率肯定不高,新手上路,请多关照。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值