Java HashMap merge() 方法

打印 上一主题 下一主题

主题 857|帖子 857|积分 2571

3020. 子集中元素的最大数量【力扣周赛 382】用哈希表统计元素个数使用
点击查看代码
  1. class Solution {
  2.     public int maximumLength(int[] nums) {
  3.         Map<Long, Integer> cnt = new HashMap<>();
  4.         for (int x : nums) {
  5.             cnt.merge((long) x, 1, Integer::sum);
  6.         }
  7.         // while true:
  8.         Integer c1 = cnt.remove(1L);
  9.         int ans = c1 != null ? c1 - 1 | 1 : 0;
  10.         // 奇数-1为偶数,跟1取或后加1;偶数减1为奇数,或运算后不变(答案必须为奇数)
  11.         for (long x : cnt.keySet()) {
  12.             int res = 0;
  13.             for (; cnt.getOrDefault(x, 0) > 1; x *= x) {
  14.                 res += 2;
  15.             }
  16.             res = res + (cnt.containsKey(x) ? 1 : -1);
  17.             ans = Math.max(ans, res);
  18.         }
  19.         return ans;
  20.     }
  21. }
复制代码
感谢灵神,灵神题解,还使用了keySet()方法
merge()
点击查看代码
  1.         String k = "key";
  2.         HashMap<String, Integer> map = new HashMap<String, Integer>() {{
  3.             put(k, 1);
  4.         }};
  5.         map.merge(k, 2, (oldVal, newVal) -> oldVal + newVal);
复制代码
等价于:点击查看代码
  1.         String k = "key";
  2.         HashMap<String, Integer> map = new HashMap<String, Integer>() {{
  3.             put(k, 1);
  4.         }};
  5.         Integer newVal = 2;
  6.         if(map.containsKey(k)) {
  7.             map.put(k, map.get(k) + newVal);
  8.         } else {
  9.             map.put(k, newVal);
  10.         }
复制代码
jdk8源码和注释
点击查看代码[code] @Override    public V merge(K key, V value,                   BiFunction
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表