LeetCode笔记:347. Top K Frequent Elements
来源:互联网 发布:怎么把淘宝开通手机 编辑:程序博客网 时间:2024/05/20 04:14
问题:
Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].Note:
* You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
* Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.
大意:
给出一个非空的整型数组,返回最频繁的k个元素。
例子:
给出 [1,1,1,2,2,3] 和 k = 2,返回 [1,2]。注意:
* 你可以假设k始终是有效的,1 ≤ k ≤ 不同的元素数。
* 你的算法时间复杂度要少于O(nlogn),n是数组的尺寸。
思路:
我们要知道哪些数字出现的最多,以及对应的次数,肯定要先遍历一遍并记录下各个数字出现的次数,这里我们用一个HashMap来记录,数字为key,值为它们出现的次数。
接着循环查找出现的最多、次多…的数字,并添加到结果中去。
代码(Java):
public class Solution { public List<Integer> topKFrequent(int[] nums, int k) { Map<Integer, String> map = new HashMap<Integer, String>(); for (int i = 0; i < nums.length; i++) { if (map.containsKey(nums[i])) {// 记录过 String numStr = map.get(nums[i]); int num = Integer.valueOf(numStr).intValue(); num ++; map.put(nums[i], String.valueOf(num)); } else {// 没记录过 map.put(nums[i], "1"); } } int[] keyArr = new int[map.size()]; int[] valueArr = new int[map.size()]; int[] used = new int[map.size()]; int index = 0; for (Integer key : map.keySet()) { keyArr[index] = key; System.out.println(key); valueArr[index] = Integer.valueOf(map.get(key)).intValue(); System.out.println(map.get(key)); index ++; } List<Integer> result = new ArrayList<Integer>(); while (k > 0) { int biggest = 0; for (int i = 0; i < used.length; i++) { if (used[i] != 1) { biggest = i; break; } } for (int i = 0; i < valueArr.length; i++) { if (valueArr[i] > valueArr[biggest] && used[i] != 1) biggest = i; } result.add(keyArr[biggest]); k --; used[biggest] = 1; } return result; }}
合集:https://github.com/Cloudox/LeetCode-Record
版权所有:http://blog.csdn.net/cloudox_
0 0
- LeetCode笔记:347. Top K Frequent Elements
- [leetCode刷题笔记]347. Top K Frequent Elements
- LeetCode #347. Top K Frequent Elements
- [leetcode] 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements
- <LeetCode OJ> 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- LeetCode Everyday: 347. Top K Frequent Elements
- 【leetcode】347. Top K Frequent Elements
- leetcode 347.Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- [leetcode]347. Top K Frequent Elements
- LeetCode-347.Top K Frequent Elements
- Leetcode 347.Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- 【LeetCode】347. Top K Frequent Elements
- Softmax的理解与应用
- 视频上传
- Phoenix安装小结
- 2017年超星慕课西方文化概论尔雅答案
- CentOS7安装mongodb
- LeetCode笔记:347. Top K Frequent Elements
- pandas库简介(1)--pandas的三种数据结构
- 使用Angular2及WebApi开发SPA类型的企业应用 - Part 6- RESTful 和 WebApi
- Linux上安装paramiko模块以及easy_install的安装方法
- 接口型设计模式(Interface patterns)之adapter(适配器)
- RAC 性能分析 - 'log file sync' 等待事件
- 网络状态代码数字的含义
- LeetCode: Ones and Zeroes
- Apache select和Nginx epoll模型区别