当前位置: 首页 > news >正文

LeetCode热题100--53.最大子数组和--中等

1. 题目

给你一个整数数组 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

2. 题解

class Solution {public int maxSubArray(int[] nums) {int ans = nums[0];int sum = 0;for(int num : nums){if(sum > 0){sum += num;}else{sum = num;}ans = Math.max(ans,sum);}return ans;}
}

3. 解析

出自这位老师:画手大鹏:画解算法:53. 最大子序和

  1. int ans = nums[0];
    ans变量初始化为数组的第一个元素,这表示在遍历开始时,默认的最大子数组和就是第一个元素。这是因为如果所有数都是负数的情况,最大值只能是其中最大的那个。
  2. int sum = 0;
    sum变量用于跟踪当前正在考虑的连续子数组的和,初始化为0。这个初始值表示在遍历开始时还没有累加任何元素。
  3. for(int num : nums)循环体
    这是一个遍历整个nums数组的循环,使用的是数组遍历的常见方式。
    int num : nums:将循环变量num赋值为当前遍历的nums数组中的元素。
  4. if(sum > 0){ sum += num; } else { sum = num; }
    这里的条件判断用于决定如何更新sum:
    如果当前累积和sum大于0:这意味着继续向当前子数组中添加num不会使总和变为负数,反而可能会增加。因此,将num加到sum上。
    否则(即sum <=0):意味着继续向当前子数组添加num会导致总和不增大或者变成负数。为了寻找可能更大的子数组和,应该重新开始一个新的子数组,其值就是当前的num。
  5. ans = Math.max(ans, sum);
    在每一步循环中,更新ans为当前最大值与当前sum的最大值。
    Math.max(ans, sum) 比较当前最大的ans和当前的sum,取较大的那个作为新的ans。
  6. }结束循环
    结束for循环,继续处理下一个元素。
  7. return ans;
    返回最终的ans值,即整个数组的最大子数组和。

http://www.mrgr.cn/news/100653.html

相关文章:

  • 2025.4.29总结
  • Nacos源码—2.Nacos服务注册发现分析四
  • Ansible 铸就 Linux 安全之盾(Ansible Builds Linux Security Shield)
  • Python初学 有差异的知识点总结(一)
  • ARPG游戏和MMORPG经济形态区别以及对经济循环的思考
  • GoogleTest:在Ubuntu22.04安装
  • 热度大幅度下降,25西电经济与管理学院(考研录取情况)
  • Python数据结构与算法(5)——动态规划
  • 聊透多线程编程-线程互斥与同步-13. C# Mutex类实现线程互斥
  • 目标检测篇---faster R-CNN
  • HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(一、项目介绍及实现效果)
  • CogCoM: A Visual Language Model with Chain-of-Manipulations Reasoning 学习笔记
  • 【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起
  • 51c大模型~合集122
  • 2025年五一数学建模竞赛AI辅助全网专业性第一
  • 在线图书管理系统的结构化需求分析过程讲解
  • Spark知识总结
  • 隐形革命:环境智能如何重构“人-机-境“共生新秩序
  • lmms-eval--微调实战笔记
  • 52.[前端开发-JS实战框架应用]Day03-AJAX-插件开发-备课项目实战-Lodash