博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(LeetCode)连续子数组的最大和 求所有子数组的和的最大值
阅读量:3924 次
发布时间:2019-05-23

本文共 754 字,大约阅读时间需要 2 分钟。

面试题42. 连续子数组的最大和

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

class Solution {
public: int maxSubArray(vector
& nums) {
vector
S; S.reserve(nums.size()); int pos = 0; int sum = 0; int Max = nums[0]; int flag = 0; for (int i = 0; i < nums.size(); i++) {
Max = max(Max, nums[i]); if (nums[i] > 0) {
break; } } if (Max <= 0) return Max; Max = 0; for (int i = 0; i < nums.size(); i++) {
if (sum < 0) {
pos = i; sum = 0; } Max = (Max > sum) ? Max : sum; sum = sum + nums[i]; } Max = (Max > sum) ? Max : sum; return Max; }};

分情况考虑:

如果全是负数:输出最大的负数
如果有一个或一个以上的正数
sum表示从下标pos往后的最大和。如果sum<0,更新时直接从当前元素开始,sum=当前元素值,pos更新;如果sum>0,更新时累加当前元素。
Max会在迭代中更新。

转载地址:http://neugn.baihongyu.com/

你可能感兴趣的文章
java关键字(6)void
查看>>
面试必问:java中String对象为什么要设计成不可变的呢?
查看>>
深入分析java中的反射机制
查看>>
java集合类(7)Stack
查看>>
7、深入分析java中的泛型机制
查看>>
java序列化机制之protobuf框架(快速高效跨语言)
查看>>
6-1 Book类的设计 (10分)
查看>>
7-3 学生类-构造函数 (15分)
查看>>
7-4 类的定义与对象使用 (15分)
查看>>
7-5 jmu-Java-03面向对象基础-02-构造函数与初始化块 (20分)
查看>>
6-1 数组工具类的设计 (16分)
查看>>
7-1 程序填空题2 (12分)
查看>>
7-2 程序改错题3 (12分)
查看>>
7-3 计算年龄 (20分)
查看>>
7-3 利用集合类排序 (12分)
查看>>
Swing开发之JComboBox篇
查看>>
JVM内存的设置(解决eclipse下out of memory问题)
查看>>
sscanf 总结
查看>>
android图片特效处理之图片叠加
查看>>
windows 使用GetLocalTime 和GetSystemTime 所获得的时间不同
查看>>