當前位置:
首頁 >
LintCode 402: Continuous Subarray Sum
發布時間:2024/6/21
31
豆豆
生活随笔
收集整理的這篇文章主要介紹了
LintCode 402: Continuous Subarray Sum
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
LintCode 402: Continuous Subarray Sum
題目描述
給定一個整數數組,請找出一個連續子數組,使得該子數組的和最大。輸出答案時,請分別返回第一個數字和最后一個數字的下標。(如果兩個相同的答案,請返回其中任意一個)
樣例
給定[-3, 1, 3, -3, 4], 返回[1,4].
Thu Feb 23 2017
思路
本題有很多解法,最巧妙的解法就是一遍掃描記憶的方法了,時間復雜度為\(O(n)\)。
用一個變量記錄連續累加的和,當和為負數時,變量清零,從下一個數字開始累加記錄。
在這里只需要注意一下一些小細節,比如如何記錄最大子數組的起始位置,以及處理一下數組中所有的數都是負數的情況。
代碼
// 連續子數組求和 vector<int> continuousSubarraySum(vector<int>& A) { int max_sum = -1, sum = 0, start;int is_all_negative = 1, max_num = -9e5, max_num_ind = -1vector<int> ans(2);for (int i = 0; i < A.size(); ++i){if (sum <= 0) start = i;sum += A[i];if (sum < 0) sum = 0;else if (sum > max_sum){is_all_negative = 0;max_sum = sum;ans[0] = start;ans[1] = i;}if (max_num < A[i]){max_num = A[i];max_num_ind = i;}}if (is_all_negative){ans[0] = ans[1] = max_num_ind;}return ans; }轉載于:https://www.cnblogs.com/genkun/p/6435196.html
總結
以上是生活随笔為你收集整理的LintCode 402: Continuous Subarray Sum的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调用支付宝PHP接口API实现在线即时支
- 下一篇: 软件架构师的工作流程