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

当前nums[j] 两边nums[j]*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. 统计计算机解锁顺序排列数

如果能够全部解锁那么complexity[0]必定最小

即如果存在complexity[i]<=complexity[0] 这个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

nxtonline[i]记录用户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 复制代码

相关推荐
SatVision炼金士5 分钟前
合成孔径雷达干涉测量(InSAR)沉降监测算法体系
算法
wuweijianlove8 分钟前
算法稳定性与数值误差传播研究的技术2
算法
计算机安禾31 分钟前
【数据结构与算法】第35篇:归并排序与基数排序
c语言·数据结构·vscode·算法·排序算法·哈希算法·visual studio
爱码小白43 分钟前
MySQL 单表查询练习题汇总
数据库·python·算法
橘颂TA1 小时前
【笔试】算法的暴力美学——牛客 NC213140 :除2!
c++·算法·结构与算法
汀、人工智能1 小时前
[特殊字符] 第66课:跳跃游戏
数据结构·算法·数据库架构·图论·bfs·跳跃游戏
汀、人工智能1 小时前
[特殊字符] 第70课:加油站
数据结构·算法·数据库架构·图论·bfs·加油站
wsoz1 小时前
Leetcode普通数组-day5、6
c++·算法·leetcode·数组
y = xⁿ1 小时前
【LeetCode】双指针:同向快慢针
算法·leetcode
啊哦呃咦唔鱼1 小时前
LeetCode hot100-105从前序与中序遍历序列构造二叉树
算法