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

本周的状态不是很好,感觉像是处在一个低潮期,做很多事都提不起兴趣,效率也并不高,需要好好调整一下自己的状态,找找根源,加油:)

posted @ 2022-03-06 15:05  永远是萌新的阿岩  阅读(33)  评论(0编辑  收藏  举报