力扣:53. 最大子数组和

这篇具有很好参考价值的文章主要介绍了力扣:53. 最大子数组和。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解题思路:

1.先把数组为空和数组的长度为1时的特殊情况分别开来。声明一个sum变量用于计算数组中的连续子数组的总和值 。在声明一个guo变量用于一种接收sum中的前i-1的总和。另一种接收sum中前i的总和,主要根据sum的值来判断是接收的哪一种。在声明一个guo变量用于接收最大和的连续子数组的值。

2.在遍历过程中要把sum分情况来进行赋值和更新。如果当前i-1的sum值小于o,为负数时就抛弃前i-1的sum值,把nums【i】的值复制给sum。如果当前i-1的sum值大于0,我们就要更新sum值来判断是前i-1的sum值大还是前i的sum值大。之后再来更新连续最大和。我写这题时我敢觉的思路有点抽向和奇特,一股脑的写下去,所以我不知道这个解法属于哪一类算法。

class Solution {
    public int maxSubArray(int[] nums) {
        //数组为空时
        if(nums.length<1){
            return 0;
        }
        //数组的长度为1时
        if(nums.length==1){
            return nums[0];
        }
        //计算数组中的连续子数组的总和值
        int sum=nums[0];
 //一种接收sum中的前i-1的总和。另一种接收sum中前i的总和。主要根据sum的值来判断是接收的哪一种。
        int guo=0;
        //接收最大和的连续子数组的值
        int max=nums[0];
      for(int i=1;i<nums.length;i++){
          //把前i-1的sum值赋值给guo
          guo=sum;
          //判断前i-1的sum值小于o,为负数时就抛弃前i-1的sum值
          if(sum<0){
              //把nums【i】的值复制给sum
              sum=nums[i];
          //来更新连续最大和
          max=Math.max(max,sum);
              continue;
          }
 //如果前i-1的sum值大于0,我们就要更新sum值来判断是前i-1的sum值大还是前i的sum值大
         sum+=nums[i];
         //判断是前i-1的sum值大还是前i的sum值大。括号中的guo为前i-1的zum值
          guo=Math.max(guo,sum);
           //来更新连续最大和
          max=Math.max(max,guo);
      }
      return max;
    }
}

动态规划解法;

1.先把数组为空和数组的长度为1时的特殊情况分别开来,之后声明一个dp数组表示下标为i时的连续最大和,初始化dp数组的值为nums[0],递推公式为dp[i]=Math.max(dp[i-1]+nums[i],nums[i]),

判断是前i的dp数组值大还是当前nums[i]的值大,赋值给dp数组dp[i]。最后来更新连续最大和文章来源地址https://www.toymoban.com/news/detail-828360.html

class Solution {
    public int maxSubArray(int[] nums) {
        //数组为空时
        if(nums.length<1){
            return 0;
        }
        //数组的长度为1时
        if(nums.length==1){
            return nums[0];
        }
        //声明dp数组,dp数组表示下标为i时的连续最大和
        int dp[]=new int [nums.length];
        //初始化dp数组
        dp[0]=nums[0];
        //接受最大和值
        int max=nums[0];
        //for循环遍历来进行推导后面的dp数组的值
        for(int i=1;i<nums.length;i++){
            //递推公式
            dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);
            //判断最大值和对比最大值
            max=Math.max(dp[i],max);
      }
      return max;
    }
}

到了这里,关于力扣:53. 最大子数组和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法|动态规划No.12】leetcode152. 乘积最大子数组

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月08日
    浏览(36)
  • 53.最大子数组和(前缀和、动态规划,C解法)

    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 示例 2: 示例 3: 分析:         前缀和数组可以在单位时间内得到 [ l , r ] 区间和,但本题所求子数组中 l 、 r 以

    2024年01月22日
    浏览(40)
  • 题解53 | #动态规划#连续子数组的最大和(一)(二)#

    题解 | #链表中倒数第k个结点# /** * struct ListNode { * int val; * struct ListNode *next; * }; *//** * * @par   第一次面试 c++后端开发 会问什么呀,第一次面试没一点经验   题解 | #求二叉树的层序遍历# # class TreeNode:# def __init__(self, x):# self.val = x# sel   题解 | #牛客网连续练习题目3天及以上的

    2024年02月04日
    浏览(36)
  • 算法leetcode|53. 最大子数组和(rust重拳出击)

    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 1 = nums.length = 10 5 -10 4 = nums[i] = 10 4 面对这道算法题目,二当家的再次陷入了沉思。 刚开始以为要暴力破解,双循环什么的,但

    2024年02月08日
    浏览(34)
  • 【力扣】53. 最大子数组和

    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。 示例 1: 输入 :nums = [-2,1,-3,4,-1,2,1,-5,4] 输出 :6 解释 :连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2: 输入 :nums = [1] 输出

    2024年02月16日
    浏览(33)
  • 力扣:53. 最大子数组和

    1.先把数组为空和数组的长度为1时的特殊情况分别开来。声明一个sum变量用于计算数组中的连续子数组的总和值 。在声明一个guo变量用于一种接收sum中的前i-1的总和。另一种接收sum中前i的总和,主要根据sum的值来判断是接收的哪一种。在声明一个guo变量用于接收最大和的连

    2024年02月20日
    浏览(23)
  • leetcode410. 分割数组的最大值 动态规划

    hard:https://leetcode.cn/problems/split-array-largest-sum/ 给定一个非负整数数组 nums 和一个整数 m , 你需要将这个数组分成 m 个非空的连续子数组 。 设计一个算法使得这 m 个子数组各自和 的 最大值最小 。 令 dp[i][j]表示将数组的 前 i 个数分割为 j 组 所能得到的最大连续子数组和的最

    2024年02月13日
    浏览(25)
  • LeetCode_动态规划_中等_918.环形子数组的最大和

    给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空子数组的最大可能和。 环形数组意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n] , nums[i] 的前一个元素是 nums[(i - 1 + n) % n] 。 子数组最多只能包含固定缓冲区 nums 中的每个元素

    2024年02月09日
    浏览(34)
  • 【LeetCode: 410. 分割数组的最大值 | 暴力递归=>记忆化搜索=>动态规划 】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月10日
    浏览(31)
  • (动态规划) 剑指 Offer 42. 连续子数组的最大和 ——【Leetcode每日一题】

    难度:简单 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为 O(n) 。 示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 提示 : 1 = a r r . l e n g t h = 1 0 5 1 = arr.length = 10^

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包