【力扣hot100】刷题笔记Day25

news2024/12/24 20:41:18

前言

  • 这几天搞工作处理数据真是类似我也,还被老板打电话push压力有点大的,还好搞的差不多了,明天再汇报,赶紧偷闲再刷几道题(可恶,被打破连更记录了)
  • 这几天刷的是动态规划,由于很成体系不适合零散刷,还是把代码随想录动态规划部分的题目快速再过一遍,代码简单但是思路也要记住

139. 单词拆分 - 力扣(LeetCode)

  • 动态规划

    • class Solution:
          def wordBreak(self, s: str, wordDict: List[str]) -> bool:
              s_length = len(s)
              dp = [False] * (s_length + 1)   # dp[i]表示s[0:i]能否被拼接
              dp[0] = True                    # 初始化,空字符串可以
              for i in range(1, s_length+1):  # 遍历结束指针i
                  for j in range(i):          # 遍历开始指针j
                      if dp[j] and s[j:i] in wordDict:  # 如果j-1已经可拼,s[j:i]可再拼一个
                          dp[i] = True        # 整体就可以拼接
                          break               # 找到一组拼接,更新为True就退出
              return dp[s_length]

 300. 最长递增子序列 - 力扣(LeetCode)

  • 动态规划

    • class Solution:
          def lengthOfLIS(self, nums: List[int]) -> int:
              n = len(nums)  # dp[i]表示以nums[i]结尾的最长递增子串长度
              dp = [1] * n   # 初始化为全1,子串至少为1个
              res = 1  # 结果先取1
              for i in range(1, n):
                  for j in range(i):
                      if nums[i] > nums[j]:  # 只要比前面的递增,子串长度+1
                          dp[i] = max(dp[i], dp[j] + 1)
                  res = max(res, dp[i])  # 更新最长值
              return res

152. 乘积最大子数组 - 力扣(LeetCode)

  • 动态规划

    • class Solution:
          def maxProduct(self, nums: List[int]) -> int:
              n = len(nums)
              dp_max = [float('-inf')] * n  # 表示以nums[i]为底的连续子数组的最大乘积,也可以用pre_max一个变量表示
              dp_min = [float('inf')] * n  # 表示以nums[i]为底的连续子数组的最小乘积,也可以用pre_min一个变量表示
              dp_max[0] = dp_min[0] = res = nums[0]
              for i in range(1, n):
                  # 由于当前可能正可能负,三种取最大/小:当前数,前最大×当前数,前最小×当前数
                  dp_max[i] = max(nums[i], dp_max[i-1] * nums[i], dp_min[i-1] * nums[i])
                  dp_min[i] = min(nums[i], dp_max[i-1] * nums[i], dp_min[i-1] * nums[i])
                  res = max(res, dp_max[i])
              return res
  • 符号个数

    • 思路参考题解及评论区
    • class Solution:
          def maxProduct(self, nums: List[int]) -> int:
              reverse_nums = nums[::-1]
              # 先按照0分成多个数组,在不同数组里统计奇数个数
              # 负数个数为偶数,全部相乘,负数个数为奇数,某奇数的前缀乘积或后缀乘积为最大值
              for i in range(1, len(nums)):
                  nums[i] *= nums[i - 1] or 1   # 前缀乘积(遇到0就重置)
                  reverse_nums[i] *= reverse_nums[i - 1] or 1  # 后缀乘积(遇到0就重置)
              return max(nums + reverse_nums)  # 一定是前缀乘积和后缀乘积的最大值

416. 分割等和子集 - 力扣(LeetCode)

  • 01背包

    • class Solution:
          def canPartition(self, nums: List[int]) -> bool:
              numSum = sum(nums)
              if numSum % 2 == 1: return False  # 总和为奇数无法等分
              target = numSum // 2  # 01背包大小
              dp = [0] * (target + 1)  # dp[j]表示以j为容量的背包装的最大价值
              for i in range(len(nums)):  # 遍历物品,从头到尾,重量和价值都为nums[i]
                  for j in range(target, nums[i] - 1, -1):  # 遍历背包,从target到nums[i]倒序
                      dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])
              return dp[target] == target  # 如果target容量的背包刚好能装价值为target,找到分割方法

