Python 程式查詢最大擦除值
假設我們有一個名為 nums 的陣列(僅包含正值),我們想要擦除一個包含唯一元素的子陣列。我們將獲得一個分數,即子陣列元素的總和。我們必須找到透過精確擦除一個子陣列可以獲得的最大分數。
因此,如果輸入類似於 nums = [6,3,2,3,6,3,2,3,6],則輸出將為 11,因為這裡的最佳子陣列是 [6,3,2] 或 [2,3,6],所以總和為 11。
為了解決這個問題,我們將遵循以下步驟 -
- seen := 一個新的對映
- ans := sum := 0
- l := 0
- 對於每個索引 r 和值 x nums,執行
- 如果 x 出現在 seen 中,則
- index := seen[x]
- 當 l <= index 時,執行
- 刪除 seen[nums[l]]
- sum := sum - nums[l]
- l := l + 1
- seen[x] := r
- sum := sum + x
- ans := ans 和 sum 的最大值
- 如果 x 出現在 seen 中,則
- 返回 ans
示例
讓我們看看以下實現以獲得更好的理解 -
def solve(nums): seen = dict() ans = sum = 0 l = 0 for r, x in enumerate(nums): if x in seen: index = seen[x] while l <= index: del seen[nums[l]] sum -= nums[l] l += 1 seen[x] = r sum += x ans = max(ans, sum) return ans nums = [6,3,2,3,6,3,2,3,6] print(solve(nums))
輸入
[6,3,2,3,6,3,2,3,6]
輸出
11
廣告