leetcode系列(61)Maximum Subarray
来源:互联网 发布:网络配置 编辑:程序博客网 时间:2024/06/17 15:39
Find thecontiguous subarray within an array (containing at least one number) which hasthe largest sum.
Forexample, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.
Morepractice:
If youhave figured out the O(n) solution, try coding another solution usingthe divide and conquer approach, which is more subtle.
解答:这个题目之前我见过,naive的方法(当然不是brute force)是遍历数组,对每个idx就以它为起点一直往前累加直到sum <= 0,这个过程中也会更新max_sum。还有一种好的方法是动态规划,对于每个idx,nums[idx]为结尾的subArray,nums[idx]要么接之前的subArray,要么自己另起一个,有且仅有这两种情况;那么以nums[idx]为结尾的subArray的最大sum即f[idx]就是max(f(idx - 1) + nums[idx], nums[idx]);任何一个idx都可能是Maximum Subarray的结尾,那么max(f[idx])就是Maximum Subarray的sum了;因为我只需要最大值,所以不需要一个数组存储中间结果(还有什么分治法)。
方法1
int maxSubArray(vector<int>& nums) { int ret = -INT_MIN; for (size_t i = 0; i < nums.size(); ++i) { int cur = nums[i]; if (cur > ret) { ret = cur; } for (size_t j = i + 1; j < nums.size(); ++j) { cur += nums[j]; if (cur <= 0) { break; } else if (cur > ret) { ret = cur; } } } return ret; }
方法2
int maxSubArray(vector<int>& nums) { int ret = -INT_MIN; int cur_max = 0; for (size_t i = 0; i < nums.size(); ++i) { cur_max = std::max(cur_max + nums[i], nums[i]); ret = std::max(cur_max, ret); } return ret; }
- leetcode系列(61)Maximum Subarray
- 【Leetcode长征系列】Maximum Subarray
- LeetCode(53) Maximum Subarray
- 【LeetCode】Maximum Subarray 和 Maximum Product Subarray
- LeetCode 题解(57): Maximum Product Subarray
- LeetCode(152) Maximum Product Subarray
- LeetCode进阶之路(Maximum Subarray)
- LeetCode 53. Maximum Subarray(dynamic programming)
- LeetCode 53(Maximum Subarray)Java
- leetcode 53. Maximum Subarray(分治,递归)
- LeetCode 53. Maximum Subarray(Easy)
- LeetCode: Maximum Subarray
- LeetCode Maximum Subarray
- [Leetcode] Maximum Subarray
- LeetCode: Maximum Subarray
- leetcode 25: Maximum Subarray
- [LeetCode] Maximum Subarray
- [Leetcode] Maximum Subarray
- js中arguments的用法
- Android保存View到本地图片
- 如何将操做日志中的字符串类型的时间转化成logstash中的@timestamp
- 广搜算法
- 【Android个人向】2015/11/3总结
- leetcode系列(61)Maximum Subarray
- 81Search in Rotated Sorted Array II
- Java substring()用法
- C++primer学习:模板编程(4)
- ionic service.js
- LINK : error LNK2001: 无法解析的外部符号 _mainCRTStartup
- iOS开发网络数据之AFNetworking使用
- < !--随机数的产生 -->
- 条款49 了解new-handler的行为