lintcode刷题--连续子数组求和
来源:互联网 发布:淘宝商标权投诉扣几分 编辑:程序博客网 时间:2024/06/07 01:16
原题如下所示:
连续子数组求和
给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大。输出答案时,请分别返回第一个数字和最后一个数字的下标。(如果两个相同的答案,请返回其中任意一个)
给定 [-3, 1, 3, -3, 4]
, 返回[1,4]
.
1、一看到题目就觉得是动态规划的问题,可以定义一个和输入数组相等大小的数组sum,用来存放到当前位置为止的最大子数组和,然后求出该数组中最大值所在的位置就是输出的右侧的位置;
2、求左侧位置的时候,可以发现,最大的子数组的和一定是sum中,从第一个大于0的数开始的,所以从右侧往前查找到第一个小于0的数,其+1就是左侧的值。
具体的C++代码如下:
class Solution {
public:
/**
* @param A an integer array
* @return A list of integers includes the index of
* the first number and the index of the last number
*/
vector<int> continuousSubarraySum(vector<int>& A) {
// Write your code here
vector<int> res;
if(A.size()==0)
{
return res;
}
else
{
int len=A.size();
vector<int> sum(len,0);
sum[0]=A[0];
int left,right;
int i;
for(i=1;i<len;i++)
{
sum[i]=max(A[i],A[i]+sum[i-1]);
}
int max=sum[0];
for(i=1;i<len;i++)
{
if(sum[i]>max)
{
max=sum[i];
right=i;
}
}
if(sum[right]==A[right])
{
res.push_back(right);
res.push_back(right);
}
else
{
for (i = right; i>=0; i--)
{
if (sum[i] <0)
{
left = i+1;
break;
}
}
res.push_back(left);
res.push_back(right);
}
return res;
}
}
};
- lintcode刷题--连续子数组求和
- LintCode : 连续子数组求和
- LintCode: 连续子数组求和
- lintcode,连续子数组求和
- 连续子数组求和-LintCode
- LintCode解题笔记 - 连续子数组求和
- lintcode(402)连续子数组求和
- 连续子数组求和
- 连续子数组求和
- 连续子数组求和
- 连续子数组求和
- 连续子数组求和
- LintCode-连续子数组和
- 算法学习-连续子数组求和最大值
- 算法学习-连续子数组求和最大值
- 算法学习-连续子数组求和最大值
- 算法学习-连续子数组求和最大值
- lintCode刷题--最长上升连续子序列
- 网页上绘制prototxt定义的深度网络结构图
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
- 结合阿里实战案例为你讲解分布式计算入门
- onTouch里的getX()和getRawX()的区别
- 文章标题
- lintcode刷题--连续子数组求和
- Hyperion 11.1.1.2 迁移步骤(转)
- OSI七层模型与TCP/IP四层模型
- hls中ts流格式简介
- loadrunne如何只测某个方法,或只压测录制的脚本部分代码的运行用时
- 教育中部分产品设计原稿(转发需标明)
- SSM框架下使用PageHelper分页
- 网站文章为何需要关键词做锚文本
- 深入理解equal方法和hascode方法