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

相关推荐
Watermelo617几秒前
【前端实战】从 try-catch 回调到链式调用:一种更优雅的 async/await 错误处理方案
前端·javascript·网络·vue.js·算法·vue·用户体验
MSTcheng.几秒前
【C++】如何快速实现一棵支持key或key-value的二叉搜索树?关键技巧一文掌握!
开发语言·c++·算法·二叉搜索树
野生风长4 分钟前
从零开始的c语言:指针高级应用(下)(回调函数,qsort函数模拟实现, strlen和sizeof)
java·c语言·开发语言·c++·算法
Dingdangcat868 分钟前
YOLO12-ADown改进算法:两轮车辆行驶环境中的多目标检测与识别_1
算法·目标检测·目标跟踪
倔强的石头1069 分钟前
Linux 进程深度解析(三):调度算法、优先级调整与进程资源回收(wait与waitpid)
linux·服务器·算法
LYFlied9 分钟前
【一句话概括】Vue2 和 Vue3 的 diff 算法区别
前端·vue.js·算法·diff
s090713613 分钟前
多波束声呐 FPGA 信号处理链路介绍
算法·fpga开发·信号处理·声呐
User_芊芊君子18 分钟前
【LeetCode经典题解】:从前序和中序遍历构建二叉树详解
算法·leetcode·职场和发展
C雨后彩虹18 分钟前
虚拟理财游戏
java·数据结构·算法·华为·面试
jifengzhiling18 分钟前
卡尔曼增益:动态权重,最优估计
人工智能·算法·机器学习