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 复制代码

相关推荐
GeekZHR几秒前
C语言指针进阶补充6:动态内存管理、mem系列内存函数、复杂指针声明,一次补齐指针的“三大盲区“
java·c语言·算法·指针
.道阻且长.18 分钟前
8.LeetCode算法习题讲解--滑动窗口--长度最小的子数组
算法·leetcode·职场和发展
(❁´◡`❁)Jimmy(❁´◡`❁)25 分钟前
P1156 [USACO01OPEN] 垃圾陷阱
算法·动态规划
疯狂打码的少年40 分钟前
【数据结构】二叉排序树(BST)的定义与操作
数据结构·笔记·算法
lally.1 小时前
整数等差数列超图中的三个非微扰现象
算法
wabs6661 小时前
关于字符串【力扣541.反转字符串II的思考】
数据结构·算法·leetcode·字符串
土司大王1 小时前
LeetCode hot100——移动零
java·算法·leetcode
Tyler_TXZ2 小时前
C++C语言之——树
c语言·c++·算法·
hansang_IR2 小时前
【记录】「COCI 2024/2025」四道模拟赛/8.13
c++·算法
旖旎夜光2 小时前
LeetCode 30:串联所有单词的子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口