LeetCode 每日一题 2025/6/16-2025/6/22

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


目录

      • [6/16 2016. 增量元素之间的最大差值](#6/16 2016. 增量元素之间的最大差值)
      • [6/17 3405. 统计恰好有 K 个相等相邻元素的数组数目](#6/17 3405. 统计恰好有 K 个相等相邻元素的数组数目)
      • [6/18 2966. 划分数组并满足最大差限制](#6/18 2966. 划分数组并满足最大差限制)
      • [6/19 2294. 划分数组使最大差为 K](#6/19 2294. 划分数组使最大差为 K)
      • [6/20 3443. K 次修改后的最大曼哈顿距离](#6/20 3443. K 次修改后的最大曼哈顿距离)
      • [6/21 3085. 成为 K 特殊字符串需要删除的最少字符数](#6/21 3085. 成为 K 特殊字符串需要删除的最少字符数)
      • [6/22 2138. 将字符串拆分为若干长度为 k 的组](#6/22 2138. 将字符串拆分为若干长度为 k 的组)

6/16 2016. 增量元素之间的最大差值

为了使差值最大 尽量使得numsi

从左到右 使用minv 记录当前位置之前的最小值

python 复制代码
def maximumDifference(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    ans = -1
    minv = nums[0]
    for j in range(1,len(nums)):
        if nums[j]>minv:
            ans=max(ans,nums[j]-minv)
        minv=min(minv,nums[j])
    return ans

6/17 3405. 统计恰好有 K 个相等相邻元素的数组数目

k对相邻元素相同 n-1-k对相邻元素不同

不同的可以看作分割线 得到n-k段子数组

C(n-1,k)m(m-1)^(n-k-1)

python 复制代码
def countGoodArrays(n, m, k):
    """
    :type n: int
    :type m: int
    :type k: int
    :rtype: int
    """
    MOD=10**9+7
    MX=10**5
    f=[0]*MX
    invf=[0]*MX
    
    f[0]=1
    for i in range(1,MX):
        f[i]=f[i-1]*i%MOD
    invf[MX-1]=pow(f[-1], -1,MOD)
    for i in range(MX-1,0,-1):
        invf[i-1]=invf[i]*i%MOD
    def comb(n,m):
        return f[n]*invf[m]*invf[n-m]%MOD
    return comb(n-1,k)*m*pow(m-1, n-1-k,MOD)%MOD
    

6/18 2966. 划分数组并满足最大差限制

排序后 依次分组必定是差值最小的

python 复制代码
def divideArray(nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: List[List[int]]
    """
    nums.sort()
    ans = []
    for i in range(0,len(nums),3):
        if nums[i+2]-nums[i]>k:
            return []
        ans.append(nums[i:i+3])
    return ans

6/19 2294. 划分数组使最大差为 K

从小到大排列 尽可能排进同一个序列

python 复制代码
def partitionArray(nums, k):
    """
    :type nums: List[int]
    :type k: int
    :rtype: int
    """
    nums.sort()
    ans=1
    cur=nums[0]
    for num in nums[1:]:
        if cur+k<num:
            cur=num
            ans+=1
    return ans

6/20 3443. K 次修改后的最大曼哈顿距离

东西、南北互不影响

对于一串方向 修改其中较少的方向 可以使距离更远

python 复制代码
def maxDistance(s, k):
    """
    :type s: str
    :type k: int
    :rtype: int
    """
    NS,EW=0,0
    ans=0
    for i in range(len(s)):
        if s[i]=='N':
            NS+=1
        elif s[i]=='S':
            NS-=1
        elif s[i]=='E':
            EW+=1
        elif s[i]=='W':
            EW-=1
        ans = max(ans,min(abs(NS)+abs(EW)+2*k,i+1))
    return ans

6/21 3085. 成为 K 特殊字符串需要删除的最少字符数

一共26个字母 枚举每个字母成为最少字符的情况

python 复制代码
def minimumDeletions(word, k):
    """
    :type word: str
    :type k: int
    :rtype: int
    """
    from collections import defaultdict
    cnt=defaultdict(int)
    for w in word:
        cnt[w]+=1
    ans = len(word)
    for c in cnt.values():
        d = 0
        for w in cnt.values():
            if c>w:
                d+=w
            elif w>c+k:
                d+=w-c-k
        ans=min(ans,d)
    return ans

6/22 2138. 将字符串拆分为若干长度为 k 的组

依次取k个生成放入ans 最后如果不足k 则补充fill

python 复制代码
def divideString(s, k, fill):
    """
    :type s: str
    :type k: int
    :type fill: str
    :rtype: List[str]
    """
    n=len(s)
    ans=[]
    for i in range(0,n,k):
        if i+k<=n:
            ans.append(s[i:i+k])
        else:
            ans.append(s[i:]+fill*(k-n%k))
    return ans

相关推荐
2601_9583529022 分钟前
还要写 AEC 算法?0 代码 + 6 个引脚,F-18 让通话清晰度提升 300%
人工智能·算法·降噪消回音
happyprince24 分钟前
03-regmix-深刻观-哲学与升华
算法
一路向阳~负责的男人25 分钟前
运动控制算法收录
算法
czt_java26 分钟前
5个核心位运算公式
算法
Doubbbbbbble云1 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
David猪大卫1 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
hahaha60162 小时前
HLS高层次综合设计技巧--数组
开发语言·嵌入式硬件·算法·fpga开发
不会就选b2 小时前
算法日常・每日刷题--<贪心>10
算法
南京兴帝文化传媒有限公司2 小时前
本地生活服务商户GEO优化技术实践:AI大模型收录机制与地图POI权重算法拆解
大数据·人工智能·算法·生活·geo优化实操·csdn运营技巧·ai内容收录
linx2953 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法