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

相关推荐
龙山云仓8 小时前
No131:AI中国故事-对话荀子——性恶论与AI约束:礼法并用、化性起伪与算法治理
大数据·人工智能·深度学习·算法·机器学习
夏鹏今天学习了吗8 小时前
【LeetCode热题100(90/100)】编辑距离
算法·leetcode·职场和发展
芒克芒克9 小时前
数组去重进阶:一次遍历实现最多保留指定个数重复元素(O(n)时间+O(1)空间)
数据结构·算法
星火开发设计9 小时前
二维数组:矩阵存储与多维数组的内存布局
开发语言·c++·人工智能·算法·矩阵·函数·知识
丨康有为丨9 小时前
算法时间复杂度和空间复杂度
算法
HarmonLTS10 小时前
Python人工智能深度开发:技术体系、核心实践与工程化落地
开发语言·人工智能·python·算法
a程序小傲10 小时前
京东Java面试被问:RPC调用的熔断降级和自适应限流
java·开发语言·算法·面试·职场和发展·rpc·边缘计算
一分之二~10 小时前
二叉树--层序遍历(迭代和递归)
数据结构·c++·算法·leetcode
zl_vslam10 小时前
SLAM中的非线性优-3D图优化之绝对位姿SE3约束右扰动(十七)
人工智能·算法·计算机视觉·3d
Cestb0n10 小时前
某果app 加密校验算法逆向分析
python·算法·逆向安全