【力扣hot100】刷题笔记Day25

前言

  • 这几天搞工作处理数据真是类似我也,还被老板打电话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去

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML5七天学会基础动画网页10(2)

制作立方体 学完前面的基础内容&#xff0c;制作立方体是个不错的练习方法&#xff0c;先看成品 再分析一下&#xff0c;六个面让每个面旋转平移就可以实现一个立方体&#xff0c;来看代码: <title> 制作立方体</title> <style> *{ margin: 0; padding: 0; …

鸿蒙开发:从入门到精通的全方位学习指南

随着华为鸿蒙HarmonyOS生态系统的迅速扩展&#xff0c;越来越多的开发者渴望深入了解并掌握这一前沿技术。本文旨在为鸿蒙开发新手提供一份详尽且实用的学习教程&#xff0c;助您从零开始&#xff0c;逐步迈向鸿蒙开发的巅峰。 一、鸿蒙开发环境搭建 DevEco Studio安装&#x…

C语言--- 指针运算笔试题详解

目录 题目1&#xff1a; 题目2&#xff1a; 题目3&#xff1a; 题目4&#xff1a; 题目5&#xff1a; 题目6&#xff1a; 题目7&#xff1a; 题目1&#xff1a; #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);print…

Open3D 利用四个点计算球心和半径 (28)

Open3D 利用四个点计算球心和半径 (28) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 给定的四个点坐标,计算球心和半径,提供验证的四个点来比较最终的结果是否准确。 二、算法实现 1.代码 代码如下(示例): import numpy as npdef calculate_sphere_center_…

课时61:流程控制_if条件控制_嵌套if实践

2.2.3 嵌套if实践 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 一个if语句仅仅能够针对一个场景的多种情况。当我们面对多场景的条件判断的时候&#xff0c;一个if结构语句无法满足需求&#xff0c;这个时候&#xff0c;我…

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

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

【AI】如何创建自己的自定义ChatGPT

如何创建自己的自定义ChatGPT 目录 如何创建自己的自定义ChatGPT大型语言模型(LLM)GPT模型ChatGPTOpenAI APILlamaIndexLangChain参考推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课本文将记录如何使用OpenAI GPT-3.5模型、LlamaIndex和LangChain创建自己的…

Grunt、Gulp 与 webpack:谁更胜一筹?

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

PWM驱动智能小车舵机运动

文章目录 一、硬件电路二、舵机初始化三、舵机控制 一、硬件电路 通过TIMER3的通道3提供PWM驱动电机 二、舵机初始化 初始化让舵机位于最左边&#xff0c;也就是0。 static int ServoInit(struct Servo *ptdev){if(NULL ptdev){LogDebug("ServoInit EINVAL \r\n&qu…

力扣题目训练(19)

2024年2月12日力扣题目训练 2024年2月12日力扣题目训练575. 分糖果589. N 叉树的前序遍历590. N 叉树的后序遍历275. H 指数 II279. 完全平方数132. 分割回文串 II 2024年2月12日力扣题目训练 2024年2月12日第十九天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;…

蓝桥杯刷题7

目录 1. 字母数 2. 列名 3. 大乘积 4. 最大连通 5. 星期几 1. 字母数 public class Main {public static void main(String[] args) {int num 2023;while(true) {String mInteger.toString(num,16);if(m.matches("^[a-f]$")){System.out.println(num);break;}n…

人生旅途:清理过往,规划未来,松弛前行

在人生的道路上&#xff0c;我们时常会遭遇各种障碍和挑战。这些障碍可能来自于外界环境的压力&#xff0c;也可能来自于内心的困惑和迷茫。然而&#xff0c;正是这些障碍和挑战&#xff0c;塑造了我们的性格&#xff0c;让我们变得更加坚强和成熟。当我们清理完上一段的障碍后…

数据治理实践——金融行业大数据治理的方向与实践

目录 一、证券数据治理服务化背景 1.1 金融数据治理发展趋势 1.2 证券行业数据治理建设背景 1.3 证券行业数据治理目标 1.4 证券行业数据治理痛点 二、证券数据治理服务化实践 2.1 国信证券数据治理建设框架 2.2 国信证券数据治理建设思路 2.3 数据模型管理 2.4 数据…

【数据分析】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 数据分析 目录&#xff1a; &#xff08;一&#xff09;数据分析介绍 &#xff08;二&#xff09;环境搭建 &#xff08;三&#xff09;matploatlib绘图 &#xff08;四&#xff09;numpy &…

VC#office ppt调用

1.打开VC#,建立控制台程序 2.引用MSOffice PPT引用 3. 主程序中引用ppt using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MSPPT Microsoft.Office.Interop.PowerPoint;//using WPSPPT PowerPoint;n…

美摄科技对抗网络数字人解决方案

在数字化浪潮的推动下&#xff0c;企业对于高效、创新且具备高度真实感的数字化解决方案的需求日益迫切。美摄科技凭借其在人工智能和计算机视觉领域的深厚积累&#xff0c;推出了一款全新的对抗网络数字人解决方案&#xff0c;该方案能够为企业构建出表情和动作都极为逼真的数…

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

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

20240309web前端_第一周作业_豆瓣电影

作业四&#xff1a;豆瓣电影 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0…

开发指南006-后端配置文件

后端配置文件分为两层&#xff0c;一是部署目录中的内容如下&#xff1a; 这里最重要的是端口号&#xff0c;同一个目录下可以是一个jar包多个配置文件&#xff0c;启动批处理中&#xff0c;按一个配置文件启动一个程序的方式启动多个服务。例如上面目录里的启动批处理文件可以…

【鸿蒙 HarmonyOS 4.0】通知

一、介绍 通知旨在让用户以合适的方式及时获得有用的新消息&#xff0c;帮助用户高效地处理任务。应用可以通过通知接口发送通知消息&#xff0c;用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用&#xff0c;通知主要有以下使用场景&#xff1a; 显示接…