LeetCode 每日一题 2024/6/24-2024/6/30

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • 6/24 503. 下一个更大元素 II
      • 6/25 2732. 找到矩阵中的好子集
      • 6/26 2741. 特别的排列
      • 6/27 2734. 执行子串操作后的字典序最小字符串
      • 6/28 2742. 给墙壁刷油漆
      • 6/29 2710. 移除字符串中的尾随零
      • 6/30 494. 目标和


6/24 503. 下一个更大元素 II

循环数组 拼接两个数组即可
单调栈保存下标 遇到栈顶小于当前值
则栈顶下标结果为当前值

def nextGreaterElements(nums):""":type nums: List[int]:rtype: List[int]"""n=len(nums)ans=[-1]*nst = []for i in range(2*n-1):while st and nums[st[-1]]<nums[i%n]:ans[st.pop()]=nums[i%n]st.append(i%n)return ans

6/25 2732. 找到矩阵中的好子集

将每一行看做一个二进制数
如果答案至少有一行 那么这一行都为0
如果答案至少两行 那么每一列最多一个1 这两行二进制and为0
如果答案至少3行 每一列最多为1 和两行相同
如果答案至少4行 每一列和不超过2
因为两行找不到答案说明任选两行至少存在一列这两行都为1 但其他两行必须为0
若要满足这个条件至少需要4列 但题目矩阵列数n<=5 所以不存在
只考虑答案为1行或2行的情况即可

def goodSubsetofBinaryMatrix(grid):""":type grid: List[List[int]]:rtype: List[int]"""m = {}for i,row in enumerate(grid):mask = 0for j,v in enumerate(row):mask |= v<<jif mask ==0:return [i]m[mask]=ifor x,i in m.items():for y,j in m.items():if (x&y)==0:return sorted([i,j])return []

6/26 2741. 特别的排列

长度<14 用一个最长14位的二进制数s 描述当前可以用的数值位置
dfs(s,i) 搜索当前集合s的情况下 选取i位置的数值放在当前位置的情况

def specialPerm(nums):""":type nums: List[int]:rtype: int"""MOD=10**9+7mem={}def dfs(s,i):if (s,i) in mem:return mem[(s,i)]if s==0:return 1res = 0pre = nums[i]for j,x in enumerate(nums):if s>>j &1 and(pre%x==0 or x%pre==0):res = (res+dfs(s^(1<<j),j))%MODmem[(s,i)]=resreturn resn = len(nums)ans = 0u = (1<<n)-1for i in  range(n):ans = (ans+dfs(u^(1<<i),i))%MODreturn ans

6/27 2734. 执行子串操作后的字典序最小字符串

除了a 别的字符执行都会变小 所以从左到右遇到第一个非a字符开始执行操作
遇到a停止操作
如果全是a 则将最后一个操作一次为 z

def smallestString(s):""":type s: str:rtype: str"""l=list(s)for i,c in enumerate(l):if c=='a':continuefor j in range(i,len(l)):if l[j]=='a':breakl[j]=chr(ord(l[j])-1)return ''.join(l)l[-1]='z'return ''.join(l)

6/28 2742. 给墙壁刷油漆

dp[i,j]表示前i面墙 免费工作次数为j的最小开销
对于第i堵墙
如果付费将花费cost[i] 并且获得time[i]次免费油漆匠工作机会
如果免费 将减少1次免费工作机会
j最多可以为n 最小为-n
使用0~2n来代替
因为依次判断i 所以dp[i,j]只会影响dp[i+1,x]
所以只需要一维dp[j]即可

def paintWalls(cost, time):""":type cost: List[int]:type time: List[int]:rtype: int"""n= len(cost)dp=[float('inf')]*(2*n+1)dp[n]=0for (c,t) in zip(cost,time):g=[float('inf')]*(2*n+1)for j in range(2*n+1):g[min(j+t,2*n)]=min(g[min(j+t,2*n)],dp[j]+c)if j>0:g[j-1]=min(g[j-1],dp[j])dp=greturn min(dp[n:])

6/29 2710. 移除字符串中的尾随零

从后往前判断 如果遇到0则往前一步

def removeTrailingZeros(num):""":type num: str:rtype: str"""for i in range(len(num)):if num[-1-i]!='0':breakreturn num if i==0 else num[:-i]

6/30 494. 目标和

