排序應用題 Sort Integers by The Number of 1 Bits Leetcode #1356

更新於 2024/10/29閱讀時間約 2 分鐘

題目敘述

題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。

規則:

bit1 數目多的大於bit1數目少的。

若兩個整數bit1數目一樣多,則原本整數比較大的勝出。

詳細的題目可在這裡看到


測試範例

Example 1:

Input: arr = [0,1,2,3,4,5,6,7,8]
Output: [0,1,2,4,8,3,5,6,7]
Explantion: [0] is the only integer with 0 bits.
[1,2,4,8] all have 1 bit.
[3,5,6] have 2 bits.
[7] has 3 bits.
The sorted array by bits is [0,1,2,4,8,3,5,6,7]

Example 2:

Input: arr = [1024,512,256,128,64,32,16,8,4,2,1]
Output: [1,2,4,8,16,32,64,128,256,512,1024]
Explantion: All integers have 1 bit in the binary representation, you should just sort them in ascending order.



約束條件

Constraints:

  • 1 <= arr.length <= 500
  • 0 <= arr[i] <= 104

演算法

依照規則,進行客製化排序,升序排列即可。

  1. 先依照bit 1的數目排序。
  2. 若bit 1的數目平手,再依照原本整數的大小排序。

程式碼

class Solution:
 def sortByBits(self, arr: List[int]) -> List[int]:
  
  return sorted(arr, key = lambda x : ( bin(x)[2:].count('1'), x) )

複雜度分析

時間複雜度:

O( n log n ) 標準排序演算法所付出的時間成本。

空間複雜度:

O( n ) 中間為了排序所產生的temp array和原本的輸入陣列一樣長。


關鍵知識點

基本上不難,以python的視角來看,關鍵是要熟悉lambda functionbinary string bin()、和 out-of-place sorting sorted()的語法。


Reference:

[1] Python sol. by customized lambda 90%+ [with Hint and Explanation] - Sort Integers by The Number of 1 Bits - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
題目給定一個規律變化的二進位字串,問我們第N排,第K個bit是多少? 變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10 第一排初始化是0 第二排是01 第三排是0110 第四排是01101001 ...其餘依此類推 詳細的題目可在這裡看到
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
這題算是路徑計數類的DP衍伸題(路徑數、方法數、組合數...等等這種枚舉類的題目,第一時間切入除了想到DFS+回溯法之外,也可以留意DP動態規劃解題的可能性) 題目會給我們一個指定長度為arrLen的陣列,起點從index=0開始出發,每次移動可以往左移一格,往右移一格,或是留在原地不
題目會給定兩個字串s,t,把裡面的井字號#視為鍵盤上的backspace,往前(往左方)吃掉最靠近的字元。 請位最後全部依照規則處理完以後,s,t剩下的字串內容兩者是否相等?
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
題目給定一個規律變化的二進位字串,問我們第N排,第K個bit是多少? 變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10 第一排初始化是0 第二排是01 第三排是0110 第四排是01101001 ...其餘依此類推 詳細的題目可在這裡看到
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
這題算是路徑計數類的DP衍伸題(路徑數、方法數、組合數...等等這種枚舉類的題目,第一時間切入除了想到DFS+回溯法之外,也可以留意DP動態規劃解題的可能性) 題目會給我們一個指定長度為arrLen的陣列,起點從index=0開始出發,每次移動可以往左移一格,往右移一格,或是留在原地不
題目會給定兩個字串s,t,把裡面的井字號#視為鍵盤上的backspace,往前(往左方)吃掉最靠近的字元。 請位最後全部依照規則處理完以後,s,t剩下的字串內容兩者是否相等?
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
在思考自己想要過什麼生活時,都會有個功課是要排序自己的價值觀。當遇到需要做抉擇的時刻,價值觀排序是一種很好的決策依據,幫助我們走在自己想要的人生道路。我發現,價值觀排序似乎也對應著自己的人生課題。
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
給定兩個輸入陣列,第一個陣列代表每個人的姓名,第二個陣列代表每個人的身高。依照身高從高到矮進行排列,輸出每個人的名字。本文介紹了一個根據身高排列人名的算法,並提供了相關的程式碼和時間複雜度分析。
Thumbnail
題目敘述 題目會給定一個輸入陣列intervals,陣列元素都是一組pair, intervals[i] = [starti, endi],分別代表區間的起點,和區間的終點。 請問我們最少要刪除幾個區間,才能讓剩下的區間彼此都不重疊? 題目的原文敘述 測試範例 Example 1:
Thumbnail
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
Thumbnail
孩子要能夠勝任圖卡排序這樣的活動,大概需要具備觀察力、認知能力、生活中步驟性的活動經驗…。我最近也在想,會不會跟孩子較少進行多步驟的家事、較少觀看具有順序情節的影片有關係咧?
Thumbnail
排序是EXCEL一個相當基礎且實用的功能,就是可以幫助我們將數據由大小小排列,或是資料快速分類排序。 但排序根據使用的方式不同其實有三種隱藏的功能,可以快速解決職場工作上特定的疑難雜症 先描述一下三種問題,操作方法在文章後面的影片中 💡第一種-移除資料空白列 資料中若有很多空白列想
Thumbnail
撰寫日期:2023.08.02 作者:FAHAHA|翁順法 邏輯有兩個面向,一個是分類,一個是排序。 分類就是將多個重點歸納成 3~5 類,降低聽眾的認知負荷;排序,則是安排重點的先後順序,一步步引導聽眾進入結論。 排序做得好,聽你簡報就像在聽故事一樣有沈浸感。 怎麼排序呢?
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
在思考自己想要過什麼生活時,都會有個功課是要排序自己的價值觀。當遇到需要做抉擇的時刻,價值觀排序是一種很好的決策依據,幫助我們走在自己想要的人生道路。我發現,價值觀排序似乎也對應著自己的人生課題。
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
給定兩個輸入陣列,第一個陣列代表每個人的姓名,第二個陣列代表每個人的身高。依照身高從高到矮進行排列,輸出每個人的名字。本文介紹了一個根據身高排列人名的算法,並提供了相關的程式碼和時間複雜度分析。
Thumbnail
題目敘述 題目會給定一個輸入陣列intervals,陣列元素都是一組pair, intervals[i] = [starti, endi],分別代表區間的起點,和區間的終點。 請問我們最少要刪除幾個區間,才能讓剩下的區間彼此都不重疊? 題目的原文敘述 測試範例 Example 1:
Thumbnail
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
Thumbnail
孩子要能夠勝任圖卡排序這樣的活動,大概需要具備觀察力、認知能力、生活中步驟性的活動經驗…。我最近也在想,會不會跟孩子較少進行多步驟的家事、較少觀看具有順序情節的影片有關係咧?
Thumbnail
排序是EXCEL一個相當基礎且實用的功能,就是可以幫助我們將數據由大小小排列,或是資料快速分類排序。 但排序根據使用的方式不同其實有三種隱藏的功能,可以快速解決職場工作上特定的疑難雜症 先描述一下三種問題,操作方法在文章後面的影片中 💡第一種-移除資料空白列 資料中若有很多空白列想
Thumbnail
撰寫日期:2023.08.02 作者:FAHAHA|翁順法 邏輯有兩個面向,一個是分類,一個是排序。 分類就是將多個重點歸納成 3~5 類,降低聽眾的認知負荷;排序,則是安排重點的先後順序,一步步引導聽眾進入結論。 排序做得好,聽你簡報就像在聽故事一樣有沈浸感。 怎麼排序呢?