1. 程式人生 > 其它 >ARTS Week 28

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

本週的狀態不是很好,感覺像是處在一個低潮期,做很多事都提不起興趣,效率也並不高,需要好好調整一下自己的狀態,找找根源,加油:)