当前位置: 首页 > 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=0
    ans=0
    for c in s:
        if c=='[':
            cur+=1
        else:
            cur-=1
        if cur<0:
            cur=1
            ans+=1
    return ans



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

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

def diagonalPrime(nums):
    """
    :type nums: List[List[int]]
    :rtype: int
    """
    import math
    def check(num):
        for i in range(2,int(math.sqrt(num)+1)):
            if num%i==0:
                return False
        return num>=2
    
    n=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 num
    return 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)+1
    
    ans=[[]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 deque
    from sortedcontainers import SortedList

    s=[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]*n
    l=deque()
    l.append(p)
    ans[p]=0
    while 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]+1
            l.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,0
    for x in nums:
        mult |= x&s
        s|=x
    
    ans = 0
    for 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 False
    mx,mn=0,0
    for b,l in zip(s,locked):
        if l=='1':
            v = 1 if b=='(' else -1
            mx+=v
            if mx<0:
                return False
            mn+=v
        else:
            mx+=1
            mn-=1
        if mn<0:
            mn=1
    return mn==0



相关文章:

  • 回顾Python基础语法,辨析和C++等的不同~
  • vulkanscenegraph显示倾斜模型(5.4)-相机操纵器
  • MCP(Model Context Protocol)好比大模型外挂!
  • 蓝桥杯C++基础算法-0-1背包
  • WEB PKI目前的问题
  • kotlin知识体系(三) : Android Kotlin 中的函数式编程实践指南
  • Docker学习笔记(十一)宿主机无法链接宿主机问题处理
  • UnoCSS极速入门:下一代原子化CSS引擎实战指南
  • 靶场(十五)---小白心得思路分析---LaVita
  • 【C++指针】搭建起程序与内存深度交互的桥梁(上)
  • Android LiveData 的 `setValue` 与 `postValue` 区别详解
  • Entity Framework框架
  • Crow:C++高性能微服务框架的深度探索
  • MyBatisPlus(SpringBoot版)学习第三讲:通用Service
  • 决策树基础
  • 代码随想录算法训练营第38天 | 322. 零钱兑换 279.完全平方数 139.单词拆分 背包问题总结
  • “跨越时代的技术进步:CPU缓存如何塑造了智能手机和智能家居的未来?
  • 【2025】基于ssm+jsp的二手商城系统设计与实现(源码、万字文档、图文修改、调试答疑)
  • go-zero学习笔记
  • 第39章:CSI插件开发与定制化存储需求
  • 五一期间全国高速日均流量6200万辆,同比增长8.1%
  • 新能源车盈利拐点:8家上市车企去年合计净利854亿元,多家扭亏
  • 七部门联合发布《终端设备直连卫星服务管理规定》
  • “80后”商洛市委副书记、市政府党组副书记赵孝任商洛市副市长
  • 习近平主持召开部分省区市“十五五”时期经济社会发展座谈会
  • 媒体:黑话烂梗包围小学生,“有话好好说”很难吗?