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

hot100练习-8

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

思路:先都初始化为False,如果前i个字符为True,而且i到j-1是在字典里面,就True,返回dp[-1]

class Solution:def singleNumber(self, nums: List[int]) -> int:ans = 0for num in nums:ans ^= numreturn ans

思路就是利用异或,不同整数的二进制不同,两个相同的二进制异或完就0,遍历数组异或下去,得到的结果就是只有一个的元素

class Solution:def countSubstrings(self, s: str) -> int:n = len(s)dp = [[False] * n for _ in range(n)]ans = 0for i in range(n - 1, -1, -1):for j in range(i, n):if s[i] == s[j]:if j - i <= 1:ans += 1dp[i][j] = Trueelif dp[i + 1][j - 1]:ans += 1dp[i][j] = Truereturn ans

子问题就是动态规划,dp[i][j]表示下标从i到j是否为回文子串,状态转移方程为如果i j下标的元素相等,就要看往里面缩一圈的字串是不是回文子串,注意i只能从右往左遍历(j是紧跟着i,从i开始,是从左往右的),因为如果i是从左往右遍历的话是不行的,因为[i+1]是没有计算的。

class Solution:def longestConsecutive(self, nums: List[int]) -> int:h = set(nums)ans = 0for num in h:if num - 1 in h:continuek = num + 1while k in h:k += 1# 最后一个连续的数字是k-1ans = max(ans, k - num)return ans

不能排序的,因为排序的时间复杂度是 O(nlogn),用哈希,将数组转换为哈希且遍历,如果当前的值-1在哈希里面,那么就不是连续序列的开头,就直接continue,找到开头之后,while循环一直找到连续序列的末尾,更新连续序列长度的最大值,返回即可。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def maxPathSum(self, root: Optional[TreeNode]) -> int:ans = -infdef dfs(node):if node is None:return 0left = dfs(node.left)right = dfs(node.right)nonlocal ansans = max(ans, left + right + node.val)return max(max(left , right) + node.val, 0)dfs(root)return ans

class Solution:def coinChange(self, coins: List[int], amount: int) -> int:m = len(coins)dp = [[inf] * (amount + 1) for _ in range(m + 1)]dp[0][0] = 0for i, c in enumerate(coins):for a in range(amount+1):if a < c:dp[i+1][a] = dp[i][a]else:dp[i+1][a] = min(dp[i][a], dp[i+1][a-c] + 1)ans = dp[m][amount]return ans if ans < inf else -1

dp[i][j]代表的是用前 i种硬币凑出金额j的最少硬币数量,如果当下金额小于当前硬币,则不能使用该硬币,如果不小于,则找(选择和不选择该硬币)的最小值,最后返回ans = dp[m][amount]

http://www.dtcms.com/a/485939.html

相关文章:

  • 手机网站设置在哪里找房产信息平台
  • 算法入门:专题二---滑动窗口(长度最小的子数组)更新中
  • 2025年存储市场报告深度解读
  • HTTP 413 状态码详解与前端处理,请求体过大
  • 大数据背景下时序数据库选型指南:国产开源技术的突破与实践
  • asp网站优化云南网站制作需求
  • k8s(六)Pod的资源控制器
  • TypeScript前端架构与开发技巧深度解析:从工程化到性能优化的完整实践
  • 郴州做网站网站建设公司ejiew
  • LeetCode 将数组和减半的最少操作次数
  • OpenHarmony南向开发环境搭建 - 深入理解Ubuntu、DevEco Device Tool与HPM
  • QT-day1
  • Spec-Kit+Copilot打造AI规格驱动开发
  • Linux服务器编程实践30-TCP交互数据流:Nagle算法与延迟确认的作用
  • MATLAB一个基于Attention-LSTM的分类模型,构建Attention-LSTM深度学习模型,训练模型并进行分类预测
  • 杭州网站建设朗诵面朝网站建设策划内容
  • 手机网站开发模板南昌网站设计建设
  • Playwright中page的实现类深度解析-PageImpl 方法作用解析
  • 【完整源码+数据集+部署教程】 【运动的&足球】足球场上球检测系统源码&数据集全套:改进yolo11-DGCST
  • 无用知识研究:如何用decltype里的逗号表达式判断一个类里面有operator <号,并在编译时优雅给出提示,而不是一大堆不相干的模板信息
  • 人类知识体系分类
  • Java 大视界 -- Java 大数据在智能政务数字身份认证与数据安全共享中的应用
  • 《Foundation 图标参考手册》
  • 从 “坑“ 到 “通“:Spring AOP 通知执行顺序深度解密
  • 博途SCL语言仿真七段数码管
  • 关于网站建设的介绍本地搭建wordpress建站教程
  • 免费网站收录网站推广苏州网站建设推荐q479185700霸屏
  • 【LeetCode热题100(43/100)】验证二叉搜索树
  • 养殖场疫病预警新方案:小吉快检BL-08plus现场快速锁定病原
  • 【ADS-1】【python基础-3】函数封装与面向对象