LeetCode 每日一题 2024/5/27-2024/6/2

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


目录

      • [5/27 2028. 找出缺失的观测数据](#5/27 2028. 找出缺失的观测数据)
      • [5/28 2951. 找出峰值](#5/28 2951. 找出峰值)
      • [5/29 2981. 找出出现至少三次的最长特殊子字符串 I](#5/29 2981. 找出出现至少三次的最长特殊子字符串 I)
      • [5/30 2982. 找出出现至少三次的最长特殊子字符串 II](#5/30 2982. 找出出现至少三次的最长特殊子字符串 II)
      • [5/31 2965. 找出缺失和重复的数字](#5/31 2965. 找出缺失和重复的数字)
      • [6/1 2928. 给小朋友们分糖果 I](#6/1 2928. 给小朋友们分糖果 I)
      • 6/2

5/27 2028. 找出缺失的观测数据

算出当前的总和sum(rolls)

算出m+n次的总和mean*(m+n)

后者减去前者就是n次总和s

如果s<n 或者s>6*n 那么不可能存在

先假定n次都是1

再从头开始将1变成6 如果剩余值不能变六就变成剩余值 结束操作

python 复制代码
def missingRolls(rolls, mean, n):
    """
    :type rolls: List[int]
    :type mean: int
    :type n: int
    :rtype: List[int]
    """
    s = mean*(n+len(rolls))-sum(rolls)
    if s<n or s>6*n:
        return []
    ans =[1]*n
    s-=n
    loc = 1
    while s:
        if s>=5:
            ans[loc]+=5
            loc+=1
            s-=5
        else:
            ans[loc]+=s
            break
    return ans

5/28 2951. 找出峰值

遍历数组

判断当前位置i的值是否大于左右相邻的值

python 复制代码
def findPeaks(mountain):
    """
    :type mountain: List[int]
    :rtype: List[int]
    """
    ans = []
    for i in range(1,len(mountain)-1):
        if mountain[i]>mountain[i-1] and mountain[i]>mountain[i+1]:
            ans.append(i)
    return ans

5/29 2981. 找出出现至少三次的最长特殊子字符串 I

记录每个字符最长的三个长度a>=b>=c

要满足三次出现可以有三种情况a-2,min(a-1,b),c

python 复制代码
def maximumLength(s):
    """
    :type s: str
    :rtype: int
    """
    from collections import defaultdict
    l = defaultdict(list)
    num = 0
    for i,c in enumerate(s):
        num+=1
        if i+1==len(s) or c!=s[i+1]:
            l[c].append(num)
            num=0
    ans = 0
    for a in l.values():
        a.sort(reverse=True)
        a.extend([0,0])
        ans = max(ans,a[0]-2,min(a[0]-1,a[1]),a[2])
    return ans if ans else -1

5/30 2982. 找出出现至少三次的最长特殊子字符串 II

与2981相同

记录每个字符最长的三个长度a>=b>=c

要满足三次出现可以有三种情况a-2,min(a-1,b),c

python 复制代码
def maximumLength(s):
    """
    :type s: str
    :rtype: int
    """
    from collections import defaultdict
    l = defaultdict(list)
    num = 0
    for i,c in enumerate(s):
        num+=1
        if i+1==len(s) or c!=s[i+1]:
            l[c].append(num)
            num=0
    ans = 0
    for a in l.values():
        a.sort(reverse=True)
        a.extend([0,0])
        ans = max(ans,a[0]-2,min(a[0]-1,a[1]),a[2])
    return ans if ans else -1

5/31 2965. 找出缺失和重复的数字

遍历统计每个数出现次数

python 复制代码
def findMissingAndRepeatedValues(grid):
    """
    :type grid: List[List[int]]
    :rtype: List[int]
    """
    n = len(grid)
    m = [0]*(n*n+1)
    for row in grid:
        for v in row:
            m[v]+=1
    
    ans = [0,0]
    for i in range(1,n*n+1):
        if m[i]==2:
            ans[0]=i
        elif m[i]==0:
            ans[1]=i
    return ans

6/1 2928. 给小朋友们分糖果 I

只有三个小朋友 枚举第一个小朋友i个 第二个小朋友j个 第三个小朋友n-i-j个

python 复制代码
def distributeCandies(n, limit):
    """
    :type n: int
    :type limit: int
    :rtype: int
    """
    ans = 0
    for i in range(limit+1):
        for j in range(min(n-i,limit)+1):
            if n-i-j<=limit:
                ans+=1
    return ans

6/2

python 复制代码

相关推荐
地平线开发者10 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮10 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者11 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考11 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx14 小时前
CART决策树基本原理
算法·机器学习
Wect14 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱15 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway1 天前
解析残差网络 (ResNet)
算法
拖拉斯旋风1 天前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect1 天前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript