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

相关推荐
desssq17 分钟前
力扣:70. 爬楼梯
算法·leetcode·职场和发展
clock的时钟1 小时前
暑期数据结构第一天
数据结构·算法
小小小小王王王1 小时前
求猪肉价格最大值
数据结构·c++·算法
岁忧2 小时前
(LeetCode 面试经典 150 题 ) 58. 最后一个单词的长度 (字符串)
java·c++·算法·leetcode·面试·go
BIYing_Aurora2 小时前
【IPMV】图像处理与机器视觉:Lec13 Robust Estimation with RANSAC
图像处理·人工智能·算法·计算机视觉
martian6653 小时前
支持向量机(SVM)深度解析:从数学根基到工程实践
算法·机器学习·支持向量机
孟大本事要学习3 小时前
算法19天|回溯算法:理论基础、组合、组合总和Ⅲ、电话号码的字母组合
算法
??tobenewyorker4 小时前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
让我们一起加油好吗4 小时前
【基础算法】贪心 (二) :推公式
数据结构·数学·算法·贪心算法·洛谷
贾全4 小时前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人