LeetCode 每日一题 2026/1/5-2026/1/11

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


目录

      • [1/5 1975. 最大方阵和](#1/5 1975. 最大方阵和)
      • [1/6 1161. 最大层内元素和](#1/6 1161. 最大层内元素和)
      • [1/7 1339. 分裂二叉树的最大乘积](#1/7 1339. 分裂二叉树的最大乘积)
      • [1/8 1458. 两个子序列的最大点积](#1/8 1458. 两个子序列的最大点积)
      • [1/9 865. 具有所有最深节点的最小子树](#1/9 865. 具有所有最深节点的最小子树)
      • 1/10
      • 1/11

1/5 1975. 最大方阵和

如果有偶数个负数 经过若干次操作可以将他们变为正

如果有奇数个负数 最后会剩下一个负数 将绝对值最小的为负数 可以使得和最大

遍历

python 复制代码
def maxMatrixSum(matrix):
    """
    :type matrix: List[List[int]]
    :rtype: int
    """
    minv = float('inf')
    ans = 0
    nums = 0
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            v = matrix[i][j]
            if v<0:
                nums+=1
                v=-v
            ans+=v
            minv=min(minv,v)
    if nums%2:
        ans-=2*minv
    return ans

1/6 1161. 最大层内元素和

遍历每一层 计算每一层元素和s

cur为当前最大元素和 ans为最大元素和所在层数

num记录当前层数

python 复制代码
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
def maxLevelSum(root):
    """
    :type root: Optional[TreeNode]
    :rtype: int
    """
    cur=root.val
    ans = 1
    l=[root]
    num=1
    while l:
        tmp=[]
        s=0
        for node in l:
            if node.left:
                tmp.append(node.left)
            if node.right:
                tmp.append(node.right)
            s+=node.val
        if s>cur:
            cur=s
            ans=num
        num+=1
        l=tmp
    return ans

1/7 1339. 分裂二叉树的最大乘积

先统计所有节点和 s

再一次遍历所有子树和sub 判断sub*(s-sub)

sub越接近s//2 乘积越大 存储最接近一半的值

python 复制代码
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def maxProduct(root):
    """
    :type root: Optional[TreeNode]
    :rtype: int
    """
    MOD=10**9+7
    global s,target
    s=0
    target=0
    
    def calculatesum(node):
        global s
        if not node:
            return 
        s+=node.val
        calculatesum(node.left)
        calculatesum(node.right)
        
    calculatesum(root)
    
    def dfs(node):
        global target,s
        if not node:
            return 0
        cur = dfs(node.right)+dfs(node.left)+node.val
        if abs(cur*2-s)<abs(target*2-s):
            target=cur
        return cur
    dfs(root)
    return target*(s-target)%MOD

1/8 1458. 两个子序列的最大点积

动归

python 复制代码
def maxDotProduct(nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: int
    """
    m,n=len(nums1),len(nums2)
    dp=[[0]*n for _ in range(m)]
    
    for i in range(m):
        for j in range(n):
            v = nums1[i]*nums2[j]
            dp[i][j]=v
            if i>0:
                dp[i][j]=max(dp[i][j],dp[i-1][j])
            if j>0:
                dp[i][j]=max(dp[i][j],dp[i][j-1])
            if i>0 and j>0:
                dp[i][j]=max(dp[i][j],dp[i-1][j-1]+v)
    return dp[m-1][n-1]

1/9 865. 具有所有最深节点的最小子树

bfs遍历一遍获得最深深度 并记录每个节点的深度 和 最深深度d

check深搜 判断左右子树包含的最深深度

如果当前node两个子树最深深度都是d 那么这个node为最小子树

python 复制代码
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
def subtreeWithAllDeepest(root):
    """
    :type root: Optional[TreeNode]
    :rtype: Optional[TreeNode]
    """
    global ans
    ans = root
    m={}
    l=[root]
    d = 0
    while l:
        d+=1
        tmp=[]
        for node in l:
            m[node.val]=d
            if node.left:
                tmp.append(node.left)
            if node.right:
                tmp.append(node.right)
        l=tmp
    
    def check(node):
        global ans
        l,r=m[node.val],m[node.val]
        if node.left:
            l = check(node.left)
        if node.right:
            r = check(node.right)
        if l==r and l==d:
            ans = node
        return max(l,r)
    check(root)
    return ans

1/10

python 复制代码

1/11

python 复制代码

相关推荐
Navigator_Z19 分钟前
LeetCode //C - 1221. Split a String in Balanced Strings
c语言·算法·leetcode
天疆说29 分钟前
庞特里亚金极小值原理的详细推导
算法
余俊晖42 分钟前
Self-OPD:去掉教师机的流匹配模型 On-Policy 蒸馏
人工智能·算法·机器学习
手写码匠44 分钟前
华为云Flexus+DeepSeek征文|华为云MaaS DeepSeek推理服务 × Flexus云服务器 × Dify一键部署:性能评测实战
人工智能·深度学习·算法·aigc
啥都想学点的研究生2 小时前
一篇文章讲清楚:逻辑回归
算法·机器学习·逻辑回归
货拉拉技术3 小时前
Agent 场景下 Token 成本优化的实战技巧
算法
hahaha60163 小时前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研3 小时前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
集思广益的灰太狼3 小时前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子
方方洛3 小时前
vllm教程-03-架构设计
算法·架构