好的子陣列的最大分數 Maximum Score of a Good Subarray_Leetcode#1793

閱讀時間約 4 分鐘
raw-image

這題的題目在這裡:


題目敘述

題目會給們一個陣列nums,還有一個k值。

好陣列定義是: 有包含nums[k]的子陣列。

分數定義是: min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1)

其中, i, j 分別是子陣列的左端點和右端點

請問,好的子陣列的最大分數是多少?


測試範例

Example 1:

Input: nums = [1,4,3,7,4,5], k = 3
Output: 15
Explanation: The optimal subarray is (1, 5) with a score of min(4,3,7,4,5) * (5-1+1) = 3 * 5 = 15.

Example 2:

Input: nums = [5,5,4,5,4,1,1,1], k = 0
Output: 20
Explanation: The optimal subarray is (0, 4) with a score of min(5,5,4,5,4) * (4-0+1) = 4 * 5 = 20.

約束條件

Constraints:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 2 * 104
  • 0 <= k < nums.length

演算法

因為題目一開始要求好的子陣列一定要包含nums[k]

所以讓滑窗初始化在nums[k]


接著,分數的定義是 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1)

= 滑窗內的最小值 * 滑窗長度


為了最大化分數讓滑窗往左右兩個,其中比較大的那一側去延伸,盡量讓分數維持住,下滑的慢一點。每一回合迭代去更新滑窗位的位置 和 分數的最大值。

最後,全部的滑窗延伸走完之後,分數的最大值就是 好的子陣列的最大分數,也是題目所求的最終答案。


程式碼

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

  # Initialize sliding window at nums[k]
  left, right = k, k
  min_val = nums[k]

  # Max score of good array
  max_score = min_val
  
  while left > 0 or right < len(nums) - 1:

   if left == 0 or (right < len(nums) - 1 and nums[right + 1] > nums[left - 1]):
    # right hand side is larger
    right += 1
   else:
    # left hand side is larger
    left -= 1

   # update minimal value of sliding window
   min_val = min(min_val, nums[left], nums[right])

   # update and maximize score of good array
   max_score = max(max_score, min_val * (right - left + 1))
  
  return max_score

複雜度分析

時間複雜度: O( n)
一次線性掃描,滑窗從長度為1 拓展到長度為n。

空間複雜度: O(1)
使用到的變數都是固定尺寸的臨時變數,皆為常數級別O(1)。


關鍵知識點

為了最大化分數讓滑窗往左右兩個,其中比較大的那一側去延伸,盡量讓分數維持住,下滑的慢一點。每一回合迭代去更新滑窗位的位置 和 分數的最大值。


Reference:

