博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】347-前K个高频元素
阅读量:5095 次
发布时间:2019-06-13

本文共 1135 字,大约阅读时间需要 3 分钟。

题目描述

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]

示例 2:

输入: nums = [1], k = 1输出: [1]

说明:

  • 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。

解题思路

采用桶排序。所谓桶排序就是设置若干个带下标的桶,每个桶的下标就是桶内元素出现的次数。

想要找到 topk,只需要从后往前数 k 个元素出来就可以了。

Java 实现

public List
topKFrequent (int[] nums, int k) { Map
frequencyMap = new HashMap
(); for (int num : nums) { frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } List
[] bucket = new List[nums.length + 1]; for (Integer key : frequencyMap.keySet()) { int freq = frequencyMap.get(key); if (bucket[freq] == null) { bucket[freq] = new ArrayList<>(); } bucket[freq].add(key); } List
ans = new ArrayList<>(); for (int pos = bucket.length - 1; pos >= 0 && ans.size() < k; pos--) { if (bucket[pos] != null) { ans.addAll(bucket[pos]); } } return ans;}

心得体会

使用HashMapgetOrDefault()构造每个元素出现频率的集合。

转载于:https://www.cnblogs.com/yuzhenzero/p/10696920.html

你可能感兴趣的文章
Django--ORM--模型增删改查--备忘
查看>>
转: 关于CAS cpu锁的技术说明。
查看>>
java中转义字符和路径符
查看>>
redux,react-redux、redux-thunk、redux-logger、redux-promise实例
查看>>
android开发的一点小总结,小杂言,小记录
查看>>
洛谷P3688/uoj#291. [ZJOI2017]树状数组
查看>>
Visio2013 64安装和激活
查看>>
python+webdriver 模拟用户交互工具
查看>>
linuxlinux0.11源码学习——bootsect.s学习
查看>>
获取没有key值的数据,用循环器
查看>>
转发:招聘一个靠谱的 iOS
查看>>
20165339 预备作业3 Linux安装及学习
查看>>
Mysql 根据时间戳按年月日分组统计
查看>>
Activity传递参数——传递简单数据
查看>>
Top Android App使用的组件
查看>>
Debounce 和 Throttle 的原理及实现---防止频繁触发某事件
查看>>
leetcode [309]Best Time to Buy and Sell Stock with Cooldown
查看>>
在C#中,前面不足位数要补零的Tips
查看>>
数据库系统概念学习 02. 关系模型概述
查看>>
poj2356 Find a multiple(抽屉原理|鸽巢原理)
查看>>