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

相关推荐
昵称小白4 小时前
复杂度分析方法
算法
科研前沿4 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
学涯乐码堂主6 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa6 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073217 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
aini_lovee9 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong99909 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5059 小时前
深入理解主成分分析(PCA)
算法
apollowing9 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F9 小时前
最小堆定时器
数据结构·算法