LeetCode 每日一题 2026/1/19-2026/1/25

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


目录

      • [1/191292. 元素和小于等于阈值的正方形的最大边长](#1/191292. 元素和小于等于阈值的正方形的最大边长)
      • [1/20 3314. 构造最小位运算数组 I](#1/20 3314. 构造最小位运算数组 I)
      • [1/21 3315. 构造最小位运算数组 II](#1/21 3315. 构造最小位运算数组 II)
      • [1/22 3507. 移除最小数对使数组有序 I](#1/22 3507. 移除最小数对使数组有序 I)
      • [1/23 3510. 移除最小数对使数组有序 II](#1/23 3510. 移除最小数对使数组有序 II)
      • 1/24
      • 1/25

1/191292. 元素和小于等于阈值的正方形的最大边长

枚举正方形左上角 以及边长

sij记录左上角为(0,0)右下角为(i,j)的矩形内数字和

python 复制代码
def maxSideLength(mat, threshold):
    """
    :type mat: List[List[int]]
    :type threshold: int
    :rtype: int
    """
    m,n=len(mat),len(mat[0])
    s=[[0]*(n+1) for _ in range(m+1)]
    for i,row in enumerate(mat):
        for j,x in enumerate(row):
            s[i+1][j+1]=s[i+1][j]+s[i][j+1]-s[i][j]+x
    
    def check(r1,c1,r2,c2):
        return s[r2+1][c2+1]-s[r2+1][c1]-s[r1][c2+1]+s[r1][c1]
    
    ans=0
    for i in range(m):
        for j in range(n):
            while i+ans<m and j+ans<n and check(i,j,i+ans,j+ans)<=threshold:
                ans+=1
    return ans

1/20 3314. 构造最小位运算数组 I

奇数可以构造

对于一个1xxxx01111的数 想让答案最小

将从低位到高位连续个1的最高位1变为0即可

对于xxx00111 加上1可以进一位 xxx01000 两数相或 可以得到 01111

python 复制代码
def minBitwiseArray(nums):
    """
    :type nums: List[int]
    :rtype: List[int]
    """
    n=len(nums)
    for i in range(n):
        ans=-1
        d=1
        while (nums[i]&d)!=0:
            ans=nums[i]-d
            d<<=1
        nums[i]=ans
    return nums

1/21 3315. 构造最小位运算数组 II

奇数可以构造

对于一个1xxxx01111的数 想让答案最小

将从低位到高位连续个1的最高位1变为0即可

对于xxx00111 加上1可以进一位 xxx01000 两数相或 可以得到 01111

python 复制代码
def minBitwiseArray(nums):
    """
    :type nums: List[int]
    :rtype: List[int]
    """
    n=len(nums)
    for i in range(n):
        ans=-1
        d=1
        while (nums[i]&d)!=0:
            ans=nums[i]-d
            d<<=1
        nums[i]=ans
    return nums

1/22 3507. 移除最小数对使数组有序 I

模拟 遍历数组记录两两相加的最小值mins 和位置ind

check记录是否是非递减数组

python 复制代码
def minimumPairRemoval(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    cnt=0
    
    while len(nums)>1:
        check=True
        mins=float("inf")
        ind=-1
        
        for i in range(len(nums)-1):
            s = nums[i]+nums[i+1]
            
            if nums[i]>nums[i+1]:
                check=False
            if s<mins:
                mins=s
                ind=i
        if check:
            break
        cnt+=1
        nums[ind]=mins
        nums.pop(ind+1)
    return cnt

1/23 3510. 移除最小数对使数组有序 II

将两两相加的和放入有序队列sl中 (numsi+numsi+1,i)

dec记录当前队列非递减的个数

ind为剩余坐标

合并i,nxt 相当于numsi+=numsnxt 并删除nxt

dec的变化为pre,i,nxt,nxt2四个位置情况决定

如果numsi>numsnxt 那么dec-1

删除前如果numspre>numsi dec-1

删除后如果numspre>numsi+numsnxt dec+1

删除前如果numsnxt>numsnxt2 dec-1

删除后如果numsi+numsnxt>numsnxt2 dec+1

python 复制代码
def minimumPairRemoval(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    from sortedcontainers import SortedList
    n=len(nums)
    dec=0
    sl=SortedList()
    ind=SortedList(range(n))
    
    for i in range(n-1):
        if nums[i]>nums[i+1]:
            dec+=1
        sl.add((nums[i]+nums[i+1],i))
    
    ans = 0
    while dec>0:
        ans+=1
        
        s,i=sl.pop(0)
        k=ind.bisect_left(i)
        
        nxt=ind[k+1]
        if nums[i]>nums[nxt]:
            dec-=1
        if k>0:
            pre=ind[k-1]
            if nums[pre]>nums[i]:
                dec-=1
            if nums[pre]>s:
                dec+=1
            sl.remove((nums[pre]+nums[i],pre))
            sl.add((nums[pre]+s,pre))
        if k+2<len(ind):
            nxt2=ind[k+2]
            if nums[nxt]>nums[nxt2]:
                dec-=1
            if s>nums[nxt2]:
                dec+=1
            sl.remove((nums[nxt]+nums[nxt2],nxt))
            sl.add((s+nums[nxt2],i))
        nums[i]=s
        ind.remove(nxt)
    return ans

1/24

python 复制代码

1/25

python 复制代码

相关推荐
变量未定义~4 分钟前
最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)
算法
这就是佬们吗7 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
LONGZETECH14 分钟前
新能源汽车充电设备装配与调试仿真教学软件 技术架构与核心实现解析
大数据·算法·3d·unity·架构·汽车
自学小白菜16 分钟前
关于提升机器学习算法做预测回归任务精度的方法分享
算法·机器学习·回归·提升精度
学废了wuwu25 分钟前
从入门到实战:深入浅出模型压缩三大核心——剪枝、彩票假设与知识蒸馏
人工智能·算法·剪枝
小肝一下35 分钟前
3. 单链表
c语言·数据结构·c++·算法·leetcode·链表·dijkstra
劈星斩月42 分钟前
监督学习算法 之 决策树
学习·算法·决策树
学计算机的计算基1 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
To_OC9 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode