IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 扣初级算法-32-动态规划-最大子序和 -> 正文阅读

[数据结构与算法]扣初级算法-32-动态规划-最大子序和

学习目标:

本次学习目标为 力扣初级算法-动态规划,其中主要的LC如下:

  • 最大子序和

学习内容:

  1. 最大子序和 -----([链接](https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn3cg3/)
    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
    子数组 是数组中的一个连续部分。

示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:
输入:nums = [1]
输出:1

解题思路:

  • 解法一: 通用
  • 解题思路:
    • 动态规划四要个步骤
    • 1.确定状态
    • 2.找到转移公式
    • 3.确定初始条件以及边界问题
    • 4.计算结果
    • 解法一:通用
    • 动态规划
      • 四个步骤
      • 1.确定状态
      • 2.找到转移公式
      • 3.确定初始化条件以及边界条件
      • 4.计算结果
      • 具体如下:
        • 1.定义 dp[i] 表示数组中前i+1个元素构成的连续子数组的最大和。
        • 2.如果计算前 i+1 个元素构成的子数组的最大和,也就是计算 都dp[i]。
        • 此处需要判断 dp[i-1] 是大于 0 还是 小于 0 ,此处可能会疑惑为什么是跟 0 做比较。— 因为当前数,只要相加的数是小于 0 的,那么其对应的值肯定是降低的。
        • 如果dp[i-1]大于0,就继续累加,dp[i]=dp[i-1]+num[i]
        • 如果dp[i-1]小于0,我们直接把前面的舍弃,也就是说重新开始计算,否则会越加越小的,直接让dp[i]=num[i]
        • 故可得出 转移公式是 dp[i]=num[i]+max(dp[i-1],0);
        • 3.边界条件问题:当i等于0的时候,也就是前1个元素,他能构成的最大和也就是他自己,所以
        • dp[0]=num[0];
    • 代码实现:
public class MaxSubArray {

	/**
	 * 动态规划
	 * 四个步骤
	 * 1.确定状态
	 * 2.找到转移公式
	 * 3.确定初始化条件以及边界条件
	 * 4.计算结果
	 *
	 * 1.定义 dp[i] 表示数组中前i+1个元素构成的连续子数组的最大和。
	 * 2.如果计算前 i+1 个元素构成的子数组的最大和,也就是计算 都dp[i]。
	 * 此处需要判断 dp[i-1] 是大于 0  还是 小于 0 ,此处可能会疑惑为什么是跟 0 做比较。--- 因为当前数,只要相加的数是小于 0 的,那么其对应的值肯定是降低的。
	 * 如果dp[i-1]大于0,就继续累加,dp[i]=dp[i-1]+num[i]
	 * 如果dp[i-1]小于0,我们直接把前面的舍弃,也就是说重新开始计算,否则会越加越小的,直接让dp[i]=num[i]
	 * 故可得出 转移公式是 dp[i]=num[i]+max(dp[i-1],0);
	 * 3.边界条件问题:当i等于0的时候,也就是前1个元素,他能构成的最大和也就是他自己,所以
	 * dp[0]=num[0];
	 */
	public int maxSubArray(int[] nums) {
		int length = nums.length;
		int[] dp = new int[length];
		// 边界问题
		dp[0] = nums[0];
		int current = dp[0];
		int max = current;
		for (int i = 1; i < length; i++) {
			current = Math.max(dp[i -1], 0) + nums[i];
			max  = Math.max(current, max);
		}

		return max;
	}


}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:30:49  更:2021-12-06 15:31:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:53:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码