【美团秋招】20230922小美的彩虹糖
小美的彩虹糖
小美有很多的彩虹糖,每颗彩虹糖都有一个颜色,她每天可以吃两颗彩虹糖,如果今天吃的彩虹糖组合是之前没吃过的组合,则小美今天会很高兴。
例如,小美有 6 颗彩虹糖,颜色分别是 [1,1,4,5,1,4]。
小红第一天吃一组颜色为 1 和 4 的彩虹糖,小美会很高兴;
第二天吃一组颜色为 4 和 1 的彩虹糖,小美不会很高兴;
第三天小美吃一组颜色为 1 和 5 的彩虹糖,小美会很高兴,此时小美共有 2 天很高兴。
小美想知道,她最多有几天会很高兴。
输入描述
第一行输入一个整数 n (1<=n<= 1 0 5 10^5 105)表示彩虹糖数量。
第二行输入 n 个整数表示彩虹糖颜色a (1<= a i a_i ai<= 1 0 9 10^9 109)。
输出描述
输出一个整数表示答案。
示例输入
6
1 1 4 5 1 4
输出
3
说明
第1天吃一组颜色为1,4的彩虹糖。
第2天吃一组颜色为4,5的彩虹糖。
第3天吃一组颜色为1,1的彩虹糖。
小美3天都会很高兴。
题解
哈希表统计每个出现的次数。如果次数大于2的,先作子环(x,x),然后遍历map的key,试着去匹配,次数还有且还没匹配到最后一个,作++
import java.util.*;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < n; i++) {int temp = in.nextInt();map.put(temp, map.getOrDefault(temp, 0) + 1);}//System.out.println(map);Object[] array = map.keySet().toArray();int count = 0;for (int i = 0; i < array.length; i++) {if (map.get(array[i]) >= 2) {map.put((Integer) array[i], map.get(array[i]) - 2);count++;}}//System.out.println(map);//System.out.println(count);for (int i = 0; i < array.length; i++) {for (int j = i + 1; j < array.length; j++) {if (map.get(array[i]) > 0 && map.get(array[j]) > 0) {map.put((Integer) array[i], map.get(array[i]) - 1);map.put((Integer) array[j], map.get(array[j]) - 1);count++;//System.out.println(map);}}}System.out.println(count);}
}