题目链接

https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tqId=11183&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意

例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和(子向量的长度至少是1).

解题思路

思路一 O(n):

从前向后遍历,若和为负值,则更新起点;若和为正值,当出现比当前 记录和最大值变量中的最大值 大时,则更新变量。

思路二,动态规划的思路(与思路一思想一致,实现方式不同) O(n):

max[I]记录从头扫到i位置元素为止和最大值。

状态转移方程:max[i]=max[i-1]+val[i],当max[i-1]>0;max[i]=val[I],当max[i-1]<0。

思路一代码(Java)

class Solution {
public int maxSubArray(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
} int sum = 0;
int max = Integer.MIN_VALUE;
for (int num : nums) {
sum += num;
if (sum > max) {
max = sum;
}
if (sum < 0) {
sum = 0;
}
}
return max;
}
}

思路二代码(C++)

class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
vector<int> sum;
for(int i=0;i<array.size();++i){
if(i==0){
sum.push_back(array[i]);
}
else{
if(sum[i-1]<=0){
sum.push_back(array[i]);
}
else{
sum.push_back(sum[i-1]+array[i]);
}
}
}
int maxSum;
for(auto it=sum.begin();it!=sum.end();++it){
if(it==sum.begin()){
maxSum=*it;
}
else{
if(*it>maxSum){
maxSum=*it;
}
}
}
return maxSum;
}
};

最新文章

  1. Dos命令查看端口占用及关闭进程
  2. C# 获得MP4时长
  3. VI小技巧
  4. Android 自定义控件-TextView
  5. HDU-5504(逻辑if-else大水题)
  6. ios的自动转屏
  7. IOS开发之XCode学习012:Slider和ProgressView
  8. 从线性模型(linear model)衍生出的机器学习分类器(classifier)
  9. 杭电ACM2005--第几天?
  10. insert into select的实际用法
  11. C# File API
  12. git安装包解压后没有configure
  13. 九、Brideg 桥接模式
  14. Spring.net(二)----初探IOC容器
  15. vim多行注释和取消注释 Ubuntu
  16. java基础6 面向对象的详解
  17. Laravel5.1 搭建博客 --文章的增删改查
  18. Python小知识点(2)
  19. swiper 、css3制作移动端网站,折叠导航
  20. 队列 和 堆栈用python 来实现

热门文章

  1. 通过指定的 url 去网络或者文件服务器下载文件到本地某个文件夹
  2. mongodb学习-练习实例
  3. js乱码问题解决
  4. oracle第二天笔记
  5. mycat的schema.xml的个人的一点理解
  6. ios嵌套H5页面,出现的小bug;
  7. 第六次Scrum冲刺
  8. python类中方法加单下划线、双下划线、前后双下滑线的区别
  9. (转)2018几大主流的UI/JS框架——前端框架 [Vue.js(目前市场上的主流)]
  10. spring boot 事务支持