package com.company; import java.util.HashMap; import java.util.Map; /** * Created by mark on 2017/6/1. */ /** * 题目描述 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。 给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。 若没有金额超过总数的一半,返回0。 */ public class Gift { public static void main(String[] args) { // 测试用例 int[] gifts = {1, 2, 3, 2, 2}; int n = 5; System.out.println(pickOverHalf(gifts, 5)); // 2 } public static int pickOverHalf(int[] gifts, int n) { Map<Integer, Integer> counts = new HashMap<>(); for (int i = 0; i < n; i++) { int gift = gifts[i]; int originalCount = counts.getOrDefault(gift, 0); counts.put(gift, originalCount + 1); } for (Integer key: counts.keySet()) { if (counts.get(key) * 2 > n) { return key; } } return 0; } }
转载于:https://my.oschina.net/markzzz/blog/912296