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

hot100-3

class Solution:def sortColors(self, nums: List[int]) -> None:p0 = p1 = 0for i, e in enumerate(nums):nums[i] = 2if e <= 1:nums[p1] = 1p1 += 1if e == 0:nums[p0] = 0p0 += 1

原地修改数组,就是先把当下的元素设为2,如果说之前的元素是<=1,那么把p1对应的元素设为1,因为这说明之前的元素是0或者1,而且p0<=p1,所以并不会多设置一个1,然后如果之前的元素==0,那么就把p0对应的元素设为0,p0和p1指的是0和1应该存在的位置

class Solution:def minDistance(self, word1: str, word2: str) -> int:m, n = len(word1), len(word2)f = [[0] * (n + 1) for _ in range(m + 1)]f[0] = list(range(n + 1))for i, x in enumerate(word1):f[i + 1][0] = i + 1for j, y in enumerate(word2):if x == y:f[i + 1][j + 1] = f[i][j]else:f[i + 1][j + 1] = min(f[i][j + 1], f[i + 1][j], f[i][j]) + 1return f[m][n]

以 word1 = "horse"word2 = "ros"为例:

第一行就是f[0] = list(range(n + 1))

第一列就是f[i + 1][0] = i + 1

这是初始化,然后判断关系,如果当下x,y相等,那么直接 f[i + 1][j + 1] = f[i][j],没有变化,反之不相等,就三种情况:删除、插入、替换,然后找三种的最小值即

f[i + 1][j + 1] = min(f[i][j + 1], f[i + 1][j], f[i][j]) + 1

然后返回f[m][n]即可

class Solution:def climbStairs(self, n: int) -> int:if n <= 1:return 1dp = [0] * (n + 1)dp[1] = 1dp[2] = 2for i in range(3, n + 1):dp[i] = dp[i - 1] + dp[i - 2]return dp[n]

首先进行特殊值判断

然后初始值:dp[1] = 1 dp[2] = 2

如何达到i台阶,也就是往下下一步或者两步,就是dp[i] = dp[i - 1] + dp[i - 2]

然后返回dp[n]

class Solution:def findUnsortedSubarray(self, nums: List[int]) -> int:n = len(nums)if n <= 1:return 0l, r = 0, n - 1while l < n - 1 and nums[l] <= nums[l + 1]:l += 1if l == n - 1:return 0while r > 0 and nums[r] >= nums[r - 1]:r -= 1min_val = min(nums[l:r+1])max_val = max(nums[l:r+1])while r < n - 1 and nums[r+1] < max_val:r += 1while l > 0 and nums[l-1] > min_val:l -= 1return r - l + 1

思路很简单,就是r和l先分别找出两端无序的地方,然后求中间的最大最小,进行左右扩圈

class Solution:def minWindow(self, s: str, t: str) -> str:cnt_s = Counter()cnt_t = Counter(t)ans_left, ans_right = -1, len(s)left = 0for right, e in enumerate(s):cnt_s[e] += 1while cnt_s >= cnt_t:if (right - left) < (ans_right - ans_left):ans_left, ans_right = left, rightcnt_s[s[left]] -= 1left += 1return "" if ans_left < 0 else s[ans_left: ans_right + 1]

关键点是用了 cnt_s = Counter() cnt_t = Counter(t),Counter的比较是逐个字符的计数比较。然后利用滑动窗口的方法:

进入: cnt_s[e] += 1 

更新:

if (right - left) < (ans_right - ans_left):

ans_left, ans_right = left, right

出去:

cnt_s[s[left]] -= 1

left += 1

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

相关文章:

  • 网站推广的措施和手段有哪些网站优化顺义案例
  • CompletableDeferred、defer 和 Job 关系
  • 呼市做引产z首大网站网站设计和建设ppt
  • 做面膜的网站如何才能做好品牌网站建设策划
  • 外贸社交网站排名网站搜不出来怎么办
  • 做影视网站规模不大洛阳网站建设哪个好点
  • 《投资-82》价值投资者的认知升级与交易规则重构 - 第二层:五大财务指标的定义、分析方法、误区
  • 做网站哪家强wordpress 不用插件代码高亮
  • string类的理解和使用
  • 做羞羞网站谷歌广告联盟怎么做
  • 网站规划建设与管理维护的论文软件推广
  • 备案的网站名称可以改吗pc网站怎么做适配
  • 用 AI 工具简化西瓜视频用户增长实操教程
  • 滁州市建设工程协会网站免费logo设计在线生成器钙网
  • 从winlogon!StateMachineWorkerCallback看ntdll!TpPostWork原理
  • Intel Loihi芯片的脉冲神经网络编程范式迁移
  • 个人博客网站源码网站子目录是什么
  • 网站开发用哪些字体wordpress响应+延时
  • 400网站建设地方门户网站用户
  • LangGraph 集成 MCP Server
  • 深度学习基础:从原理到实践——第一章感知机(下)
  • Python3 list()函数
  • 凡科建站的怎么取消手机网站厦门编程培训机构
  • 建站时长是什么原因造成的专业手机移动网站建设
  • 免费空间 个人网站 google广告联盟wordpress raw
  • 怎么做网站搜索引擎大连高新园区
  • 常州高端网站制作公司排名站长查询
  • 西宁做网站多少钱阜阳市城乡建设 档案馆网站
  • 基于PLC的饮料灌装系统
  • 北京模板建站网站飘动广告代码