最大獲利的工作安排 Most Profit Assigning Work_Leetcode #826 Greedy策略

更新於 發佈於 閱讀時間約 4 分鐘

題目敘述 Most Profit Assigning Work

公司裡有n位員工,m件任務。

每位員工的能力記錄在worker陣列。

每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。

不同的員工可以做同樣的任務。

請問怎麼分配任務可以得到整體最大獲利?


測試範例

Example 1:

Input: difficulty = [2,4,6,8,10], profit = [10,20,30,40,50], worker = [4,5,6,7]
Output: 100
Explanation: Workers are assigned jobs of difficulty [4,4,6,6] and they get a profit of [20,20,30,30] separately.

Example 2:

Input: difficulty = [85,47,57], profit = [24,66,99], worker = [40,25,25]
Output: 0

難度都超過員工能力值,沒有合適的任務。​ 

約束條件

Constraints:

  • n == difficulty.length
  • n == profit.length

總共有n個任務

  • m == worker.length

總共有m位員工。

  • 1 <= n, m <= 10^4

參數n和m都介於1~一萬之間。

  • 1 <= difficulty[i], profit[i], worker[i] <= 10^5

任務難度、任務獲利、員工能力都介於1~十萬之間。


觀察 人盡其才 Greedy策略

最大獲利 直覺想到的就是盡可能挑能力範圍內,獲利大的任務來做。

先針對每個任務依據難度從小到大排序。

每位員工也依據能力從小到大排序。


接著,針對每位員工,在他的能力範圍內,挑選獲利最大的任務來做。

這邊的思想就是(Greedy策略)局部最佳化,進一步帶來整體的最佳化


演算法 人盡其才 Greedy策略

承接觀察點的思考。

每個任務依據難度從小到大排序。

每位員工也依據能力從小到大排序。

針對每位員工,在他的能力範圍內,挑選獲利最大的任務來做。


程式碼 人盡其才 Greedy策略

class Solution:
def maxProfitAssignment(self, difficulty : List[int], profit: List[int], worker: List[int]) -> int:

# sort jobs by (difficulty, profit) pair
jobs = sorted(zip(difficulty , profit))

# sort worker by ability from small to large
worker.sort()

total_profit, job_index, max_profit = 0,0,0

# Each worker choose the job which has most profit and within ability.
for ability in worker:

while job_index < len(jobs) and jobs[job_index][0] <= ability:
max_profit = max(max_profit, jobs[job_index][1])
job_index+=1

total_profit += max_profit

return total_profit

複雜度分析

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

排序任務耗費O( n log n)

排序員工耗費O( m log m)

分配任務耗費O( m + n)

空間複雜度: O(n)

重新產生一個新的任務的(難度, 獲利)陣列,所需空間為O(n)


關鍵知識點 Greedy策略

針對每位員工,在他的能力範圍內,挑選獲利最大的任務來做

這邊的思想就是(Greedy策略)局部最佳化,進一步帶來整體的最佳化


Reference

[1] Most Profit Assigning Work - LeetCode

