LintCode 402: Continuous Subarray Sum
2017-02-23 19:58
381 查看
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 = -1 vector<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; }
相关文章推荐
- [LintCode] Continuous Subarray Sum 连续子数组之和
- [LintCode] Continuous Subarray Sum II
- [Lintcode] Continuous Subarray Sum
- lintcode-Continuous Subarray Sum
- lintcode 中等题:continuous subarray sum 连续子数组之和
- [LintCode] Continuous Subarray Sum
- [LintCode] Continuous Subarray Sum II
- Lintcode402 Continuous Subarray Sum solution 题解
- LintCode 139. Subarray Sum Closest
- leetcode523 Continuous Subarray Sum
- [Lintcode]Minimum Size Subarray Sum 和大于S的最小子数组
- lintcode-medium-Continuous Subarray Sum
- 523. Continuous Subarray Sum
- 算法15 Continuous Subarray Sum
- Continuous Subarray Sum
- [LintCode] Minimum Size Subarray Sum 最小子数组和的大小
- [LeetCode] Continuous Subarray Sum 连续的子数组之和
- LintCode-Subarray Sum Closest
- 523. Continuous Subarray Sum
- 523. Continuous Subarray Sum