【力扣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):  # 遍历结束指针ifor j in range(i):          # 遍历开始指针jif 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  # 结果先取1for i in range(1, n):for j in range(i):if nums[i] > nums[j]:  # 只要比前面的递增,子串长度+1dp[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 = 0for 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 0dp = [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# )),先看前一个)匹配多长,再看后一个)能否匹配上(,可以的话就+2elif 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]以前为0dp[i] = dp[i-1] + last + 2  # 前一个)匹配的长度 + 后一个)找到(之前已经匹配的长度 + 2res = max(res, dp[i])  # 更新最大值,没有以上情况dp[i]就是0return res

后言

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

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

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

相关文章

elementui el-select组件多选设置初始值无法修改问题

elementui el-select组件多选设置初始值无法修改问题 对list直接赋值后点击修改select框&#xff0c;此时数据已改变但显示无变化。 <el-select v-model"form.optrList" multiple placeholder"请选择"><el-optionv-for"item in list":k…

APK漏洞扫描工具

一、APKDeepLens是一个基于python的工具&#xff0c;旨在扫描Android应用程序&#xff0c;专门针对OWASP TOP 10移动漏洞。 工具&#xff1a;python3.8或者以上版本 安装 git clone https://github.com/d78ui98/APKDeepLens/tree/main cd /APKDeepLens python3 -m venv venv…

Node携手MongoDB探险旅行⛏️

Node携手MongoDB探险旅行⛏️ 本篇文章&#xff0c;学习记录于&#xff1a;尚硅谷&#x1f3a2; 文章简单学习总结&#xff1a;如有错误 大佬 &#x1f449;点. 本篇不适合纯新手&#xff0c;因为本人已经使用很多数据库&#xff0c;很多数据库概念…就不会进行解释&#xff…

presto / trino plugin(自定义UDF函数)开发指南

方案1:自定义udf插件开发 1. Presto插件机制 presto不能像hive那样配置自定义的udf,而是采用插件机制实现。Presto 的插件(Plugin)机制,是 Presto 能够整合多种数据源的核心。通过实现不同的 Plugin,Presto 允许用户在不同类型的数据源之间进行 JOIN 等计算。Presto 内部的…

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的&#xff0c;外观模式&#xff08;门面模式&#xff09;是一种结构型设计模式。它提供一个统一的接口&#xff0c;用于访问子系统中的一组接口&#xff0c;隐藏了系统的复杂性。最简单的应用就是&#xff0c;当controller层的逻辑处…

每天一个数据分析题(二百零五)

在分类模型评估中&#xff0c;哪些描述准确地涉及到ROC曲线和混淆矩阵的概念&#xff1f; A. ROC曲线是根据模型预测的概率值而非预测的类别来绘制的。 B. ROC曲线下面积&#xff08;AUC&#xff09;的值越大&#xff0c;表示模型的区分能力越强。 C. 混淆矩阵中的真正&…

十大Linux发行版各自的特色

Linux有许多不同的发行版&#xff0c;每个发行版都有自己的特色和用途。以下是一些主流Linux发行版及其特色&#xff1a; Ubuntu 用户友好&#xff0c;适合Linux新手。 基于Debian&#xff0c;拥有庞大的软件库。 长期支持&#xff08;LTS&#xff09;版本提供长达5年的支持…

C#实现二分查找算法

C#实现二分查找算法 以下是一个使用 C# 实现的二分查找算法示例&#xff1a; using System;class Program {static int BinarySearch(int[] arr, int target){int low 0;int high arr.Length - 1;while (low < high){int mid (low high) / 2;// 如果目标值等于中间元素…

使用 Array.prototype.with 更新不可变数组

庆祝&#xff1a;此功能现已在所有三个主要浏览器引擎中可用&#xff01; 浏览器最近获得了一种新的可互操作方法&#xff0c;您可以在数组上调用它&#xff1a;Array.prototype.with() 。 Browser Support 浏览器支持&#xff1a; chrome 110Edge 110firefox 115Safari 16 …

