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

hot100练习-17

class Solution:def maxProfit(self, prices: List[int]) -> int:n = len(prices)f = [[0] * 2 for _ in range(n+2)]f[1][1] = -inffor i, e in enumerate(prices):f[i+2][0] = max(f[i+1][0], f[i+1][1]+e)f[i+2][1] = max(f[i+1][1], f[i][0]-e)return f[-1][0]

动态规划,转移方程:

f[i + 2][0] = max(f[i + 1][0], f[i + 1][1] + p)  # 不持有:保持 or 卖出
f[i + 2][1] = max(f[i + 1][1], f[i][0] - p)      # 持有:保持 or 买入(需隔一天)

class Solution:def findDuplicate(self, nums: List[int]) -> int:slow = fast = 0while True:fast = nums[fast]fast = nums[fast]slow = nums[slow]if fast == slow:breakans = 0while ans != slow:ans = nums[ans]slow = nums[slow]return ans
  1. ​检测环的存在​​:

    • 慢指针每次移动一步(slow = nums[slow])。

    • 快指针每次移动两步(fast = nums[nums[fast]])。

    • 如果存在环,快指针最终会追上慢指针,两者会在环内的某一点相遇。

  2. 找到环的入口(即重复的数字)​​:
    • 将一个指针(ptr)重置到起点(索引 0),另一个指针(slow)保持在相遇点。

    • 两个指针每次移动一步,直到它们相遇。相遇点就是环的入口,也就是重复的数字。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Codec:def serialize(self, root):if not root: return "[]"res = []queue = collections.deque()queue.append(root)while queue:node = queue.popleft()if node:res.append(str(node.val))queue.append(node.left)queue.append(node.right)else: res.append("null")return "[" + ",".join(res) + "]"def deserialize(self, data):if data == "[]": return vals = data[1:-1].split(',')i = 1queue = collections.deque()root = TreeNode(int(vals[0]))queue.append(root)while queue:node = queue.popleft()if vals[i] != "null":node.left = TreeNode(int(vals[i]))queue.append(node.left)i += 1if vals[i] != "null":node.right = TreeNode(int(vals[i]))queue.append(node.right)i += 1return root# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))

",".join(res)是 Python 中字符串的一个方法,它的作用是将一个列表(res)中的所有字符串元素用 ,连接起来,生成一个新的字符串

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

max(dp[i], dp[j] + 1)的意义​

dp[i]的当前值可能已经被之前的 j更新过(比如 j=0时更新了一次,j=1时又可能更新)。

我们需要确保 dp[i]始终是所有可能的 dp[j] + 1中的最大值。

class Solution:def removeInvalidParentheses(self, s: str) -> List[str]:ans = set()round_brackets = s.count("(") + s.count(")")path = []mx = -1n = len(s)def dfs(i, lopen, ropen, abandoned):nonlocal mxif round_brackets - abandoned < mx:returnif i == n:if lopen == ropen:if lopen + ropen > mx:mx = lopen + ropenans.clear()ans.add("".join(path))elif lopen + ropen == mx:ans.add("".join(path))returnif s[i] == '(':path.append("(")dfs(i+1, lopen+1, ropen, abandoned)path.pop()dfs(i+1, lopen, ropen, abandoned+1)elif s[i] == ')':if ropen < lopen:path.append(")")dfs(i+1, lopen, ropen+1, abandoned)path.pop()dfs(i+1, lopen, ropen, abandoned+1)else:path.append(s[i])dfs(i+1, lopen, ropen, abandoned)path.pop()dfs(0,0,0,0)return list(ans)

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

相关文章:

  • 光伏发电建模与性能分析:从半导体物理到输出功率预测
  • 浙江正规网站建设配件网站seo优化分析
  • 设计师赚钱的网站创新的常州做网站
  • vue3的props的使用
  • 【Trae+AI】和Trae学习搭建App_03:后端API开发原理与实践(已了解相关知识的可跳过)
  • List of Keys (Keyboard,Mouse and Controller)
  • 门户网站怎样做wordpress清新模板
  • 沈阳有资质做网站的公司公司自有网站工信备案
  • 园林设计公司网站昆山网站建设网站
  • 【Linux】systemd 服务管理详解
  • Python哪个Excel库最好用?
  • 瓦力机器人-编码电机控制(基于树莓派5)
  • dw做网站怎么上线大良用户网站建设
  • Node.js 进阶:掌握高性能服务器开发的核心技术
  • Elasticsearch 的 SQL 与 DSL 转换
  • 快速做网站的软件腾讯企业邮箱电脑版登录入口
  • API测试工具进化:从Postman到Apipost的全局参数管理革命
  • 数据结构——排序的超级详解(Java版)
  • C# 加密解密字符方法Cryptography
  • 教做详情页的网站关键词优化公司电话
  • 中企动力科技股份有限公司网站梵克雅宝官网官方网
  • 自己电脑做电影网站中国建设教育协会培训中心
  • 第三章、React项目国际化介绍(`react-i18next`)
  • RHCA - DO374 | Day03:通过自动化控制器运行剧本
  • 深圳微商城网站建设温州 网站开发
  • 何谓RSS
  • 【SpringCloud】Eureka
  • 网站后台尺寸一般做多大的如何把优酷视频放到网站上
  • 帝国建站模板淘宝网络营销案例分析
  • 企业选择内容+人工智能供应商应该考虑什么?​