LeetCode 每日一题 2024/7/29-2024/8/4

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


目录

      • [7/29 682. 棒球比赛](#7/29 682. 棒球比赛)
      • [7/30 2961. 双模幂运算](#7/30 2961. 双模幂运算)
      • [7/31 3111. 覆盖所有点的最少矩形数目](#7/31 3111. 覆盖所有点的最少矩形数目)
      • [8/1 LCP 40. 心算挑战](#8/1 LCP 40. 心算挑战)
      • [8/2 3128. 直角三角形](#8/2 3128. 直角三角形)
      • [8/3 3143. 正方形中的最多点数](#8/3 3143. 正方形中的最多点数)
      • [8/4 572. 另一棵树的子树](#8/4 572. 另一棵树的子树)

7/29 682. 棒球比赛

创建一个list用来储存有效分值

python 复制代码
def calPoints(operations):
    """
    :type ops: List[str]
    :rtype: int
    """
    l=[]
    sum = 0
    for i in ops:
        if i=="+":
            v = l[-1]+l[-2]
            l.append(v)
            sum+=v
        elif i=="D":
            v = 2* l[-1]
            l.append(v)
            sum+=v
        elif i=="C":
            v = l.pop()
            sum-=v
        else:
            sum += int(i)
            l.append(int(i))
    return sum

7/30 2961. 双模幂运算

依次判断

python 复制代码
def getGoodIndices(variables, target):
    """
    :type variables: List[List[int]]
    :type target: int
    :rtype: List[int]
    """
    n = len(variables)
    ans = []
    for i in range(n):
        a,b,c,m = variables[i]
        v = 1
        for _ in range(b):
            v = (v*a)%10
        vv = 1
        for _ in range(c):
            vv = (vv*v)%m
        if vv==target:
            ans.append(i)
    return ans

7/31 3111. 覆盖所有点的最少矩形数目

根据题意 可以不用管矩形的高度

将所有点都投射到x轴 只考虑x的大小即可

将x从小到大排序 判断需要几个w长度的线段能够覆盖所有的点

python 复制代码
def minRectanglesToCoverPoints(points, w):
    """
    :type points: List[List[int]]
    :type w: int
    :rtype: int
    """
    s = set()
    for x,_ in points:
        s.add(x)
    
    l = sorted(list(s))
    ans = 0
    cur = -1
    for x in l:
        if x>cur:
            ans+=1
            cur=x+w
    return ans

8/1 LCP 40. 心算挑战

从大到小排序

先将前cnt个数相加

如果是奇数 则将选中的

最小奇数和未选中的最大偶数替换 或者

最小偶数和未选中的最大奇数替换

python 复制代码
def maxmiumScore(cards, cnt):
    """
    :type cards: List[int]
    :type cnt: int
    :rtype: int
    """
    cards.sort(reverse=True)
    ans = 0
    tmp=0
    odd,even = -1,-1
    for i in range(cnt):
        tmp += cards[i]
        if cards[i]%2==1:
            odd = cards[i]
        else:
            even = cards[i]
    if tmp%2==0:
        return tmp
    for i in range(cnt,len(cards)):
        if cards[i]%2==1:
            if even!=-1:
                ans = max(ans,tmp-even+cards[i])
        else:
            if odd!=-1:
                ans = max(ans,tmp-odd+cards[i])
    return ans

8/2 3128. 直角三角形

枚举两条直角边的交点 构成直角三角形 将这个点所在行的点与所在列的点一一匹配

假设所在行有row个点 所在列有col个点 那么以这个点为转折点的直角三角形有(row-1)*(col-1)个

python 复制代码
def numberOfRightTriangles(grid):
    """
    :type grid: List[List[int]]
    :rtype: int
    """
    n=len(grid)
    m=len(grid[0])
    col =[0]*m
    for j in range(m):
        for i in range(n):
            col[j]+=grid[i][j]
    ans = 0
    for i in range(n):
        row = sum(grid[i])
        for j in range(m):
            if grid[i][j]==1:
                ans +=(row-1)*(col[j]-1)
    return  ans

8/3 3143. 正方形中的最多点数

将正方形边长从0开始往外扩展

对于任意一个点x,y 在第max(|x|,|y|)次扩展后位于正方形内

计算每个点经过几次会被正方形包含在内

第一次出现重复标签则停止

python 复制代码
def maxPointsInsideSquare(points, s):
    """
    :type points: List[List[int]]
    :type s: str
    :rtype: int
    """
    l = []
    n = len(points)
    for i in range(n):
        l.append((max(abs(points[i][0]),abs(points[i][1])),s[i]))
    l.sort()
    mem = set()
    pre = 0
    cnt = 0
    ans = 0
    for r,sign in l:
        if r>pre:
            pre = r
            ans += cnt
            cnt = 0
        if sign not in mem:
            cnt+=1
            mem.add(sign)
        else:
            cnt = 0
            break
    return ans+cnt

8/4 572. 另一棵树的子树

same判断两个树是否一致

height判断树的深度

深搜root 如果树的深度不一致必定不一致

python 复制代码
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
def isSubtree(root, subRoot):
    """
    :type root: TreeNode
    :type subRoot: TreeNode
    :rtype: bool
    """
    def same(a,b):
        if a is None or b is None:
            return a is b
        return a.val==b.val and same(a.left,b.left) and same(a.right,b.right)
    def height(node):
        if node is None:
            return 0
        lh = height(node.left)
        rh = height(node.right)
        return max(lh,rh)+1
    hs = height(subRoot)
    def dfs(node):
        if node is None:
            return 0,False
        lh,lf = dfs(node.left)
        rh,rf = dfs(node.right)
        if lf or rf:
            return 0,True
        nh = max(lh,rh)+1
        return nh,nh==hs and same(node,subRoot)
    return dfs(root)[1]

相关推荐
啊阿狸不会拉杆14 分钟前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
_OP_CHEN1 小时前
【算法基础篇】(五十六)容斥原理指南:从集合计数到算法实战,解决组合数学的 “重叠难题”!
算法·蓝桥杯·c/c++·组合数学·容斥原理·算法竞赛·acm/icpc
TracyCoder1231 小时前
LeetCode Hot100(27/100)——94. 二叉树的中序遍历
算法·leetcode
九.九1 小时前
CANN HCOMM 底层机制深度解析:集合通信算法实现、RoCE 网络协议栈优化与多级同步原语
网络·网络协议·算法
C++ 老炮儿的技术栈2 小时前
Qt Creator中不写代如何设置 QLabel的颜色
c语言·开发语言·c++·qt·算法
子春一2 小时前
Flutter for OpenHarmony:构建一个 Flutter 数字消消乐游戏,深入解析网格状态管理、合并算法与重力系统
算法·flutter·游戏
草履虫建模8 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq10 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq10 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化