题目描述
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。
若没有金额超过总数的一半,返回0。
测试样例:
[1,2,3,2,2],5
返回:2
思路:
一开始理解错了,一直认为超过一半的数一定也会出现在开头或者末尾.看了别人的代码才意识到错误.
寻找超过一半的数,可以先找到最中间的数,如果n是偶数,最中间的两个数左右都行.所以题目可以理解为gifts[n/2]的个数有没有超过n/2
代码:
注释的是错误的代码
import java.util.*;
public class Gift {
/*排序后,最中间的位置一定是超过一半的数,但两端不一定是
public int getValue(int[] gifts, int n) {
int mid = n % 2 == 0 ? n/2-1 : n/2;