LeetCode 918. 环形子数组的最大和(前缀和+单调队列)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 918. 环形子数组的最大和(前缀和+单调队列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給定一個由整數數組 A 表示的環形數組 C,求 C 的非空子數組的最大可能和。
在此處,環形數組意味著數組的末端將會與開頭相連呈環狀。
(形式上,當0 <= i < A.length 時 C[i] = A[i],且當 i >= 0 時 C[i+A.length] = C[i])
此外,子數組最多只能包含固定緩沖區 A 中的每個元素一次。
(形式上,對于子數組 C[i], C[i+1], …, C[j],不存在 i <= k1, k2 <= j 其中 k1 % A.length = k2 % A.length)
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-sum-circular-subarray
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 先將數組拼接一次,并計算前綴和
- 以每個位置為結束的子數組的前綴和,需要減去前面 n 個位置里的最小的前綴和,就是這段的最大值
- 使用單調遞增隊列來維護前面 n 個位置以內的前綴和的遞增,每次減去隊首的前綴和(最小的)
144 ms 44 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 918. 环形子数组的最大和(前缀和+单调队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 688. “马”在棋盘
- 下一篇: LeetCode MySQL 1077.