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

NeetCode刷题第19天(2025.1.31)

文章目录

  • 099 Maximum Product Subarray 最大乘积子数组
  • 100 Word Break 断字
  • 101 Longest Increasing Subsequence 最长递增的子序列
  • 102 Maximum Product Subarray 最大乘积子数组
  • 103 Partition Equal Subset Sum 分区等于子集和
  • 104 Unique Paths 唯一路径
  • 105 Longest Common Subsequence 最长公共 Subsequence

099 Maximum Product Subarray 最大乘积子数组

给定一个整数数组 nums,找到数组中乘积最大的子数组并返回它。
子数组是数组中连续的非空元素序列。
您可以假设输出将适合 32 位整数。

示例1:
Input: nums = [1,2,-3,4]
Output: 4示例2:
Input: nums = [-2,-1]
Output: 2

解题1:
在这里插入图片描述
如果全部都是正数的话,他们的乘积一定是连续递增的。
在这里插入图片描述
这里可以每次都标记一个最大和一个最小值。有一个特殊情况,就是当0出现的时候,因为0乘以任何数都为0,所以这个时候我们要跳过0,把最大最小值从1开始重新计数。

class Solution:def maxProduct(self, nums: List[int]) -> int:res = max(nums)curMin, curMax = 1, 1for n in nums:if n == 0:curMin, curMax = 1, 1continuetmp = curMax * ncurMax = max(tmp, n * curMin, n)curMin = min(tmp, n * curMin, n)res = max(res, curMax)return res

时间复杂度: O ( n 2 ) O(n²) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)

100 Word Break 断字

给定一个字符串 s 和一个字符串 wordDict 字典,如果s可以分割成一个以空格分隔的字典单词序列,则返回true 。
您可以无限次重复使用字典中的单词。您可以假设所有字典单词都是唯一的。

示例1:
Input: s = "neetcode", wordDict = ["neet","code"]
Output: true
说明:返回 true,因为 “neetcode” 可以拆分为 “neet” 和 “code”。示例2:
Input: s = "applepenapple", wordDict = ["apple","pen","ape"]
Output: true
说明:返回 true,因为 “applepenapple” 可以拆分为 “apple”、“pen” 和 “apple”。请注意,我们可以重复使用单词,也可以不使用所有单词。示例3:
Input: s = "catsincars", wordDict = ["cats","cat","sin","in","car"]
Output: false

解题1: 动态规划(自下而上)
在这里插入图片描述
这里我们的决策树是按照wordDict中的词来划定每个节点的。

这里我们从后往前。当i=7的时候,sub_s=“e”,长度为1,而wordDict中的长度都大于他,显然不可能匹配到,所以dp[7]=False。
在这里插入图片描述

class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> bool:dp = [False] * (len(s) + 1)dp[len(s)] = Truefor i in range(len(s) - 1, -1, -1):for w in wordDict:if (i + len(w)) <= len(s) and s[i : i + len(w)] == w:dp[i] = dp[i + len(w)]if dp[i]:breakreturn dp[0]

时间复杂度: O ( n ∗ m ∗ t ) O(n∗m∗t) O(nmt)
空间复杂度: O ( n ) O(n) O(n)
n 是字符串 s 的长度 , m 是 中的 wordDict 单词数, t 是 中 wordDict 任何单词的最大长度。

101 Longest Increasing Subsequence 最长递增的子序列

给定一个整数数组 nums ,返回最长的严格递增的子序列的长度。
子序列是一个序列,它可以通过删除一些元素或不删除元素而不更改其余字符的相对顺序来从给定序列派生。
例如, “cat” 是 “crabt” 的子序列。

示例1:
Input: nums = [9,1,4,2,3,3,7]
Output: 4
说明:最长递增的子序列是 [1,2,3,7],长度为 4。示例2:
Input: nums = [0,3,1,3,2,3]
Output: 4

解题1: 动态规划(自下而上)
在这里插入图片描述
LIS[2]可能是1或者1+LIS[3],但是nums[2]<nums[3],所以1+LIS[3]就排除了。
在这里插入图片描述
在LIS[0]的时候,因为后面的都比1大,所以要把该位置和后面都进行相加,然后选择最大的。

