Maximum Subarray
来源:互联网 发布:tensorflow安装windows 编辑:程序博客网 时间:2024/06/01 14:18
题目:
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
.
大意:给定一个序列找到当中连续子序列和的最大值
解题思路:这道题目如果直接使用暴力算法是log(n^2)的复杂度,这里利用一个事实即如果当前节点与其之前的和小于当前节点则重置runningsum的值为当前节点的值,数学表达 runningsum = max(runningsum+A[i], A[i]),这样可以动态的改变子序列的起点,使得在O(n)的复杂度下就可以解决。代码如下:
class Solution {public:int max(const int &a, const int &b){return a > b ? a : b;}// Basic idea is that runningsum = max(A[i]+runningsum, runningsum)int maxSubArray(int A[], int n) {if(n == 1)return A[0];int sum_max = A[0];int runningsum = A[0];for(int i = 1; i < n; ++i){runningsum = max(A[i] + runningsum, A[i]);sum_max = max(runningsum, sum_max);}return sum_max;}};
0 0
- maximum subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- Maximum Subarray
- 关于面试的一个问题的解决
- matlab总结
- android 调用c++程序 并使用locat工具输出
- dota传奇lua字节码逆向码表
- Architecture outline
- Maximum Subarray
- hdu 2896——病毒侵袭
- SMT成长日记
- 机房收费系统文档总结(反思篇)
- 栈的操作和c语言实现算术表达式求值
- python 优化指南
- java面试题一
- Maven之——仓库(上)
- iOS 8 获得屏幕高度的适配