给定一个非空的整数数组,返回其中出现频率前 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 是数组的大小。
思路:把数字与对应的个数存入哈希表,排序
提交的代码:
class Solution {
public static List<Integer> topKFrequent(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
List<Integer> result = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++)
{
if(map.containsKey(nums[i]))
{
map.put(nums[i], map.get(nums[i])+1);
}
else
{
map.put(nums[i], 1);
}
}
List<Map.Entry<Integer, Integer>> entryList = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
Collections.sort(entryList, mapComparator);
int j = 0;
for (Map.Entry<Integer, Integer> entry : entryList) {
if (j >= k) {
break;
}
result.add(entry.getKey());
j++;
}
return result;
}
static Comparator<Map.Entry<Integer, Integer>> mapComparator = new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> item1, Map.Entry<Integer, Integer> item2) {
return item2.getValue() - item1.getValue();
}
};
}