Algorithms(二)Maximum Subarray
来源:互联网 发布:腾讯tim ubuntu 编辑:程序博客网 时间:2024/06/06 00:54
题目:
Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray [4,-1,2,1]
has the largest sum = 6
.
代码:
class Solution {public: int maxSubArray(vector<int>& nums) { int ans = nums[0], sum = 0, i; for(i = 0; i < nums.size(); i++) { sum += nums[i]; ans = max(sum, ans); sum = max(sum, 0); } return ans; }};
思路:
题目要求找到连续子序列,该subarray的累加值sum最大。
普通算法是对每个nums[i] 计算 sum[i][j] = nums[i] + …… + nums[j], 0 <= i < nums.size(),i < j <= nums.size(),这个算法的复杂度是O(n^2)
用分治算法,即从第一个元素开始累加,得到累加值sum,当sum < 0时,从下一元素开始重新从0累加。同时,用ans存当前最大的累加值,即做完一次加后,当ans < sum,说明此时累加值大于之前的最大累加值;而当ans > sum时,则说明之前的最大累加值仍为当前最大累加值,因此ans = max(sum, ans)即可保证ans所存储的值始终为subarray的最大累加值
此算法得到T(n) = T(n - 1) + O(1),复杂度是O(n),对比普通算法有了明显的优化。
阅读全文
0 0
- Algorithms(二)Maximum Subarray
- Algorithms—53.Maximum Subarray
- Leetcode Algorithms : 53. Maximum Subarray
- [LeetCode] Algorithms-53. Maximum Subarray
- Algorithms—152.Maximum Product Subarray
- Starting with Algorithms(Part3)--The maximum-subarray problem
- 算法设计Week7 LeetCode Algorithms Problem #53 Maximum Subarray
- [LeetCode-Algorithms-53] "Maximum Subarray" (2017.10.19-WEEK7)
- LeetCode(53) Maximum Subarray
- leetcode_c++:Maximum Subarray(053)
- 53. Maximum Subarray(dp)
- Maximum Subarray(分治法)
- 53. Maximum Subarray (dp)
- LeetCode53. Maximum Subarray(easy)
- maximum subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- MYSQL (三)
- Java比较器描述
- C++头文件和源文件的关系以及makefile文件
- 前缀式的计算
- MySQL——根据某时间点查询其前后数据记录并正序输出到TXT文件
- Algorithms(二)Maximum Subarray
- std:map与迭代器简析
- Netty心跳检测篇之IdleStateHandler
- tensorflow使用中遇到的问题
- Spring_5 声明式事物
- Meclipse设置默认编码为UTF-8
- 页面布局:三栏布局,假设高度已知,左右宽度固定为300px,中间自适应。
- 解决方案集X1
- TF-IDF 加权及其应用