力扣: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]。最后来更新连续最大和

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;
    }
}

相关推荐

  1. 53.

    2024-02-14 08:30:02       46 阅读
  2. 53. LeetCode)

    2024-02-14 08:30:02       49 阅读
  3. 53.

    2024-02-14 08:30:02       35 阅读
  4. 53.

    2024-02-14 08:30:02       41 阅读
  5. [题解]53.

    2024-02-14 08:30:02       32 阅读
  6. 日记3.16-【贪心算法篇】53.

    2024-02-14 08:30:02       42 阅读
  7. 每日OJ题_数组串dp①_53.

    2024-02-14 08:30:02       41 阅读
  8. 100】

    2024-02-14 08:30:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-14 08:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-14 08:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-14 08:30:02       82 阅读
  4. Python语言-面向对象

    2024-02-14 08:30:02       91 阅读

热门阅读

  1. 小马识途营销顾问分析营销故事五则

    2024-02-14 08:30:02       54 阅读
  2. 课程大纲:图像处理中的矩阵计算

    2024-02-14 08:30:02       52 阅读
  3. 数据库的使用方法

    2024-02-14 08:30:02       53 阅读
  4. 类和对象——封装

    2024-02-14 08:30:02       50 阅读
  5. 制作韦恩图常用软件或网站

    2024-02-14 08:30:02       98 阅读
  6. 二级 C 语言笔试-12

    2024-02-14 08:30:02       35 阅读
  7. MacBook Pro如何安装rust编程环境

    2024-02-14 08:30:02       65 阅读