排序應用: 依照頻率排列元素 Sort Array by Increasing Frequency_LC #1636

閱讀時間約 3 分鐘

題目敘述 Sort Array by Increasing Frequency Leetcode #1636

給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素

如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。


測試範例

Example 1:

Input: nums = [1,1,2,2,2,3]
Output: [3,1,1,2,2,2]
Explanation: '3' has a frequency of 1, '1' has a frequency of 2, and '2' has a frequency of 3.

Example 2:

Input: nums = [2,3,1,3,2]
Output: [1,3,3,2,2]
Explanation: '2' and '3' both have a frequency of 2, so they are sorted in decreasing order.

Example 3:

Input: nums = [-1,1,-6,4,5,-6,1,4,1]
Output: [5,-1,4,4,-6,-6,1,1,1]

約束條件

Constraints:

  • 1 <= nums.length <= 100

輸入陣列長度介於1~100。

  • -100 <= nums[i] <= 100

每個陣列元素介於-100 ~ 100之間。


演算法 客製化排序

依照題目敘述,有兩個排序條件

  1. 出現頻率由小到大
  2. 若頻率相同時,依照元素數值從大到小。

先建立一個字典,統計每個元素的出現次數。

接著呼叫排序function,並且傳入這兩條排序條件,進行客製化排序。

# 1. ​num_occ_dict[x] 代表出現頻率由小到大
# 2. -x代表 若頻率相同時,依照元素數值從大到小。

key=lambda x:(num_occ_dict[x], -x) )


Python sort with key 客製化排序的教學


程式碼 客製化排序

from collections import Counter

class Solution:
def frequencySort(self, nums: List[int]) -> List[int]:

# key: distinct number
# value: frequency of number
num_occ_dict = Counter(nums)

# Sort number by pair of (frequency, and negative value)
nums.sort( key=lambda x:(num_occ_dict[x], -x) )

return nums

複雜度分析

時間複雜度: O( n log n)

時間成本落在排序,所需時間為O(n log n)

空間複雜度: O(n)

建立字典,需要額外O(n)的空間。


Reference:

[1] Sort Array by Increasing Frequency - LeetCode

