栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode-53:最大子数组和

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-53:最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:

输入:nums = [1]
输出:1
示例 3:

输入:nums = [5,4,-1,7,8]
输出:23
 

提示:

1 <= nums.length <= 105
-104 <= nums[i] <= 104

第一思路:

面对这道题时,我的第一思路是暴力,代码如下:

int maxSubArray(int* nums, int numsSize)
{
    int i,j,k,p,sum=0,max=num[0];
	for(i=1;i<=numsSize;i++)   //控制加的个数变化 
	{
		for(j=0;j<=(numsSize-i);j++)  //控制从何处开始加 
		{
			for(k=j,p=0;pmax)        //比较并替换 
			max=sum;
			sum=0;
		}
	 } 
	 return max;
}

此时我最大的问题是:没有考虑运行时间,示例所给的测试用例可以通过,但提交后,问题出现了,当数组足够大时,运行必然超时,时间复杂度超过了限制;

于是,我开始重新思考,有了以下题解:

int maxSubArray(int* nums, int numsSize)
{
    int i,max=nums[0],sum=nums[0];    //创建max变量用于存储最大子序和,sum用来存储当前子序和
    for(i=1;inums[i])       //若当前子序和加当前数大于当前数,则加之
        sum=sum+nums[i];
        else
        sum=nums[i];                  //反之,则弃置,以当前数为子序和
        if(sum>max)                   //比较,替换
        max=sum;
    }
	 return max;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号