当前位置: 首页 > news >正文

力扣-347.前K个高频元素

题目描述

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

提示:题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。

class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer,Integer> map = new HashMap<>();//<值,出现的次数>for (int i = 0; i < nums.length; i++) {map.put(nums[i], map.getOrDefault(nums[i],0)+1);}PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return map.get(o2) - map.get(o1);}});//存值,自定义排序规则Set<Integer> set = map.keySet();for (Integer key: set){pq.add(key);}int[] res = new int[k];for (int i = 0; i < k; i++) {res[i] = pq.poll();}return res;}
}

小结:题目思路比较简单,难点在于优先级队列的使用和Map的遍历。

优先级队列PriorityQueue

// 自然排序(升序)
PriorityQueue<Integer> pq1 = new PriorityQueue<>();
pq1.add(3);  pq1.add(1);  pq1.add(2);  // 实际存储顺序可能无序,但poll()返回最小值并删除,peek()返回最小值// 自定义降序排序 Lambda表达式
PriorityQueue<Integer> pq2 = new PriorityQueue<>((a, b) -> b - a);
pq2.add(3);  pq2.add(1);  pq2.poll();  // 返回3// 自定义排序规则
PriorityQueue<Node> queue = new PriorityQueue<>(new Comparator<Node>() {@Override public int compare(Node n1, Node n2) {// 按 priority 升序return n1.priority - n2.priority;  }
});

Map的遍历方法

// 键找值
Set<Integer> keys = map.keySet();
for (Integer key : keys) {System.out.println(key + map.get(key));
}// 键值对
Set<Map.Entry<Integer, String>> sets = map.entrySet(); //将键值对封装为Entry类型
for (Map.Entry<Integer, String> set : sets) {System.out.println(set.getKey());System.out.println(set.getValue());
}// Lambda表达式
map.forEach((k, v) -> System.out.println(k + v));

相关文章:

  • (ML-Agents) 是一个开源项目,它使游戏和模拟能够作为使用深度强化学习和模仿学习训练智能代理的环境
  • 建造者模式(Builder Pattern)
  • Go 通道(Channel)入门与基础使用
  • ZZU-ARM汇编语言实验2
  • 41页PPT | 基于AI制造企业解决方案架构设计智能制造AI人工智能应用智能质检人工智能质检建设
  • 在C# 中使用建造者模式
  • Spring cloud-k8s容器化部署
  • 同步与异步:软件工程中的时空艺术与实践智慧-以蜻蜓hr人才系统举例-优雅草卓伊凡
  • 记录rust滥用lazy_static导致的一个bug
  • 论文笔记 - 《Implementing block-sparse matrix multiplication kernels using Triton》
  • Linux【7】------Linux系统编程(进程间通信IPC)
  • docker-compose和docker下载
  • mysql DQL(javaweb第七天)
  • 博客:基本框架设计(下)
  • 搭建第一个 Vite 项目
  • 【读论文】DiffPhyCon 扩散物理系统控制
  • 【Django】性能优化-普通版
  • C++ 网络编程(11)服务器逻辑层设计和消息完善
  • 7.7 Extracting and saving responses
  • 【医学目标检测】LN-DETR:一种基于多尺度特征融合的肺结节检测高效Transformer架构
  • 武汉前端工程师工资一般多少/廊坊自动seo
  • 华大基因背景调查/百度竞价是seo还是sem
  • 济南制作网站制作公司策划/杭州网站推广大全
  • 郑州网站权重/正规网站建设服务
  • 自适应网站建设/重庆seo俱乐部联系方式
  • 做的好看的国内网站欣赏/网站分享