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

LeetCode 每日一题 2025/3/17-2025/3/23

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


目录

      • 3/17 1963. 使字符串平衡的最小交换次数
      • 3/18 2614. 对角线上的质数
      • 3/19 2610. 转换二维数组
      • 3/20 2612. 最少翻转操作数
      • 3/21 2680. 最大或值
      • 3/22 2643. 一最多的行
      • 3/23 2116. 判断一个括号字符串是否有效


3/17 1963. 使字符串平衡的最小交换次数

从左到右 遍历[个数与]要一一匹配
cur记录当前[个数 如果是负数了 说明需要交换一次 这次]变成[

def minSwaps(s):""":type s: str:rtype: int"""cur=0ans=0for c in s:if c=='[':cur+=1else:cur-=1if cur<0:cur=1ans+=1return ans

3/18 2614. 对角线上的质数

取出对角线的所有数 从大到小依次判断

def diagonalPrime(nums):""":type nums: List[List[int]]:rtype: int"""import mathdef check(num):for i in range(2,int(math.sqrt(num)+1)):if num%i==0:return Falsereturn num>=2n=len(nums)l = [nums[i][i] for i in range(n)]+[nums[i][n-1-i] for i in range(n)]l.sort(reverse=True)for num in l:if check(num):return numreturn 0

3/19 2610. 转换二维数组

统计每个数出现的次数
找到最大值就是答案内的数组个数
每个数都在次数个数组中出现

def findMatrix(nums):""":type nums: List[int]:rtype: List[List[int]]"""m={}for num in nums:m[num]=m.get(num,0)+1ans=[[]for _ in range(max(m.values()))]for k in m.keys():for i in range(m[k]):ans[i].append(k)return ans

3/20 2612. 最少翻转操作数

广搜 判断每一个能够到达的位置
对于位置i 能够到达的位置为max(i-k+1,k-i-1),min(i+k-1,2*n-k-i-1)
s中为按奇偶分的需要考虑的位置

def minReverseOperations(n, p, banned, k):""":type n: int:type p: int:type banned: List[int]:type k: int:rtype: List[int]"""from collections import dequefrom sortedcontainers import SortedLists=[SortedList(),SortedList()]ban=set(banned)for i in range(n):if i!=p and i not in ban:s[i%2].add(i)ans=[-1]*nl=deque()l.append(p)ans[p]=0while l:i=l.popleft()ml=max(i-k+1,k-i-1)mr=min(i+k-1,2*n-k-i-1)tset=s[mr%2]nxt=[]for v in tset.irange(ml,mr):ans[v]=ans[i]+1l.append(v)nxt.append(v)for v in nxt:tset.remove(v)return ans

3/21 2680. 最大或值

只对一个最高位的数进行k次操作最大
s为所有值的或值
mult 为某个位置出现两次及以上1的值
对于某个x的值 s异或x后与mult相或 即为出去x的其他所有数相或的值

def maximumOr(nums, k):""":type nums: List[int]:type k: int:rtype: int"""s,mult=0,0for x in nums:mult |= x&ss|=xans = 0for x in nums:ans=max(ans,(s^x)|(mult)|(x<<k))return ans

3/22 2643. 一最多的行

数值只有1和0 对每一行求和 和最大就是1最多

def rowAndMaximumOnes(self, mat):""":type mat: List[List[int]]:rtype: List[int]"""ans=[0,0]for i in range(len(mat)):v=sum(mat[i])if v>ans[1]:ans=[i,v]return ans

3/23 2116. 判断一个括号字符串是否有效

记录状态值v
左括号+1 右括号-1
mx,mn分别为v可能的最大值最小值
如果最后最小值可以取到0 说明可以满足

def canBeValid(s, locked):""":type s: str:type locked: str:rtype: bool"""if len(s)%2:return Falsemx,mn=0,0for b,l in zip(s,locked):if l=='1':v = 1 if b=='(' else -1mx+=vif mx<0:return Falsemn+=velse:mx+=1mn-=1if mn<0:mn=1return mn==0


http://www.mrgr.cn/news/95549.html

相关文章:

  • How to install samba on Linux mint 22.1
  • 数据库练习2
  • JVM垃圾回收笔记02-垃圾回收器
  • 论文阅读笔记:Denoising Diffusion Probabilistic Models (2)
  • 【记录一下】LMDeploy学习笔记及遇到的问题
  • 【算法】常见dp、多状态dp、背包问题、子序列问题
  • 蓝桥杯 劲舞团
  • 给语言模型增加知识逻辑校验智能,识别网络信息增量的垃圾模式
  • 大数据环境搭建
  • 关于网络的一点知识(持续更新)
  • LangChain Chat Model学习笔记
  • windows清除电脑开机密码,可保留原本的系统和资料,不重装系统
  • python-selenium 爬虫 由易到难
  • 用 pytorch 从零开始创建大语言模型(零):汇总
  • Ubuntu实时读取音乐软件的音频流
  • ‘闭包‘, ‘装饰器‘及其应用场景
  • (四)---四元数的基础知识-(定义)-(乘法)-(逆)-(退化到二维复平面)-(四元数乘法的导数)
  • 链表题型-链表操作-JS
  • ffmpeg介绍(一)——解封装
  • pycharm快捷键汇总(持续更新)