1.dp 动态规划
dp[i][value] 前i个数 答案为value的可能情况
因为-1000<=value<=1000
方便起见 全部加1000 => 0<=value<=2000
v为当前位置数值 j为当前考虑value值
dp[i][j] = dp[i-1][j-v] + dp[i-1][j+v]
2.dp 动态规划
总和为total 变负数的总和绝对值为neg 正数总和total-neg target=total-2*neg
转化为neg = (total-target)/2 选取若干个数 总和为neg
dp[i][j] 前i个数 总和可以为j的可能方式
num = nums[i]
dp[i+1][j] = dp[i][j]+dp[i][j-num]

def findTargetSumWays(nums, target):""":type nums: List[int]:type target: int:rtype: int"""total = sum(nums)if target>total or target<-total:return 0n = len(nums)m = 2001dp = [[0]*m for _ in range(n+1)]dp[0][nums[0]+1000]+=1dp[0][1000-nums[0]]+=1for i in range(1,n):v = nums[i]for j in range(m):if j-v>=0 and dp[i-1][j-v]>0:dp[i][j] += dp[i-1][j-v]if j+v<m and dp[i-1][j+v]>0:dp[i][j]+=dp[i-1][j+v]return dp[n-1][target+1000]def findTargetSumWays2(nums, target):""":type nums: List[int]:type target: int:rtype: int"""            diff = sum(nums) - targetif diff<0 or diff%2==1:return 0n = len(nums)neg = diff//2dp = [[0]*(neg+1) for _ in range(n+1)]dp[0][0]=1for i in range(n):num = nums[i]for j in range(neg+1):dp[i+1][j]=dp[i][j]if j>=num:dp[i+1][j] += dp[i][j-num]return dp[n][neg]

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

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

相关文章

【机器学习】Python sorted 函数

目录&#xff1a; 什么是sorted()函数列表降序排序应用到字符串自定义排序规则实际应用 Python中的内置函数——sorted()。 1. 什么是sorted()函数 在Python中&#xff0c;sorted()是一个内置函数&#xff0c;用于对任何可迭代对象&#xff08;如列表、元组、字符串等&…

macos scroll direction

If there is no Trackpad option, we can change it in the Mouse option. How to Change the Scroll Direction on a Mac: 2 Ways

AliyunOS安装Node.js

方法1&#xff1a;dnf软件包安装工具自动安装 最方便的安装方式是通过系统的dnf工具&#xff0c;我测试使用的AliyunOS的版本是Alibaba Cloud Linux 3.2104&#xff0c;具体流程如下&#xff1a; dnf module list nodejs #列出服务器中可以使用的所有nodejs版本确定下来希望安…

【折腾手机】一加6T刷机postmarketOS经历和体验

写在前面 到目前为止&#xff0c;我已经花了非常多的时间去学习和了解x86架构和RISC-V架构&#xff0c;对它们的指令集编程、指令格式的设计、编译套件的使用都亲自去体会和实践过&#xff0c;学到了很多的东西。但是对于离我们最近的arm架构却了解甚少。为什么说离我们最近呢…

2095.删除链表的中间节点

给你一个链表的头节点 head 。删除链表的中间节点 &#xff0c;并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…

网络==>总论v4

既然是写ICT方面的文章&#xff0c;就要不断更新版本&#xff0c;不是文学&#xff0c;可以一劳永逸&#xff0c;如果不更新&#xff0c;看十年前或者二十年前的书意义不大&#xff0c;这就是为啥看到很多编程书都更新到第十几版了&#xff0c;因为要与时俱进。 在去一个地方旅…

51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器

本章重点讲解将TIM0用作两个8位定时器&#xff0c;同时将TIM1用作波特率发生器。 当定时器T0在方式3时&#xff0c;T1不能产生中断&#xff0c;但可以正常工作在方式0、1、2下&#xff0c;大多数情况下&#xff0c;T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…

第22集《大乘起信论》

请大家打开《讲义》第四十四页&#xff1a; 癸二、显示用 子一、正明用即真如 前面讲到一心的体大跟相大&#xff0c;讲到真如门&#xff1b;这以下讲到用&#xff0c;这当中分三科&#xff0c;先看子一、正明用即真如。这个体大跟相大它是真如门&#xff0c;是一个非因缘所…

Webpack: 核心配置结构