75會員
406內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
給定兩個輸入陣列,第一個陣列代表每個人的姓名,第二個陣列代表每個人的身高。依照身高從高到矮進行排列,輸出每個人的名字。本文介紹了一個根據身高排列人名的算法,並提供了相關的程式碼和時間複雜度分析。
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
給定一個陣列,分別代表每位顧客的抵達時間和廚師準備時間。請問平均的等待時間是多少? 等待時間定義為客人開始真正用餐的時間 - 客人抵達的時間。演算法為計算廚師的出餐時間。
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
給定兩個輸入陣列,第一個陣列代表每個人的姓名,第二個陣列代表每個人的身高。依照身高從高到矮進行排列,輸出每個人的名字。本文介紹了一個根據身高排列人名的算法,並提供了相關的程式碼和時間複雜度分析。
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
給定一個陣列,分別代表每位顧客的抵達時間和廚師準備時間。請問平均的等待時間是多少? 等待時間定義為客人開始真正用餐的時間 - 客人抵達的時間。演算法為計算廚師的出餐時間。
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
你可能也想看
Thumbnail
「設計不僅僅是外觀和感覺。設計是其運作的方式。」 — Steve Jobs 身為一個獨立文案,許多人會以為我們的生活只需要面對電腦,從無到有,用精巧的文字填滿空白的螢幕,呈現心目中獨具風格的作品。 ——有的時候可以如此,但其實這是我們夢寐以求的偶發日常。 更多的時候,白天的工作時間總被各種繁雜
Thumbnail
台股、美股近期明顯回檔,市場敘事發生改變,壞消息一樁接一樁出現,下一步該怎麼走呢?本文將探討近期的宏觀經濟事件,並分享個人的操作思考。
一直以來,我對於詩歌是「不可譯」這種看法不予苟同,理由很簡單,因為如果詩歌不可翻譯的話,那麼我們憑藉什麼與外國詩歌交流以打開嶄新的視界,又如何從異文化的詩歌思想中,得到深化本國文化系統的養份與契機?換句話說,設若將「不可譯」的消極性和否定性,目的在提醒譯詩者應當嚴謹不可放逸,它就為自身開創了新的可能
Thumbnail
高一,在高中學制裡年紀最小,最菜的一群。 在他們的心中,以下這些人的『地位』,大概是長這樣的排序: 高三學長姐 > 高二學長姐 > 老師 > 父母 難怪社團裡,學長姐交待的事,都會必恭必敬地如期完成! 但是老師或父母交待的事,就不一定了! #長兄如父,長姐如母……
Thumbnail
排序是EXCEL一個相當基礎且實用的功能,就是可以幫助我們將數據由大小小排列,或是資料快速分類排序。 但排序根據使用的方式不同其實有三種隱藏的功能,可以快速解決職場工作上特定的疑難雜症 先描述一下三種問題,操作方法在文章後面的影片中 💡第一種-移除資料空白列 資料中若有很多空白列想
Thumbnail
EXCEL中排序是一個基礎的功能,今天要分享利用函數將數據遞增遞減排序。 需要用到的函數有4個: ✍🏾ROW回傳當前或參照列號 函數說明=ROW(參照) ✍🏾SMALL找出第幾小的數值 函數說明=SMALL(範圍,範圍內第幾小) ✍🏾LARGE找出第幾大的數值 函數說明=SMALL(範
Thumbnail
如果我開一個雜貨店,詩歌也將會是我的零錢。
Thumbnail
如果你懂日文,可以試著念念看旁邊的俳句,瞭解一下文義,對照圖像,或許你能夠感受到這種特有的日式氛圍。「幽玄」是一種幽微、玄妙的境界,概念來自老莊,傳入日本後成為日本文化與美學的一個基礎成份。
今年4月至今,我寫了八首台灣俳句。鑑於當前俳句寫作者,大多以自身感受及日常生活事物,作為創作題材,因此我嘗試以台灣歷史及相關人事物,作為創作題材,並以「詠史」作為俳句的名稱開頭。俳句格式方面,我儘量遵循每句的字數限制、韻腳押韻、使用表現季節的詞語等規定,不隨便打破前人設立的格式。不足之處,敬請指教!
Thumbnail
一者才華傑出,卻因而受到「創作」的綑綁;另者揮灑自如,卻始終見不得光。他們相遇,沒有太多的浪漫,只有面對語言時的熱情,以及那被激起的火花。
秋日赤豔豔 墨鏡、機車配風涼 悠然晴天闊     〈椅子〉 那人靜靜默默 隨時承擔 全力支持 伴你提筆 陪你思量 期盼生活增添美好 許多詩文綻放如花
Thumbnail
「設計不僅僅是外觀和感覺。設計是其運作的方式。」 — Steve Jobs 身為一個獨立文案,許多人會以為我們的生活只需要面對電腦,從無到有,用精巧的文字填滿空白的螢幕,呈現心目中獨具風格的作品。 ——有的時候可以如此,但其實這是我們夢寐以求的偶發日常。 更多的時候,白天的工作時間總被各種繁雜
Thumbnail
台股、美股近期明顯回檔,市場敘事發生改變,壞消息一樁接一樁出現,下一步該怎麼走呢?本文將探討近期的宏觀經濟事件,並分享個人的操作思考。
一直以來,我對於詩歌是「不可譯」這種看法不予苟同,理由很簡單,因為如果詩歌不可翻譯的話,那麼我們憑藉什麼與外國詩歌交流以打開嶄新的視界,又如何從異文化的詩歌思想中,得到深化本國文化系統的養份與契機?換句話說,設若將「不可譯」的消極性和否定性,目的在提醒譯詩者應當嚴謹不可放逸,它就為自身開創了新的可能
Thumbnail
高一,在高中學制裡年紀最小,最菜的一群。 在他們的心中,以下這些人的『地位』,大概是長這樣的排序: 高三學長姐 > 高二學長姐 > 老師 > 父母 難怪社團裡,學長姐交待的事,都會必恭必敬地如期完成! 但是老師或父母交待的事,就不一定了! #長兄如父,長姐如母……
Thumbnail
排序是EXCEL一個相當基礎且實用的功能,就是可以幫助我們將數據由大小小排列,或是資料快速分類排序。 但排序根據使用的方式不同其實有三種隱藏的功能,可以快速解決職場工作上特定的疑難雜症 先描述一下三種問題,操作方法在文章後面的影片中 💡第一種-移除資料空白列 資料中若有很多空白列想
Thumbnail
EXCEL中排序是一個基礎的功能,今天要分享利用函數將數據遞增遞減排序。 需要用到的函數有4個: ✍🏾ROW回傳當前或參照列號 函數說明=ROW(參照) ✍🏾SMALL找出第幾小的數值 函數說明=SMALL(範圍,範圍內第幾小) ✍🏾LARGE找出第幾大的數值 函數說明=SMALL(範
Thumbnail
如果我開一個雜貨店,詩歌也將會是我的零錢。
Thumbnail
如果你懂日文,可以試著念念看旁邊的俳句,瞭解一下文義,對照圖像,或許你能夠感受到這種特有的日式氛圍。「幽玄」是一種幽微、玄妙的境界,概念來自老莊,傳入日本後成為日本文化與美學的一個基礎成份。
今年4月至今,我寫了八首台灣俳句。鑑於當前俳句寫作者,大多以自身感受及日常生活事物,作為創作題材,因此我嘗試以台灣歷史及相關人事物,作為創作題材,並以「詠史」作為俳句的名稱開頭。俳句格式方面,我儘量遵循每句的字數限制、韻腳押韻、使用表現季節的詞語等規定,不隨便打破前人設立的格式。不足之處,敬請指教!
Thumbnail
一者才華傑出,卻因而受到「創作」的綑綁;另者揮灑自如,卻始終見不得光。他們相遇,沒有太多的浪漫,只有面對語言時的熱情,以及那被激起的火花。
秋日赤豔豔 墨鏡、機車配風涼 悠然晴天闊     〈椅子〉 那人靜靜默默 隨時承擔 全力支持 伴你提筆 陪你思量 期盼生活增添美好 許多詩文綻放如花