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. 元素和小于等于阈值的正方形的最大边长

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

s[i][j]记录左上角为(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中 (nums[i]+nums[i+1],i)

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

ind为剩余坐标

合并i,nxt 相当于nums[i]+=nums[nxt] 并删除nxt

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

如果nums[i]>nums[nxt] 那么dec-1

删除前如果nums[pre]>nums[i] dec-1

删除后如果nums[pre]>nums[i]+nums[nxt] dec+1

删除前如果nums[nxt]>nums[nxt2] dec-1

删除后如果nums[i]+nums[nxt]>nums[nxt2] 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 复制代码

相关推荐
小O的算法实验室21 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ01 天前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法