LeetCode 每日一题 2025/12/8-2025/12/14

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


目录

      • [12/8 1925. 统计平方和三元组的数目](#12/8 1925. 统计平方和三元组的数目)
      • [12/9 3583. 统计特殊三元组](#12/9 3583. 统计特殊三元组)
      • [12/10 3577. 统计计算机解锁顺序排列数](#12/10 3577. 统计计算机解锁顺序排列数)
      • [12/11 3531. 统计被覆盖的建筑](#12/11 3531. 统计被覆盖的建筑)
      • [12/12 3433. 统计用户被提及情况](#12/12 3433. 统计用户被提及情况)
      • 12/13
      • 12/14

12/8 1925. 统计平方和三元组的数目

遍历

如果a2+b2=c^2

a一定不等于b

假设a<b<c (a,b,c) (b,a,c)都满足

所以找到一组ans+2

python 复制代码
def countTriples(n):
    """
    :type n: int
    :rtype: int
    """
    import math
    ans =0
    for a in range(1,n):
        for b in range(a+1,n):
            c=int(math.sqrt(a**2+b**2))
            if c<=n and c**2==a**2+b**2:
                ans+=2
    return ans

12/9 3583. 统计特殊三元组

从右到左枚举j

左侧每个数出现的次数放入left 右侧每个数出现次数放入right

当前numsj 两边numsj*2 的个数相乘

python 复制代码
def specialTriplets(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    from collections import defaultdict
    MOD=10**9+7
    left=defaultdict(int)
    right=defaultdict(int)
    n=len(nums)
    for i in range(n-1):
        left[nums[i]]+=1
    right[nums[-1]]+=1
    
    ans=0
    for num in nums[-2:0:-1]:
        left[num]-=1
        ans = (ans+left[num*2]*right[num*2])%MOD
        right[num]+=1
        
    return ans

12/10 3577. 统计计算机解锁顺序排列数

如果能够全部解锁那么complexity0必定最小

即如果存在complexityi<=complexity0 这个i无法解锁 答案为0

否则答案为(n-1)!

python 复制代码
def countPermutations(complexity):
    """
    :type complexity: List[int]
    :rtype: int
    """
    MOD=10**9+7
    n=len(complexity)
    for i in range(1,n):
        if complexity[i]<=complexity[0]:
            return 0
        
    ans=1
    for i in range(2,n):
        ans = (ans*i)%MOD
    return ans

12/11 3531. 统计被覆盖的建筑

记录每一行每一列出现建筑的最小位置和最大位置

遍历半段当前x,y是否都在最小位置和最大位置之间

python 复制代码
def countCoveredBuildings(n, buildings):
    """
    :type n: int
    :type buildings: List[List[int]]
    :rtype: int
    """
    rowmin=[n+1]*(n+1)
    colmin=[n+1]*(n+1)
    rowmax=[0]*(n+1)
    colmax=[0]*(n+1)
    
    for x,y in buildings:
        rowmin[y]=min(rowmin[y],x)
        rowmax[y]=max(rowmax[y],x)
        colmin[x]=min(colmin[x],y)
        colmax[x]=max(colmax[x],y)
    
    ans=0
    for x,y in buildings:
        if rowmin[y]<x<rowmax[y] and colmin[x]<y<colmax[x]:
            ans+=1
    return ans

12/12 3433. 统计用户被提及情况

按时间顺序先排序

遍历每一个event

nxtonlinei记录用户i下一次上线的时间

分情况处理

python 复制代码
def countMentions(numberOfUsers, events):
    """
    :type numberOfUsers: int
    :type events: List[List[str]]
    :rtype: List[int]
    """
    events.sort(key=lambda x:(int(x[1]),x[0]=="MESSAGE"))
    cnt=[0]*numberOfUsers
    nxtonline=[0]*numberOfUsers
    for evt in events:
        cur = int(evt[1])
        if evt[0]=="MESSAGE":
            if evt[2]=="ALL":
                for i in range(numberOfUsers):
                    cnt[i]+=1
            elif evt[2]=="HERE":
                for i,t in enumerate(nxtonline):
                    if t<=cur:
                        cnt[i]+=1
            else:
                for i in evt[2].split():
                    cnt[int(i[2:])]+=1
        else:
            nxtonline[int(evt[2])]=cur+60
    return cnt

12/13

python 复制代码

12/14

python 复制代码

相关推荐
dialect_4 小时前
KMP算法
开发语言·c++·算法
reikocao4 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz5 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·5 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
文丑颜不良啊5 小时前
LeetCode1481~1500题目解析
java·leetcode
文丑颜不良啊6 小时前
LeetCode1381~1400题目解析
java·leetcode
是main不是漫6 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司7 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真9 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄9 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11