LeetCode 918. 环形子数组的最大和(前缀和+单调队列)
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給定一個(gè)由整數(shù)數(shù)組 A 表示的環(huán)形數(shù)組 C,求 C 的非空子數(shù)組的最大可能和。
在此處,環(huán)形數(shù)組意味著數(shù)組的末端將會(huì)與開(kāi)頭相連呈環(huán)狀。
(形式上,當(dāng)0 <= i < A.length 時(shí) C[i] = A[i],且當(dāng) i >= 0 時(shí) C[i+A.length] = C[i])
此外,子數(shù)組最多只能包含固定緩沖區(qū) A 中的每個(gè)元素一次。
(形式上,對(duì)于子數(shù)組 C[i], C[i+1], …, C[j],不存在 i <= k1, k2 <= j 其中 k1 % A.length = k2 % A.length)
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-sum-circular-subarray
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
- 先將數(shù)組拼接一次,并計(jì)算前綴和
- 以每個(gè)位置為結(jié)束的子數(shù)組的前綴和,需要減去前面 n 個(gè)位置里的最小的前綴和,就是這段的最大值
- 使用單調(diào)遞增隊(duì)列來(lái)維護(hù)前面 n 個(gè)位置以?xún)?nèi)的前綴和的遞增,每次減去隊(duì)首的前綴和(最小的)
144 ms 44 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 918. 环形子数组的最大和(前缀和+单调队列)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 688. “马”在棋盘
- 下一篇: LeetCode 838. 推多米诺(模