ARTS Week 28
Algorithm
本周的 LeetCode 题目为 347. 前 K 个高频元素
给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
先遍历一次数组,利用Map统计出各个元素的出现次数。而后将不同元素的出现次数作为排序的依据,维护一个大小为k的小顶堆,最后获取堆顶的元素即可。
import java.util.SortedMap;
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> numCount = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
numCount.put(nums[i], numCount.getOrDefault(nums[i], 0) + 1);
}
PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[1] - o2[1];
}
});
for (int key : numCount.keySet()) {
int count = numCount.get(key);
if (pq.size() == k) {
if (pq.peek()[1] < count) {
pq.poll();
pq.offer(new int[]{key, count});
}
} else {
pq.offer(new int[]{key, count});
}
}
int[] ans = new int[k];
for (int i = 0; i < k; i++) {
ans[i] = pq.poll()[0];
}
return ans;
}
}
Review
本周 Review 的英文文章为:为什么我不开博客?
作者主要介绍了自己为什么不开设博客的原因,尽管作者喜欢coding,喜欢阅读,仍没有开设博客,主要列举了下面几个原因:
- “我没有什么有趣的事要说”:作者认为自己没有太多强烈的、独特的、新颖的看法需要分享出来
- “我不是一个好的程序员”:作者认为自己的大部分技能只不过是初学者水平,没有必要去分享出来
- “我不认为这是一个好的简历建设”:作者认为一般的博客不足以作为一个好的简历建设平台,如果你仅仅有博客,也许都没有人来访问
Tip
Makefile 中可以通过一个 .PHONY
来设定一个伪目标,进而实现其他功能,如实现 make clean
的功能,示例代码如下:
.PHONY : clean
clean:
rm $(OBJS) *.o a.out
Share
本周的状态不是很好,感觉像是处在一个低潮期,做很多事都提不起兴趣,效率也并不高,需要好好调整一下自己的状态,找找根源,加油:)