留言
avatar-img
留言分享你的想法!
avatar-img
小松鼠的演算法樂園
95會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
企業面對大專案時,將其分解成可執行的小任務,有助於實現目標。以提升銷售額為例,拆解為四個要素,並提供增加流量、轉換率、客單價和回購率的策略。另外,還必須設計可量化的指標及追蹤回饋。這些建議對於創作型工作和知識型工作者來說,同樣可以利用該策略來提高工作效率。
Thumbnail
企業面對大專案時,將其分解成可執行的小任務,有助於實現目標。以提升銷售額為例,拆解為四個要素,並提供增加流量、轉換率、客單價和回購率的策略。另外,還必須設計可量化的指標及追蹤回饋。這些建議對於創作型工作和知識型工作者來說,同樣可以利用該策略來提高工作效率。
Thumbnail
會議,是許多中小企業最喜歡做的事情。 曾經看過一個團隊一周最少開7-10個會議,有時會更多,最後的結果大都議而不決,不斷地探討特殊個案的解方,或是調整企畫內容去符合某些小眾的需求。  換個角度來看,這些在職場的日子上,我們有多少企劃、多少的專案提報,總是過不了上面主管、頂層老闆的首肯。
Thumbnail
會議,是許多中小企業最喜歡做的事情。 曾經看過一個團隊一周最少開7-10個會議,有時會更多,最後的結果大都議而不決,不斷地探討特殊個案的解方,或是調整企畫內容去符合某些小眾的需求。  換個角度來看,這些在職場的日子上,我們有多少企劃、多少的專案提報,總是過不了上面主管、頂層老闆的首肯。
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
Thumbnail
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
Thumbnail
1-領導能力: 能激勵和引導團隊達成目標 展現決策力和遠見,確保組織朝著正確的方向發展 2-戰略思維: 制定並實施長短期的策略計劃 分析市場趨勢和競爭環境,調整策略以保持競爭優勢 3-決策能力: 根據數據和分析進行明智的決策 在面臨壓力
Thumbnail
1-領導能力: 能激勵和引導團隊達成目標 展現決策力和遠見,確保組織朝著正確的方向發展 2-戰略思維: 制定並實施長短期的策略計劃 分析市場趨勢和競爭環境,調整策略以保持競爭優勢 3-決策能力: 根據數據和分析進行明智的決策 在面臨壓力
Thumbnail
✨閱讀後你將學會: 識別並專注關鍵任務:學會辨識出哪20%的工作努力帶來80%的結果。 優化工作流程:理解如何優化或委派80%的低效工作,以提升整體工作效率。 持續的自我評估:定期檢視與調整工作策略,確保持續聚焦於高價值任務。
Thumbnail
✨閱讀後你將學會: 識別並專注關鍵任務:學會辨識出哪20%的工作努力帶來80%的結果。 優化工作流程:理解如何優化或委派80%的低效工作,以提升整體工作效率。 持續的自我評估:定期檢視與調整工作策略,確保持續聚焦於高價值任務。
Thumbnail
當你在帶領團隊,明明每個人都很忙碌,成效卻不如預期怎麼辦?看看這位鋼鐵公司總裁的真實經歷,每天透過這個策略達到事半功倍的效果。
Thumbnail
當你在帶領團隊,明明每個人都很忙碌,成效卻不如預期怎麼辦?看看這位鋼鐵公司總裁的真實經歷,每天透過這個策略達到事半功倍的效果。
Thumbnail
分配工作是管理者的基本技能之一,也是提升管理效率的重要途徑。本篇文章介紹了有效佈置工作的6個步驟,此外,也解釋定期對下屬的工作進行獎懲和檢討,可以進一步提高工作效率和品質的原因。
Thumbnail
分配工作是管理者的基本技能之一,也是提升管理效率的重要途徑。本篇文章介紹了有效佈置工作的6個步驟,此外,也解釋定期對下屬的工作進行獎懲和檢討,可以進一步提高工作效率和品質的原因。
Thumbnail
在職埸中曾經參與過一家公司由願景萌芽到茁壯實現,過程辛苦但不茫然,因為知道自己認真努力的工作,會得到回饋。 高層主管由建構願景開始發展公司的營運方針,由遠到近訂定長、中、短期執行計劃,依據目標製定策略目標,依據策略目標給予各階層主管年度的績效目標KPI Key Performance Index。
Thumbnail
在職埸中曾經參與過一家公司由願景萌芽到茁壯實現,過程辛苦但不茫然,因為知道自己認真努力的工作,會得到回饋。 高層主管由建構願景開始發展公司的營運方針,由遠到近訂定長、中、短期執行計劃,依據目標製定策略目標,依據策略目標給予各階層主管年度的績效目標KPI Key Performance Index。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News