32. 最长有效括号 - 力扣(LeetCode)

  • 辅助栈

    • 参考题解
    • class Solution:
          def longestValidParentheses(self, s: str) -> int:
              st = []  # 栈中存储的是到当前位置暂时不可以构成括号的索引
              res = 0
              for i in range(len(s)):
                  # 可以构成括号:栈不空 and 当前字符为'(' and 栈顶字符为'('
                  if st and s[i] == ')' and s[st[-1]] == '(':
                      st.pop()   # 弹出栈顶'('
                      # 与最远不能构成括号的下标计算距离,更新最大长度,注意越界
                      res = max(res, i - (st[-1] if st else - 1)) 
                  # 不可以构成括号:栈空 or 当前字符为')' or 栈顶字符为')'
                  else:
                      st.append(i)  # 存入下标
              return res
  • 动态规划

    •  参考题解

    • class Solution:
          def longestValidParentheses(self, s: str) -> int:
              n = len(s)
              if n <= 1: return 0
              dp = [0] * n  # dp[i]表示以s[i]结尾的最长有效括号子串
              res = 0   # 用于更新最大值
              for i in range(1, n):
                  # (),在dp[i-2]基础上直接延续2个
                  if s[i] == ')' and s[i-1] == '(':           
                      dp[i] = dp[i-2] + 2 if i >= 2 else 2    # 防止越界,dp[0]以前为0
                  # )),先看前一个)匹配多长,再看后一个)能否匹配上(,可以的话就+2
                  elif s[i] == ')' and s[i-1] == ')':         
                      sub_len = dp[i-1]  # 前一个)已经匹配的长度
                      if i-sub_len-1 >= 0 and s[i-sub_len-1] == '(':  # 后一个)要找到(才能匹配上
                          last = dp[i-sub_len-2] if i-sub_len-2 >= 0 else 0  # 找到(之前已经匹配多长,防止越界,dp[0]以前为0
                          dp[i] = dp[i-1] + last + 2  # 前一个)匹配的长度 + 后一个)找到(之前已经匹配的长度 + 2
                  res = max(res, dp[i])  # 更新最大值,没有以上情况dp[i]就是0
              return res

后言

  • 最后这道困难题真顶啊,要完全搞懂花了不少时间,这两天继续去巩固dp去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二分查找刷题(二)

目录 1.搜索插入位置 算法原理 代码编写 2.x 的平方根 算法原理 代码编写 3.山脉数组的峰顶索引 算法原理 1.搜索插入位置 算法原理 判断二段性 可以将区间分于5和大于等于5的两个区间&#xff0c;可以使用二分查找搜索左区间的模板。 代码编写 int searchInsert(vect…

【触想智能】工业触摸显示器在户外使用需要注意哪些问题?

工业显示器是智能制造领域应用比较广泛的电子产品&#xff0c;它广泛应用于工厂产线以及各种配套设备&#xff0c;在很大程度上提升了工厂的生产效率。 工业显示器按触摸方式分&#xff0c;可以分为工业触摸显示器和非触摸工业显示器两种;按使用环境分&#xff0c;又可以分为室…

计算机网络面经八股-什么是 SYN洪泛攻击?如何防范?

SYN洪泛攻击属于 DOS 攻击的一种&#xff0c;它利用 TCP 协议缺陷&#xff0c;通过发送大量的半连接请求&#xff0c;耗费 CPU 和内存资源。 原理&#xff1a; 在三次握手过程中&#xff0c;服务器发送 [SYN/ACK] 包&#xff08;第二个包&#xff09;之后、收到客户端的 [ACK…

Go语言框架路由Controller控制器设计思路gin路由根据控制器目录分层生成路由地址

Controller设计好处 框架设计用controller分请求路由层级&#xff0c;应用从app目录开始对应请求url路由地址&#xff0c;这样设计师方便开发时候通过请求地址层级快速定位接口方法对应的代码位置。 例如api接口请求路径为&#xff1a;​​http://localhost:8110/​​busines…

解码人工智能的幽默:理解其背后的误解与挑战

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

码垛机夹具设计:材料选择与应用考量

在现代工业生产中&#xff0c;码垛机夹具扮演着至关重要的角色。作为连接产品与搬运设备的桥梁&#xff0c;夹具的设计直接影响到生产效率和产品质量。本文将深入探讨码垛机夹具的基本原理及设计要素。 码垛机夹具的工作原理基于对产品的抓取和释放。这一过程看似简单&#xf…

玩转LangChain - 2 在本地跑Google新出的Gemma模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

海格里斯HEGERLS智能托盘四向车系统为物流仓储自动化升级提供新答案

随着实体企业面临需求多样化、订单履行实时化、商业模式加速迭代等挑战&#xff0c;客户对物流仓储解决方案的需求也逐渐趋向于柔性化、智能化。作为近十年来发展起来的新型智能仓储设备&#xff0c;四向车系统正是弥补了先前托盘搬运领域柔性解决方案的空白。随着小车本体设计…

数据库insert详细用法

