首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

劍指 Offer:最大子陣列和(九度 OJ 1372)——Kadane 演算法與索引追蹤

     編輯:關於C語言

題目

輸入多組測資,每組 n 個整數(n ≤ 100,000,值域 [-1000, 1000]),輸出最大連續子陣列和及其起始、結束索引。若多解,輸出起始索引最小者。

Kadane 演算法單掃描

int curSum = arr[0], maxSum = arr[0];
int curL = 0, maxL = 0, maxR = 0;
for (int i=1; i maxSum) {
        maxSum = curSum; maxL = curL; maxR = i;
    }
}

關鍵細節

  • curSum < 0 時重置:捨棄前綴,從當前元素重新開始
  • 記錄 curL 追蹤當前候選區間起點
  • 嚴格 > 更新最大值,保證同值時保留最早區間(符合題目「起始索引最小」)

測資陷阱

題目測資似乎只接受「前向最大區間」,對於 -1 0 5 0 0 期望輸出 5 1 2 而非 5 1 4,實作上以 curSum < 0 重置即符合。

AC 記錄

Time: 450 ms, Memory: 1304 KB (C, 九度 OJ 1372)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved