首页 > 其他分享 >LeetCode_Array_53. Maximum Subarray (C)

LeetCode_Array_53. Maximum Subarray (C)

时间:2022-10-27 16:05:12浏览次数:63  
标签:curP nums int sum 元素 ans Subarray Array LeetCode


目录

​1,题目描述​

​2,思路​

​基本思路​

​细节​

​参考文章​

​3,代码【C】​


1,题目描述

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

2,思路

解决本题的关键在于理解正增益 的概念。

个人理解:针对本题,设结果为ans,当前累加和为sum = 10,考虑以下两种场景:

  • 后两个元素依次为-8,9:sum=sum-8=2大于0,后面的元素可能弥补此次减损,果然sum=sum+9=11,比原先sum=10大,;
  • 后两个元素依次为-11,12:sum=sum-11=-1小于0,不论后面的元素为何值,都只会带来减损效果,故需要舍弃当前的sum,并将其值进行更新;

基本思路

  • 设ans存当前连续最大和,sum判断是否正增益;
  • 遍历数组一次,当sum<=0时,舍去当前sum,并将其值更新为当前位置指针所指元素的值;当sum>0时,则加上当前位置元素的值;
  • 比较ans与sum,取最大值更新ans;

细节

  • sum初始为0,则刚开始判断时,便有sum=0,sum便被数组中第一个元素值代替;
  • ans初始为数组第一个元素;
  • 当指针移到一个元素时,sum其实指的是当前元素之前(不包括当前元素)的计算结果,因此,如果sum<0,则可用当前元素值替换sum;
  • 使用ans = sum > ans ? sum : ans;来取最大值,速度快,占空间少;

参考文章

【​​@灵魂画师牧码​​】

3,代码【C】

int maxSubArray(int* nums, int numsSize){
int sum = 0; //判断整体是否为正增益
int ans = nums[0];
for(int curP = 0 ; curP < numsSize ; curP++){
if(sum <= 0) sum = nums[curP];
else sum += nums[curP];
ans = sum > ans ? sum : ans; //取最大值
}
return ans;
}

 

标签:curP,nums,int,sum,元素,ans,Subarray,Array,LeetCode
From: https://blog.51cto.com/u_15849465/5801378

相关文章

  • LeetCode_Array_48. Rotate Image(C)
    目录​​1,题目描述​​​​2,解题思路​​​​基本思路​​​​细节​​​​图片​​​​3,代码【C】​​1,题目描述Youaregivenannxn2Dmatrixrepresentinganimage.......
  • leetcode 234. 回文链表 js 实现
    给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。 示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出......
  • leetcode-1758-easy
    MinimumChangesToMakeAlternatignBinaryStringYouaregivenastringsconsistingonlyofthecharacters'0'and'1'.Inoneoperation,youcanchangeany......
  • leetcode-704-easy
    BinarySearchGivenanarrayofintegersnumswhichissortedinascendingorder,andanintegertarget,writeafunctiontosearchtargetinnums.Iftargete......
  • leetcode 206. 反转链表 js实现
    给你单链表的头节点head,请你反转链表,并返回反转后的链表。 示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出......
  • 【leetcode插件】使用
    快捷键如图中的文档注释中的类,没有快捷键可以一次性取消,如果一行一行删又太费事,我们可以用这个方法。光标放在这里,按下Alt+鼠标左键,就可以对多行进行删除,简单方便。......
  • 代码随想录 KMP算法,实现 strStr()(LeetCode 028)和重复的子字符串(LeetCode 459)
    KMP算法前缀表:记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串。后缀是指不包含第一个字符的所......
  • PHP json_decode如何输出数组(php json_decode how to output array)
    Hereismyphpcodewithjsonformattedstring:$string=';?>Iwanttolearnhowtoparse/outputjsonstringintosomethingIcanshowinhtmlorput......
  • PHP :array_diff 用法(php计算数组的差集)
    说多了都是废话,直接上图:结果输出:由上图的结果可以看出:array_diff($a,$b)的结果只输出了5与8,则可以看出,输出的是$a的差集。array_diff($b,$a)......
  • PHP 中的 array
    PHP中的array实际上是一个有序映射。映射是一种把values关联到keys的类型。此类型针对多种不同用途进行了优化;它可以被视为数组、列表(向量)、哈希表(映射的实现)、字......