[1] Python O(n) by sliding window and greedy [w/ Comment] - Maximum Score of a Good Subarray - LeetCode

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給們一個陣列,還有一個k值。 接著進行比大小的遊戲,規則如下: 每次取陣列前兩個元素值比大小,比較小的會被重新安排到陣列最後方,陣列前兩個元素值比大小,同樣的,比較小的會被重新安排到陣列最後方。依此類推,反覆進行比大小的遊戲。 請問第一個能連贏k回合的是哪個數字?
題目會給我們兩個陣列left, right 分別代表每隻螞蟻所在的初始位置 和 方向,n代表木板長度。每隻螞蟻每秒鐘前進一單位長度。 問我們,每隻螞蟻從初始位置出發,0秒起算,當兩隻螞蟻相遇時,會互相掉頭,往相反方向前進,問最後一隻螞蟻掉落木板的時候是幾秒鐘?
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給定一個字串s,裡面都是由()*打散交錯而成。 配對規則 左括弧 ( 可以和 右括弧 ) 配對,其中 左括弧一定要在右括弧的左邊。 左括弧 ( 也可以和 *星號 配對,其中 左括弧一定要在*星號的左邊。 問我們給定的輸入字串s是否為合法括弧配對字串?
題目會給我們一個輸入陣列,陣列裡面存放的是每個元素做XOR之後的前綴累積值。 要求我們從累積值還原出原本的陣列元素值。 XOR前綴累積值定義: pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]
題目會給們一個陣列,還有一個k值。 接著進行比大小的遊戲,規則如下: 每次取陣列前兩個元素值比大小,比較小的會被重新安排到陣列最後方,陣列前兩個元素值比大小,同樣的,比較小的會被重新安排到陣列最後方。依此類推,反覆進行比大小的遊戲。 請問第一個能連贏k回合的是哪個數字?
題目會給我們兩個陣列left, right 分別代表每隻螞蟻所在的初始位置 和 方向,n代表木板長度。每隻螞蟻每秒鐘前進一單位長度。 問我們,每隻螞蟻從初始位置出發,0秒起算,當兩隻螞蟻相遇時,會互相掉頭,往相反方向前進,問最後一隻螞蟻掉落木板的時候是幾秒鐘?
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給定一個字串s,裡面都是由()*打散交錯而成。 配對規則 左括弧 ( 可以和 右括弧 ) 配對,其中 左括弧一定要在右括弧的左邊。 左括弧 ( 也可以和 *星號 配對,其中 左括弧一定要在*星號的左邊。 問我們給定的輸入字串s是否為合法括弧配對字串?
題目會給我們一個輸入陣列,陣列裡面存放的是每個元素做XOR之後的前綴累積值。 要求我們從累積值還原出原本的陣列元素值。 XOR前綴累積值定義: pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
「令人怦然心動的口感」,是第一口吃下PapaOligo半乳寡糖益生元的感受。 跟想像中完全不一樣,好吃的程度可能是保健食品的天花板。 在Youtube看到謝盈萱的廣告,不得不說她本人舉手頭足充滿說服力,瑜珈姿勢跟我平常做的招式差不多,但輕盈程度我真的是,差遠了。 不管是心理或生理,都是想追
Thumbnail
原來婚姻不是從此永遠幸福的在一起,是柴米油鹽還有你們我們他們。 B先生,24歲,憂鬱症。第一次被強制就醫,原因是計畫透過服藥過量來結束生命。沒有病史。目前已婚四年,正在辦離婚手續,有份穩定的工作。 B看起來比他的真實年齡成熟一些,言談舉止斯文而有禮貌 ; 以一個第一次進入精神病院的人來說,可以說是相
Thumbnail
在捷運大安站旁巷子內的’這間咖啡’,主推咖啡、鹹食、甜點,在我看來,有點像是國外的餐酒館。人人都需要一個情緒避難所,在我看來,'這間咖啡'無疑是最佳選擇之一。
Thumbnail
- 欸 你愛一個人的樣子好可悲 將一首詩剪得支離破碎灑在他桌上 期望他像拼圖那樣將它黏好 像電影裡那樣讀出你的文字 結果他只是困擾的笑了 將碎片掃進手心 從你身旁經過,將它們倒進垃圾桶 然後 你所謂痛恨世界的樣子好可悲 背台詞般唸著抄來的抱怨 以為那樣就是憤世嫉俗 把你空洞的言語傾倒在人們身上 以為
Thumbnail
H您好,有件事困擾了我很久,是關於喜歡上憂鬱症患者。 一年多前我在網路上認識了一個人,我們滿聊得來的,聊了三個月後我們見了面,這是我第一次跟網路上認識的人見面,見面之前他就一直說很喜歡我。之後他也是一直說一樣的話,但約好的第三次見面他失約了,他的解釋是因爲工作壓力,他常常睡不好。 H這樣說
Thumbnail
這次神蹟再一次說明,神蹟即使不是發生在自己身上,亦可以令身邊的人相信耶穌,因為神蹟只是指示牌。這次神蹟亦說明,耶穌行神蹟的方法未必如我們想像一般。我們祈求的事情未必如我們所想像一般發生,耶穌總有自己一套的行事方式。不過,神蹟的結果永遠是叫人得益處、叫人得到認信的機會!
Thumbnail
好開心! 我愛的電子計算機前兩天手一滑撲到地上,就再也不顯示了... 這台計算機陪伴我大概也7.8年有了吧。從工作之後,雖然是執行的工作,後來發現工作上時常需要用到計算機(作帳或統計之類),就開始愛上大台電子計算機,那種握持的手感,清晰的字體,按鍵的爽脆感(哈哈),真是用手機內建計算機無可比擬的,
Thumbnail
Mailchimp是一款全球知名的電子報軟體,除了採用當今熱門的訂閱制服務外,在其發展中採用的營運手法及行銷策略也是造就現今成功的一環。這篇文章會從Mailchimp的訂閱制商業模式開始討論到最新的Mailchimp Presents。
當你難過的時候,寫下來,憂傷將會減輕;當你快樂的時候,記下來,愉悅將會倍增;當你生氣的時候,記錄下來,憤怒就能得到紓解;當你有困難無法解決時,寫下來,也許就能找到應對的方法……。   而閱讀,除了能獲
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
「令人怦然心動的口感」,是第一口吃下PapaOligo半乳寡糖益生元的感受。 跟想像中完全不一樣,好吃的程度可能是保健食品的天花板。 在Youtube看到謝盈萱的廣告,不得不說她本人舉手頭足充滿說服力,瑜珈姿勢跟我平常做的招式差不多,但輕盈程度我真的是,差遠了。 不管是心理或生理,都是想追
Thumbnail
原來婚姻不是從此永遠幸福的在一起,是柴米油鹽還有你們我們他們。 B先生,24歲,憂鬱症。第一次被強制就醫,原因是計畫透過服藥過量來結束生命。沒有病史。目前已婚四年,正在辦離婚手續,有份穩定的工作。 B看起來比他的真實年齡成熟一些,言談舉止斯文而有禮貌 ; 以一個第一次進入精神病院的人來說,可以說是相
Thumbnail
在捷運大安站旁巷子內的’這間咖啡’,主推咖啡、鹹食、甜點,在我看來,有點像是國外的餐酒館。人人都需要一個情緒避難所,在我看來,'這間咖啡'無疑是最佳選擇之一。
Thumbnail
- 欸 你愛一個人的樣子好可悲 將一首詩剪得支離破碎灑在他桌上 期望他像拼圖那樣將它黏好 像電影裡那樣讀出你的文字 結果他只是困擾的笑了 將碎片掃進手心 從你身旁經過,將它們倒進垃圾桶 然後 你所謂痛恨世界的樣子好可悲 背台詞般唸著抄來的抱怨 以為那樣就是憤世嫉俗 把你空洞的言語傾倒在人們身上 以為
Thumbnail
H您好,有件事困擾了我很久,是關於喜歡上憂鬱症患者。 一年多前我在網路上認識了一個人,我們滿聊得來的,聊了三個月後我們見了面,這是我第一次跟網路上認識的人見面,見面之前他就一直說很喜歡我。之後他也是一直說一樣的話,但約好的第三次見面他失約了,他的解釋是因爲工作壓力,他常常睡不好。 H這樣說
Thumbnail
這次神蹟再一次說明,神蹟即使不是發生在自己身上,亦可以令身邊的人相信耶穌,因為神蹟只是指示牌。這次神蹟亦說明,耶穌行神蹟的方法未必如我們想像一般。我們祈求的事情未必如我們所想像一般發生,耶穌總有自己一套的行事方式。不過,神蹟的結果永遠是叫人得益處、叫人得到認信的機會!
Thumbnail
好開心! 我愛的電子計算機前兩天手一滑撲到地上,就再也不顯示了... 這台計算機陪伴我大概也7.8年有了吧。從工作之後,雖然是執行的工作,後來發現工作上時常需要用到計算機(作帳或統計之類),就開始愛上大台電子計算機,那種握持的手感,清晰的字體,按鍵的爽脆感(哈哈),真是用手機內建計算機無可比擬的,
Thumbnail
Mailchimp是一款全球知名的電子報軟體,除了採用當今熱門的訂閱制服務外,在其發展中採用的營運手法及行銷策略也是造就現今成功的一環。這篇文章會從Mailchimp的訂閱制商業模式開始討論到最新的Mailchimp Presents。
當你難過的時候,寫下來,憂傷將會減輕;當你快樂的時候,記下來,愉悅將會倍增;當你生氣的時候,記錄下來,憤怒就能得到紓解;當你有困難無法解決時,寫下來,也許就能找到應對的方法……。   而閱讀,除了能獲