class Solution:def lengthOfLIS(self, nums: List[int]) -> int:LIS = [1] * len(nums)for i in range(len(nums) - 1, -1, -1):for j in range(i + 1, len(nums)):if nums[i] < nums[j]:LIS[i] = max(LIS[i], 1 + LIS[j])return max(LIS)

时间复杂度: O ( n 2 ) O(n²) O(n2)
空间复杂度: O ( n ) O(n) O(n)

102 Maximum Product Subarray 最大乘积子数组

给定一个整数数组 nums,找到数组中乘积最大的子数组并返回它。
子数组是数组中连续的非空元素序列。
您可以假设输出将适合 32 位整数。

示例1:
Input: nums = [1,2,-3,4]
Output: 4示例2:
Input: nums = [-2,-1]
Output: 2

解题1:

class Solution:def countSubstrings(self, s: str) -> int:res = 0for i in range(len(s)):res += self.countPali(s, i, i)res += self.countPali(s, i, i + 1)return resdef countPali(self, s, l, r):res = 0while l >= 0 and r < len(s) and s[l] == s[r]:res += 1l -= 1r += 1return res

时间复杂度: O ( n 2 ) O(n²) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)

103 Partition Equal Subset Sum 分区等于子集和

您将获得一个正整数 nums 数组。
如果可以将数组划分为两个子集,即 subset1 和 subset2,其中 sum(subset1) == sum(subset2),则返回 true。否则,返回 false。

示例1:
Input: nums = [1,2,3,4]
Output: true
说明:数组可以分区为 [1, 4] 和 [2, 3]。示例2:
Input: nums = [1,2,3,4,5]
Output: false

解题1:
要把元素分成和相等的两部分,那就先把所有元素相加再除以2,就知道每个部分是多少。下面是决策树。
在这里插入图片描述
在这里插入图片描述
我们每在决策树中使用一个元素,就把该元素从数组中去除,使用余下的子数组。同时,左右子树的target表示我们还需呀多少,每次更新一层,我们就会更新i和target。
在这里插入图片描述
我们使用自下而上的动态规划,在set中列出所有可能的和的情况。首先最后一个5和默认0开始,往前面一个位置遍历,0+11=11,5+11=16,添加到set中,此时set={0,5,11,16}。接下来是5,再把我和刚才的set中每个位置元素相加,依次类推,得到最终的set集合。

class Solution:def countSubstrings(self, s: str) -> int:res = 0for i in range(len(s)):res += self.countPali(s, i, i)res += self.countPali(s, i, i + 1)return resdef countPali(self, s, l, r):res = 0while l >= 0 and r < len(s) and s[l] == s[r]:res += 1l -= 1r += 1return res

时间复杂度: O ( n 2 ) O(n²) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)

104 Unique Paths 唯一路径

有一个 m x n 网格,您可以在任何时间点向下或向右移动。
给定两个整数 m 和 n,返回从网格左上角 (grid[0][0]) 到右下角 (grid[m - 1][n - 1]) 可以采用的可能的唯一路径的数量。
您可以假设输出将适合 32 位整数。

示例1:
Input: m = 3, n = 6
Output: 21

在这里插入图片描述

示例2:
Input: m = 3, n = 7
Output: 28

解题1: 动态规划(空间优化)
在这里插入图片描述
我们从终点开始往回走。因为我们只有向下和向右两条路径,所以每个位置可能的路径数就是下面和右面已知路径的总和。

class Solution:def uniquePaths(self, m: int, n: int) -> int:# 这里先设置最后一行都为1row = [1] * n# 从下往上计算每行for i in range(m - 1):# 每行都先置为1newRow = [1] * n# 因为最右侧的一列只可以往下走,所以路径只有一个# 需要从倒数第二轮开始遍历for j in range(n - 2, -1, -1):newRow[j] = newRow[j + 1] + row[j]row = newRowreturn row[0]