doris安装(docker方式)

背景 doris有两个进程 fe,处理用户请求,查询,元数据管理,节点管理be,数据存储,查询计划执行 架构图如下: 参考:https://doris.apache.org/zh-CN/docs/get-starting/what-is-apache-doris 1、定义docker-compose文件 version: 3 services:docker-fe:image: "apac…

MySQL数据库自动备份(Linux操作系统)

方式一 参考&#xff1a;https://blog.csdn.net/qq_48157004/article/details/126683610?spm1001.2014.3001.5506 1.MySQL备份脚本 在/home/backups/下建立.sh文件&#xff0c;文件名称 mysql_backup.sh ,内容如下 #!/bin/bash #备份路径 BACKUP/home/backups/mysqlBackup…

Python实战:元组一次性数据的处理利器

Python元组是一种不可变的序列类型&#xff0c;非常适合用于存储不应该被修改的数据。本文将深入探讨Python元组在处理一次性数据方面的优势和应用场景&#xff0c;包括元组的定义、操作、函数和方法&#xff0c;以及如何利用元组提高代码的可读性和性能。 1. Python元组简介 …

快手,得物,蓝月亮,蓝禾,奇安信,三七互娱,顺丰,康冠科技,金证科技24春招内推

快手&#xff0c;得物&#xff0c;蓝月亮&#xff0c;蓝禾&#xff0c;奇安信&#xff0c;三七互娱&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;供应链&#xff0c;风控&#xff0c;产品&#xff0c;…

参考线平滑 - FemPosDeviation算法

FemPosDeviation参考线平滑方法是离散点平滑方法 参考文章&#xff1a; &#xff08;1&#xff09;参考线平滑-FemPosDeviation-OSQP &#xff08;2&#xff09;Planning基础库——散点曲线平滑 &#xff08;3&#xff09;参考线平滑-FemPosDeviation-SQP &#xff08;4&#x…

ICCV 2023 | NeRF-Det

NeRF-Det: Learning Geometry-Aware Volumetric Representation for Multi-View 3D Object Detection 介绍 本文介绍了一种新颖的方法&#xff0c;用于仅使用RGB图像作为输入进行室内3D目标检测。作者提出了利用神经辐射场&#xff08;NeRF&#xff09;来显式估计3D几何形状&…

C# 协程的使用

C# 中的协程是通过使用 yield 关键字来实现的&#xff0c;它们允许在方法的执行中暂停和继续。协程通常用于处理异步操作、迭代和状态机等情况。以下是关于C#协程的介绍、使用场景以及优缺点的概述&#xff1a; 介绍&#xff1a; 在 C# 中&#xff0c;协程是通过使用 yield 语…

OCP Java17 SE Developers 复习题09

答案 A, E. For the first scenario, the answer needs to implement List because the scenario allows duplicates, narrowing it down to options A and D. Option A is a better answer than option D because LinkedList is both a List and a Queue, and you just nee…

动态规划 Leetcode 96 不同的二叉搜索树

不同的二叉搜索树 Leetcode 96 学习记录自代码随想录 要点&#xff1a;1.递推公式&#xff0c;想到以根节点数字不同作为分类条件求和得到dp[i]&#xff1b; class Solution { public:int numTrees(int n) {if(n 1 || n 2) return n;// 1.dp[i]返回输入i时的满足条件的二…

代码随想录 贪心算法-难度题目-其他题目

目录 53.最大子数组和 134.加油站 968.监控二叉树 53.最大子数组和 53. 最大子数组和 中等 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个…

git提交代码描述时如何换行(更新时间24/3/12)

问题复现&#xff08;信心满满使用转义字符换行&#xff09; 解决方法&#xff1a; 写多个-m字符串的结构可以实现自动换行 注意空格 git commit -m"第一行描述" -m"第二行描述" 效果演示&#xff1a;&#xff08;强迫症福利&#xff09;