概述 Webpack 是一种 「配置」 驱动的构建工具&#xff0c;所以站在应用的角度&#xff0c;必须深入学习 Webpack 的各项配置规则&#xff0c;才能灵活应对各种构建需求。本文将作为小册应用系列的一个总结&#xff0c;汇总与应用配置相关的各项知识点&#xff0c;包括&#x…

高并发场景下的热点key问题探析与应对策略

目录 一、问题描述 二、发现机制 三、解决策略分析 &#xff08;一&#xff09;解决策略一&#xff1a;多级缓存策略 客户端本地缓存 代理节点本地缓存 &#xff08;二&#xff09;解决策略二&#xff1a;多副本策略 &#xff08;三&#xff09;解决策略三&#xff1a;热点…

XJTUSE-数据结构-homework1

任务 1 题目&#xff1a; 排序算法设计&#xff1a; 需要写Selection、Shell、Quicksort 和 Mergesort四种排序算法&#xff0c;书上讲述比较全面而且不需要进行额外的优化&#xff0c;下面我简要地按照自己的理解讲述。 Selection&#xff08;选择排序&#xff09;&#xff…

vtk学习笔记

tfun和gradtfun的区别 在体绘制&#xff08;Volume Rendering&#xff09;中&#xff0c;vtk.vtkPiecewiseFunction 通常用于定义两种类型的不透明度映射&#xff1a;标量不透明度映射和梯度不透明度映射。虽然这两个函数都使用 vtk.vtkPiecewiseFunction 来创建&#xff0c;但…

【孙子兵法】始计篇 - 原文注解笔记 ① ( 五事 - 道、天、地、将、法 )

文章目录 一、始计篇 原文注解笔记1、兵者&#xff0c;国之大事2、五事道天地将法 一、始计篇 原文注解笔记 1、兵者&#xff0c;国之大事 孙子曰&#xff1a;兵者&#xff0c;国之大事&#xff0c;死生之地&#xff0c;存亡之道&#xff0c;不可不察也。 孙子说 : 战争 , 是国…

Git上传大文件时各种报错解决方案汇总

如何通过LFS向Github添加大文件 https://zhuanlan.zhihu.com/p/699750305&#xff08;测试失败&#xff09; Configuring Git Large File Storage - GitHub Docs HTTP 400 curl 22 The requested URL returned error: 400 send-pack: unexpected disconnect while reading si…

Django ORM 中过滤 JSON 数据

简介 首先,我们假设您有一个名为 MyModel 的 Django 模型,它包含一个 JSONField 类型的字段,名为 data。这个 data 字段可以存储各种 JSON 格式的数据。 过滤 JSON 字段中的键值对 您可以使用双下划线 __ 语法来访问 JSON 字段中的嵌套键值对。例如: # 过滤 data 字段中 &qu…

瓦努阿图将出台数字资产监管法案

亲爱的国民&#xff0c;你们好&#xff01; “瓦努阿图即将在数字资产领域迎来突破性转型&#xff0c;全世界的加密爱好者准备好迎接一波激动人心的信仰充值。” 对&#xff0c;就是它&#xff01;比特币定为国家法定货币&#xff0c;央行开发数字货币钱包&#xff0c;总统新…

关于Redisson分布式锁的用法

关于Redisson分布式锁的用法 Redisson是一个基于Redis的Java分布式对象和服务框架&#xff0c;它提供了多种分布式锁的实现&#xff0c;包括可重入锁、公平锁、读写锁等。Redisson实现分布式锁的核心原理主要依赖于Redis的数据结构和Redisson框架提供的高级功能。以下详细讲解…

深度学习11-20

1.神经元的个数对结果的影响&#xff1a; &#xff08;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&#xff09; &#xff08;1&#xff09;神经元3个的时候 &#xff08;2&#xff09;神经元是10个的时候 神经元个数越多&#xff0c;可能会产生…

langchain报错

ImportError: cannot import name ‘BaseModel’ from ‘langchain_core.pydantic_v1’ (/Users/sunwenjun/anaconda3/envs/python310/lib/python3.10/site-packages/langchain_core/pydantic_v1/init.py) pip install -U pydantic pip install -qU langchain-openai

第3章-数据类型和运算符

#本章目标 掌握Python中的保留字与标识符 理解Python中变量的定义及使用 掌握Python中基本数据类型 掌握数据类型之间的相互转换 掌握eval()函数的使用 了解不同的进制数 掌握Python中常用的运算符及优先级1&#xff0c;保留字与标识符 保留字 指在Python中被赋予特定意义的一…