时间复杂度: O ( m ∗ n ) O(m∗n) O(mn)
空间复杂度: O ( n ) O(n) O(n)

105 Longest Common Subsequence 最长公共 Subsequence

给定两个字符串 text1 和 text2,如果存在一个字符串,则返回两个字符串之间最长的公共子序列的长度,否则返回 0。
子序列是一个序列,它可以通过删除一些元素或不删除元素而不更改其余字符的相对顺序来从给定序列派生。
例如,“cat” 是 “crabt” 的子序列。
两个字符串的公共子序列是存在于两个字符串中的子序列。

示例1:
Input: text1 = "cat", text2 = "crabt" 
Output: 3 
解释: 最长的公共子序列是 “cat”,长度为 3。示例2:
Input: text1 = "abcd", text2 = "abcd"
Output: 4示例3:
Input: text1 = "abcd", text2 = "efgh"
Output: 0

解题1: 自下而上(动态规划)
在这里插入图片描述
这里是一个二维的矩阵,刚开始都初始化为0。我们从右下往左上进行遍历。当匹配到一个字符的时候就把右下位置+1的值赋值到该位置。

class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:# 初始化二维矩阵dp = [[0 for j in range(len(text2) + 1)] for i in range(len(text1) + 1)]for i in range(len(text1) - 1, -1, -1):for j in range(len(text2) - 1, -1, -1):if text1[i] == text2[j]:dp[i][j] = 1 + dp[i + 1][j + 1]else:dp[i][j] = max(dp[i][j + 1], dp[i + 1][j])return dp[0][0]

时间复杂度: O ( m ∗ n ) O(m*n) O(mn)
空间复杂度: O ( m ∗ n ) O(m*n) O(mn)

相关文章:

NeetCode刷题第19天(2025.1.31)

文章目录 099 Maximum Product Subarray 最大乘积子数组100 Word Break 断字101 Longest Increasing Subsequence 最长递增的子序列102 Maximum Product Subarray 最大乘积子数组103 Partition Equal Subset Sum 分区等于子集和104 Unique Paths 唯一路径105 Longest Common Su…...

Google Chrome-便携增强版[解压即用]

Google Chrome-便携增强版 链接&#xff1a;https://pan.xunlei.com/s/VOI0OyrhUx3biEbFgJyLl-Z8A1?pwdf5qa# a 特点描述 √ 无升级、便携式、绿色免安装&#xff0c;即可以覆盖更新又能解压使用&#xff01; √ 此增强版&#xff0c;支持右键解压使用 √ 加入Chrome增强…...

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…...

什么是Rust?它有什么特点?为什么要学习Rust?

什么是Rust&#xff1f;它有什么特点&#xff1f;为什么要学习Rust&#xff1f; 如果你是一名编程初学者&#xff0c;或者已经有一些编程经验但对Rust感兴趣&#xff0c;那么这篇文章就是为你准备的&#xff01;我们将用简单易懂的语言&#xff0c;带你了解Rust是什么、它有什…...

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题&#xff1a;Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者&#xff1a;Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…...

AIP-134 标准方法:Update

编号134原文链接AIP-134: Standard methods: Update状态批准创建日期2019-01-24更新日期2022-06-02 REST API通常向资源URI&#xff08;如 /v1/publishers/{publisher}/books/{book} &#xff09;发出 PATCH 或 PUT 请求&#xff0c;更新资源。 面向资源设计&#xff08;AIP-…...

计算机网络一点事(24)

TCP可靠传输&#xff0c;流量控制 可靠传输&#xff1a;每字节对应一个序号 累计确认&#xff1a;收到ack则正确接收 返回ack推迟确认&#xff08;不超过0.5s&#xff09; 两种ack&#xff1a;专门确认&#xff08;只有首部无数据&#xff09; 捎带确认&#xff08;带数据…...

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析&#xff0c;目前还处于陆续不断更新地更新过程中&#xff0c;为大佬的专业和开源贡献精神点赞。先收藏链接&#xff0c;后续慢慢学习。 相关链接如下&#xff1a; DIFY源码解析...

