欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 【CT】LeetCode手撕—53. 最大子数组和

【CT】LeetCode手撕—53. 最大子数组和

2024/10/25 12:25:49 来源:https://blog.csdn.net/weixin_44382896/article/details/139620856  浏览:    关键词:【CT】LeetCode手撕—53. 最大子数组和

目录

  • 题目
  • 1-思路
  • 2- 实现
    • ⭐53. 最大子数组和——题解思路
  • 3- ACM 实现


题目

  • 原题连接:53. 最大子数组和

1-思路

动规五部曲

  • 1. 定义 dp 数组
    • dp[i] 含义为:下标为 i 的数组的最大子数组和
  • 2. 递推公式
    • 因为所求的是最大子数组的和,即当前 nums 可加可不加,则需要在 dp[i-1]+nums[i]nums[i] 两者中取一个较大的
    • dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);
  • 3. 初始化
    • dp[0] = nums[0]
  • 4. 遍历顺序
    • i = 0 遍历到 n-1

2- 实现

⭐53. 最大子数组和——题解思路

在这里插入图片描述

class Solution {public int maxSubArray(int[] nums) {// 1. 定义 dp数组// int[] dp = new int[nums.length];// 2.递推公式// dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);// 3.初始化dp[0] = nums[0];// 4. 遍历顺序for(int i = 1 ; i < nums.length;i++){dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);}int res = nums[0];for(int i:dp){res = Math.max(res,i);}return res;}
}

3- ACM 实现

public class maxSubNums {// 求 最大子数组和public static int maxSub(int[] nums){// 1.dp数组int[] dp = new int[nums.length];// 2.递推公式// dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);// 3.初始化dp[0] = nums[0];// 4.遍历顺序int res = nums[0];for(int i = 1 ; i < nums.length;i++){dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);res = Math.max(res,dp[i]);}return res;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入数组的长度");int n = sc.nextInt();int[] nums = new int[n];for(int i = 0 ; i < n;i++){nums[i] = sc.nextInt();}System.out.println("最大子数组和为"+maxSub(nums));}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com