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

力扣hot100 最大子数组和 动态规划 分治 无后效性 子问题划分

👨‍🏫 题目地址

在这里插入图片描述


无后效性

为了保证计算子问题能够按照顺序、不重复地进行,动态规划要求已经求解的子问题不受后续阶段的影响。这个条件也被叫做「无后效性」。换言之,动态规划对状态空间的遍历构成一张有向无环图,遍历就是该有向无环图的一个拓扑序。有向无环图中的节点对应问题中的「状态」,图中的边则对应状态之间的「转移」,转移的选取就是动态规划中的「决策」。

关键 1:理解题意

题目要我们找出和最大的连续子数组的值是多少,「连续」是关键字,连续很重要,不是子序列。

题目只要求返回结果,不要求得到最大的连续子数组是哪一个。这样的问题通常可以使用「动态规划」解决。

关键 2:如何定义子问题(如何定义状态)

设计状态思路:把不确定的因素确定下来,进而把子问题定义清楚,把子问题定义得简单。动态规划的思想通过解决了一个一个简单的问题,进而把简单的问题的解组成了复杂的问题的解。

🍻 DP

public class Solution {public int maxSubArray(int[] nums) {int n = nums.length;int[] f = new int[n];// 记录nums[i]结尾的最大连续数组和f[0] = nums[0];int ans = f[0];for (int i = 1; i < n; i++){f[i] = Math.max(f[i - 1] + nums[i], nums[i]);ans = Math.max(ans, f[i]);}return ans;}
}

🍻 DP优化空间

public class Solution {public int maxSubArray(int[] nums) {int pre = 0;int res = nums[0];for (int num : nums) {pre = Math.max(pre + num, num);res = Math.max(res, pre);}return res;}
}

🍻 分治

public class Solution {public int maxSubArray(int[] nums) {int len = nums.length;if (len == 0) {return 0;}return maxSubArraySum(nums, 0, len - 1);}private int maxCrossingSum(int[] nums, int left, int mid, int right) {// 一定会包含 nums[mid] 这个元素int sum = 0;int leftSum = Integer.MIN_VALUE;// 左半边包含 nums[mid] 元素,最多可以到什么地方// 走到最边界,看看最值是什么// 计算以 mid 结尾的最大的子数组的和for (int i = mid; i >= left; i--) {sum += nums[i];if (sum > leftSum) {leftSum = sum;}}sum = 0;int rightSum = Integer.MIN_VALUE;// 右半边不包含 nums[mid] 元素,最多可以到什么地方// 计算以 mid+1 开始的最大的子数组的和for (int i = mid + 1; i <= right; i++) {sum += nums[i];if (sum > rightSum) {rightSum = sum;}}return leftSum + rightSum;}private int maxSubArraySum(int[] nums, int left, int right) {if (left == right) {return nums[left];}int mid = left + (right - left) / 2;return max3(maxSubArraySum(nums, left, mid),maxSubArraySum(nums, mid + 1, right),maxCrossingSum(nums, left, mid, right));}private int max3(int num1, int num2, int num3) {return Math.max(num1, Math.max(num2, num3));}
}

👨‍🏫 参考地址

相关文章:

力扣hot100 最大子数组和 动态规划 分治 无后效性 子问题划分

&#x1f468;‍&#x1f3eb; 题目地址 无后效性 为了保证计算子问题能够按照顺序、不重复地进行&#xff0c;动态规划要求已经求解的子问题不受后续阶段的影响。这个条件也被叫做「无后效性」。换言之&#xff0c;动态规划对状态空间的遍历构成一张有向无环图&#xff0c;遍…...

C语言--每日选择题--Day28

第一题 1. 设a和b均为double型变量&#xff0c;且a5.5、b2.5&#xff0c;则表达式(int)ab/b的值是&#xff08; &#xff09; A&#xff1a;6.500000 B&#xff1a;6 C&#xff1a;5.500000 D&#xff1a;6.000000 答案及解析 D 本题考查的是不同数据类型之间的变量进行运算时…...

Linux 安装 Minio 配置 HTTPS

安装 创建目录 [roott2 local]# mkdir minio [roott2 local]# cd minio [roott2 minio]# mkdir data下载 [roott2 minio]# wget https://dl.min.io/server/minio/release/linux-amd64/minio [roott2 minio]# chmod x minio # 赋权设置账号密码 minio 默认账号密码为 minio…...

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可...

Spark---资源、任务调度

一、Spark资源调度源码 1、Spark资源调度源码过程 Spark资源调度源码是在Driver启动之后注册Application完成后开始的。Spark资源调度主要就是Spark集群如何给当前提交的Spark application在Worker资源节点上划分资源。Spark资源调度源码在Master.scala类中的schedule()中进行…...

单片机开发常见问题集合

文章目录 发送串口数据偶尔丢失字节 发送串口数据偶尔丢失字节 场景&#xff1a; 在STM32单片机中进行串口数据发送&#xff0c;在Linux/Windows上进行串口数据接收&#xff0c;会偶发出现接收到的数据有某些字节丢失。 分析&#xff1a; 在STM32中可以使用printf用于发送串口…...

Matlab 点云曲率计算(之二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经讨论过许多关于计算曲率的问题,这里使用一个通过拟合三次曲面方程的方式来计算曲率,计算过程如下图所示: 二、实现代码 %********...

C++11的原子变量

C11提供了一个原子类型std::atomic<T>&#xff0c;可以使用任意类型作为模板参数&#xff0c;C11内置了整型的原子变量&#xff0c;可以更方便的使用原子变量&#xff0c;使用原子变量就不需要使用互斥量来保护该变量了&#xff0c;用起来更简洁。例如&#xff0c;要做一…...

北京交通大学 计算机网络体系与协议(研) 考试试卷

计算机网络体系与协议2023年期末考试 时长&#xff1a;120分钟 学院&#xff1a; 学号&#xff1a; 姓名&#xff1a; 一、简答题&#xff08;每题5分&#xff09; 1.简述公开密钥密码体制的工作原理…...

python之pyqt专栏7-信号与槽3

在上一篇文章中python之pyqt专栏6-信号与槽2-CSDN博客中&#xff0c;我们可以了解到对象可以使用内置信号&#xff0c;这些信号来自于类定义或者继承过来的。我们可以对这些信号可以通过connect连接槽函数。 需求 现在有一个需求&#xff0c;有两个UI界面“untitled.ui”和“u…...

高噪点灰度图目标粗定位CoraseLocation

高噪点的灰度图目标粗定位 /* ** name: CoraseLocation ** brief: 粗定位 ** param:[in] srcGray 灰度图&#xff08;&#xff09; ** param:[in] box 目标尺寸&#xff08;像素&#xff09; ** param:[ou] roi 目标定位结果 ** return: true成功&#xff0c;false…...

Android:Google三方库之Firebase集成详细步骤(二)

Analytics分析 1、将 Firebase 添加到您的 Android 项目&#xff08;如果尚未添加&#xff09;&#xff0c;并确保在 Firebase 项目中启用了 Google Analytics&#xff08;分析&#xff09;&#xff1a; 如果您要创建新的 Firebase 项目&#xff0c;请在项目创建过程中启用 G…...

java使用freemarker模板生成html,再生成pdf

1.freemarker模板生成html 添加Maven依赖 在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>创建Freemarker…...

图解系列--Web服务器,Http首部

1.用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。。比如&#xff0c;提供 Web 托管服务&#xff08;Web Hosting Service&#xff09;的供应商&#xff0c;可以用一台服务器为多位客户服务&#xff0c;也可以以每位客户持有的域名运行各自不…...

直线(蓝桥杯)

直线 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中&#xff0c;两点可以确定一条直线。如果有多点在一条直线上&#xff0c; 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…...

Android:从源码看FragmentManager如何工作

一个Activity中&#xff0c;在某一个容器中&#xff0c;更换不同的Fragment&#xff0c;从而显示不同的界面&#xff0c;这个场景相信大家已经非常熟悉了&#xff0c;也知道Activity是通过FragmentManager来管理嵌入的Fragments的&#xff0c;所以今天就来看看FragmentManager是…...

LabVIEW通过编程将图形类控件的X轴显示为时间戳

LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点&#xff0c;可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW&#xff0c;这些属性节点无法在同一个位置找到。请参阅以下部分&#xff0c;了解特定版本LabVIEW的相关属性节点的位置。 …...

Spring Boot进行单元测试,一个思路解决重启低效难题!

所谓单元测试就是对功能最小粒度的测试&#xff0c;落实到JAVA中就是对单个方法的测试。 junit可以完成单个方法的测试&#xff0c;但是对于Spring体系下的web应用的单元测试是无能为力的。因为spring体系下的web应用都采用了MVC三层架构&#xff0c;依托于IOC&#xff0c;层级…...

c/c++ header_only 头文件实现的关键点

header_only 头文件实现的关键点 ------------------------------------------------------------------------- author: hjjdebug date: 2023年 11月 28日 星期二 16:58:38 CST descriptor: header_only 头文件实现的关键点1. 对外声明的函数必需加上inline, 消除连接的歧义…...

Linux(CentOS7.5):通过docker安装redis

一、准备配置文件 在宿主机&#xff0c;准备映射配置文件的目录下&#xff0c;运行如下&#xff1a; wget http://download.redis.io/redis-stable/redis.conf二、安装 docker run \ --restartalways \ --log-opt max-size100m \ --log-opt max-file2 \ -p 6380:6379 \ -v /opt…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...