Kafka SSL(TLS)安全协议

文章目录 Kafka SSL&#xff08;TLS&#xff09;安全协议1. Kafka SSL 的作用1.1 数据加密1.2 身份认证1.3 数据完整性1.4 防止中间人攻击1.5 确保安全的分布式环境1.6 防止拒绝服务&#xff08;DoS&#xff09;攻击 2. Kafka SSL 配置步骤&#xff08;1&#xff09;创建 SSL 证…...

hexo部署到github page时,hexo d后page里面绑定的个人域名消失的问题

Hexo 部署博客到 GitHub page 后&#xff0c;可以在 setting 中的 page 中绑定自己的域名&#xff0c;但是我发现更新博客后绑定的域名消失&#xff0c;恢复原始的 githubio 的域名。 后面搜索发现需要在 repo 里面添加 CNAME 文件&#xff0c;内容为 page 里面绑定的域名&…...

【Block总结】MAB,多尺度注意力块|即插即用

文章目录 一、论文信息二、创新点三、方法MAB模块解读1、MAB模块概述2、MAB模块组成3、MAB模块的优势 四、效果五、实验结果六、总结代码 一、论文信息 标题: Multi-scale Attention Network for Single Image Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguan…...

移动互联网用户行为习惯哪些变化,对小程序的发展有哪些积极影响

一、碎片化时间利用增加 随着生活节奏的加快&#xff0c;移动互联网用户的碎片化时间越来越多。在等公交、排队、乘坐地铁等间隙&#xff0c;用户更倾向于使用便捷、快速启动的应用来满足即时需求。小程序正好满足了这一需求&#xff0c;无需下载安装&#xff0c;随时可用&…...

使用UpdateCursor删除行

UpdateCursor除了可以编辑表或要素类的行外,还可以删除行.但要记住,在编辑会话外删除行时,更改是永久性的. 操作方法: 1.打开IDLE,新建一个脚本 2.导入arcpy和os模块 import arcpy import os 3.设置工作空间 arcpy.env.workspace "<>" 4.在with语句中新…...

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI&#xff0c;是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手&#xff0c;感觉收获还蛮多的&#xff0c;今天来分享下开发过程中的一些经验~ 为啥要做这个…...

1.4 Go 数组

一、数组 1、简介 数组是切片的基础 数组是一个固定长度、由相同类型元素组成的集合。在 Go 语言中&#xff0c;数组的长度是类型的一部分&#xff0c;因此 [5]int 和 [10]int 是两种不同的类型。数组的大小在声明时确定&#xff0c;且不可更改。 简单来说&#xff0c;数组…...

攻防世界_simple_php

同类型题&#xff08;更难版->&#xff09;攻防世界_Web(easyphp)&#xff08;php代码审计/json格式/php弱类型匹配&#xff09; php代码审计 show_source(__FILE__)&#xff1a;show_source() 函数用于显示指定文件的源代码&#xff0c;并进行语法高亮显示。__FILE__ 是魔…...

如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?

在 C# 中,using语句用于自动释放实现了IDisposable接口的对象所占用的非托管资源,如文件句柄、数据库连接、图形句柄等。其使用方式如下: 基础用法 声明并初始化资源对象:在using关键字后的括号内声明并初始化一个实现了IDisposable接口的对象。使用资源:在using语句块内…...

C++哈希(链地址法)(二)详解

文章目录 1.开放地址法1.1key不能取模的问题1.1.1将字符串转为整型1.1.2将日期类转为整型 2.哈希函数2.1乘法散列法&#xff08;了解&#xff09;2.2全域散列法&#xff08;了解&#xff09; 3.处理哈希冲突3.1线性探测&#xff08;挨着找&#xff09;3.2二次探测&#xff08;跳…...

Solon Cloud Gateway 开发:导引

Solon Cloud Gateway 是 Solon Cloud 体系提供的分布式网关实现&#xff08;轻量级实现&#xff09;。 分布式网关的特点&#xff08;相对于本地网关&#xff09;&#xff1a; 提供服务路由能力提供各种拦截支持 1、分布式网关推荐 建议使用专业的分布式网关产品&#xff0…...