数据库版本&#xff1a;KingbaseES V008R006C008B0014 简介 INSERT 语句用于将数据插入表中&#xff0c;向指定表格添加1行或多行数据&#xff0c;本篇文章主要以kingbase介绍insert的一些技巧。 文章目录如下 1. 基本语法 2. 实用技巧 2.1. 插入其他表数据 2.2. 快速插入万…

Hubspot 2023年推荐使用的11个AI视频生成器

视频是任何营销活动不可或缺的一部分&#xff1b;然而&#xff0c;如果你不懂编辑或时间紧迫&#xff0c;它们可能会很乏味&#xff0c;很难创建。一只手从电脑里伸出来&#xff0c;拳头碰到另一只手&#xff1b;代表AI视频生成器。 幸运的是&#xff0c;你可以利用许多人工智能…

2024蓝桥杯每日一题(时间日期)

一、第一题&#xff1a;日期差值 解题思路&#xff1a;模拟 写一个计算时间的板子两者相减 【Python程序代码】 mon [0,31,28,31,30,31,30,31,31,30,31,30,31] def pd(x):if x%4000 or (x%40 and x%100!0):return Truereturn False def get_day(y,m,d):res 0for i …

【空投】Blast交互

L2 Blast今早宣布获得paradigm领投的2kw美金融资&#xff0c;项目由blur创始人pacman发起&#xff0c;主打native yield&#xff0c;即跨链到blast的资产自动获得收益&#xff0c;目前还是邀请制&#xff0c;并且有积分机制&#xff0c;目前进开放充值和积分获取功能&#xff0…

【智慧公寓】东胜物联嵌入式硬件解决方案,为智慧公寓解决方案商降本增效,更快实现产品规模化生产

方案背景 东胜物联本次服务的客户是一家专注于提供智慧公寓解决方案的欧洲企业&#xff0c;该公司旨在为用户提供智能&#xff0c;便捷&#xff0c;安全的生活体验。其解决方案涵盖智慧公寓控制、自动化、能源管理和智能建筑&#xff0c;它的使命是通过复杂的控制系统使用户能…

12、MongoDB -- 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库(传统的同步API编程)

目录 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库&#xff08;传统的同步API编程&#xff09;演示前提&#xff1a;登录单机模式的 mongodb 服务器命令登录【test】数据库的 mongodb 客户端命令登录【admin】数据库的 mongodb 客户端命令 代码演示同步API编…

antv L7结合高德地图使用dome1

antv L7结合高德地图使用 一、设置底图二 、添加antv L7 中要使用的dome1. 安装L7 依赖2. 使用的dome 、以下使用的是浮动功能3. 运行后显示 自定义样式修改1. 设置整个中国地图浮动起来 自定义标注点1. 静态标注点2. 动态标注点&#xff08;点位置需要自己改&#xff09;3. 完…

现代DevOps如何改变软件开发格局

在软件开发的早期&#xff0c;该过程通常是开发人员编写代码&#xff0c;再将其交给质量保证&#xff08;QA&#xff09;进行测试。这种瀑布开发方法可能会导致质量问题和延迟&#xff0c;因为问题是在周期后期发现的。 一、了解DevOps和测试左移 DevOps是Development和Opera…

【强化学习中alpha和gamma0】

在强化学习中&#xff0c;alpha&#xff08;α&#xff09;和gamma&#xff08;γ&#xff09;分别代表学习率和折扣因子&#xff0c;它们是强化学习算法中的两个重要的超参数。 1. **学习率 (alpha)&#xff1a;** - alpha 是一个控制在学习过程中对新观测值的权重的参数。…

【工具】Git的介绍与安装

目录 前言 1W&#xff1a;什么是Git&#xff1f; 2W&#xff1a;为什么使用Git&#xff1f; 3W&#xff1a;如何使用Git&#xff1f; Git的安装步骤 测试 3.1 桌面空白部分鼠标右击 3.2 选择 Open Git Bash here 3.3 输入 git -v 命令查看版本 Git区域分布 Git的工作…

基于springboot的厨艺交流平台

采用技术 基于springboot的厨艺交流平台的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示 食材分类管理 用户信息管理 菜谱分类管理 菜谱信息管理 食材信息…

AHU 汇编 实验四

实验名称&#xff1a;实验四 两个数的相乘 实验内容&#xff1a; 用子程序形式编写&#xff1a; A*B&#xff1a;从键盘输入a和b&#xff0c;计算A*B&#xff0c;其中乘法采用移位和累加完成 实验过程&#xff1a; 源代码&#xff1a; data segmentmul1 db 16,?,16 dup(?…