科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”

不用开口&#xff1a;谷歌 AI 帮你致电商家&#xff0c;价格、预约一键搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”实验性功能&#xff0c;用户可利用AI代替自己致电商家咨询价格和服务。该功能已与美汽车修理厂和美甲沙龙店合作&#xff0c;用户需加入Search Labs并…...

dmfldr实战

dmfldr实战 本文使用达梦的快速装载工具&#xff0c;对测试表进行数据导入导出。 新建测试表 create table “BENCHMARK”.“TEST_FLDR” ( “uid” INTEGER identity(1, 1) not null , “name” VARCHAR(24), “begin_date” TIMESTAMP(0), “amount” DECIMAL(6, 2), prim…...

谷歌收购HTC Vive部分软件团队:为VR/AR生态注入新活力

虚拟现实(VR)和增强现实(AR)技术的快速发展,正在重新定义我们与数字世界互动的方式。然而,尽管这些技术具有巨大的潜力,初创公司进入平台层面的竞争却异常艰难。Meta凭借其既有实力和先发优势占据了市场的主导地位,而苹果则似乎更倾向于专注于AR领域的发展。在这种背景…...

Spring AOP 入门教程:基础概念与实现

目录 第一章&#xff1a;AOP概念的引入 第二章&#xff1a;AOP相关的概念 1. AOP概述 2. AOP的优势 3. AOP的底层原理 第三章&#xff1a;Spring的AOP技术 - 配置文件方式 1. AOP相关的术语 2. AOP配置文件方式入门 3. 切入点的表达式 4. AOP的通知类型 第四章&#x…...

ElasticSearch view

基础知识类 elasticsearch和数据库之间区别&#xff1f; elasticsearch&#xff1a;面向文档&#xff0c;数据以文档的形式存储&#xff0c;即JSON格式的对象。更强调数据的搜索、索引和分析。 数据库&#xff1a;更侧重于事务处理、数据的严格结构化和完整性&#xff0c;适用于…...

一文读懂Python之random模块(31)

random模块是Python的内置标准库&#xff0c;用于生成各类随机数&#xff0c;可以用作生成网站初始登录密码和随机验证码。 一、random模块简介 random模块可以生成随机数&#xff0c;包括随机整数、浮点数、随机元素等。 二、random模块相关概念 随机数&#xff1a; 是指在…...

12.udp

12.udp **1. UDP特性****2. UDP编程框架&#xff08;C/S模式&#xff09;****3. UDP发送接收函数****4. UDP编程练习** 1. UDP特性 连接特性&#xff1a;无链接&#xff0c;通信前无需像TCP那样建立连接。可靠性&#xff1a;不可靠&#xff0c;不保证数据按序到达、不保证数据…...

Upscayl-官方开源免费图像AI增强软件

upscayl 链接&#xff1a;https://pan.xunlei.com/s/VOI0Szqe0fCwSSUSS8zRqKf7A1?pwdhefi#...

【Super Tilemap Editor使用详解】(十七):常见问题解答(FAQ)

1.问题:我更新了 Unity 版本后,资源无法正常工作或代码出现错误。 解答:当你使用不同版本的 Unity 打开项目时,应该删除项目根目录下的 Library 文件夹。此外,如果遇到窗口问题,可以将窗口布局重置为默认布局。 2.问题:我在 SceneView 中看不到工具栏,也无法在图块地图…...

SpringBoot Web开发(SpringMVC)

SpringBoot Web开发&#xff08;SpringMVC) MVC 核心组件和调用流程 Spring MVC与许多其他Web框架一样&#xff0c;是围绕前端控制器模式设计的&#xff0c;其中中央 Servlet DispatcherServlet 做整体请求处理调度&#xff01; . 除了DispatcherServletSpringMVC还会提供其他…...

苍穹外卖第一天

角色分工 技术选型 pojo子模块 nginx反向代理 MD5密码加密...