当前位置: 首页 > news >正文

LeetCode 每日一题 2022/8/29-2022/9/4

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


目录

      • 8/29 1470. 重新排列数组
      • 8/30 998. 最大二叉树 II
      • 8/31 946. 验证栈序列
      • 9/1 1475. 商品折扣后的最终价格
      • 9/2 687. 最长同值路径
      • 9/3 646. 最长数对链
      • 9/4


8/29 1470. 重新排列数组

重新排序 x0,xn,x1,xn+1 …

def shuffle(nums, n):
    """
    :type nums: List[int]
    :type n: int
    :rtype: List[int]
    """
    ans = [0]*(2*n)
    for i in range(n):
        ans[i*2] = nums[i]
        ans[i*2+1] = nums[i+n]
    return ans



8/30 998. 最大二叉树 II

当前节点小于val 则val为根节点当前为左子节点
当前节点大于val 则val递归入当前节点右子树中

class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
def insertIntoMaxTree(root, val):
    """
    :type root: TreeNode
    :type val: int
    :rtype: TreeNode
    """
    pre,cur = None,root
    while cur:
        if val > cur.val:
            node = TreeNode(val,cur,None)
            if not pre:
                return node
            pre.right = node
            return root
        else:
            pre = cur
            cur = cur.right
    pre.right = TreeNode(val)
    return root
            



8/31 946. 验证栈序列

将当前push入栈
判断栈顶元素是否与pop相同
如果相同则考虑下一个
如果不同则继续push

def validateStackSequences(pushed, popped):
    """
    :type pushed: List[int]
    :type popped: List[int]
    :rtype: bool
    """
    l = []
    n = len(pushed)
    loc = 0
    for p in popped:
        if l and l[-1]==p:
            l.pop()
            continue
        tag = False
        while loc<n:
            if pushed[loc]==p:
                loc+=1
                tag = True
                break
            l.append(pushed[loc])
            loc+=1
        if not tag:
            return False
    return True



9/1 1475. 商品折扣后的最终价格

从后往前考虑
stack 保存非递减序列
当前价格可以在stack中找到第一个小于等于它的数

def finalPrices(prices):
    """
    :type prices: List[int]
    :rtype: List[int]
    """
    stack = []
    n = len(prices)
    for i,v in enumerate(prices[::-1]):
        diff = 0
        while stack:
            if stack[-1]>v:
                stack.pop()
            else:
                diff = stack[-1]
                break
        stack.append(v)
        prices[n-1-i] = v-diff
    return prices



9/2 687. 最长同值路径

check用来判断当前节点能够返回给父节点最多的节点数
分别考虑左右子树
l,r为左右子树能够提供给当前节点的节点数
如果子节点与当前节点相同 则提供的节点数可用curl=l curr=r
更新路径为左右两边节点和 curl+curr
能够提供给父节点的只能是一侧加上自己 max(curl,curr)+1

class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def longestUnivaluePath(root):
    """
    :type root: TreeNode
    :rtype: int
    """
    global ans
    ans = 0
    def check(node):
        if not node:
            return 0
        global ans
        l,r = 0,0
        curl,curr = 0,0
        if node.left:
            l = check(node.left)
            if node.val==node.left.val:
                curl = l
        if node.right:
            r = check(node.right)
            if node.val==node.right.val:
                curr = r
        ans = max(ans,curl+curr)
        return max(curl,curr)+1
    check(root)
    return ans



9/3 646. 最长数对链

记录每一个出现的第一个数字后能够有的最小数
check检验第二个数为num后最多能接几个数对

def findLongestChain(pairs):
    """
    :type pairs: List[List[int]]
    :rtype: int
    """
    m = {}
    l = []
    
    for a,b in pairs:
        if a not in m:
            l.append(a)
            m[a] = b
        elif m[a]>b:
            m[a] = b
    l.sort()
    mem = {}
    def check(num):
        ans = 1
        if num in mem:
            return mem[num]
        for s in l:
            if s>num:
                ans = max(ans,check(m[s])+1)
        mem[num] = ans
        return ans
    ans = 0
    for s in l:
        ans = max(ans,check(m[s]))
    return ans



9/4





相关文章:

  • webpack定制化 高级配置[热更新、热打包、别名、调试]
  • 外贸员需要知道的那些事儿
  • c++11 多线程支持 (std::shared_future)
  • webpack定制化 基础配置[基础、配置、初运行]
  • mysql基本语句:DQL(数据查询语言)
  • Android | 通过URL获取网络图片Bitmap格式
  • SpringCloud-01 Rest学习环境搭建笔记
  • 基于APB与I2C的多主多从架构设计 - Function Description
  • R语言 ggdendro_谱系图
  • Kafka原理及概念解释
  • Springboot-自定义Spring Boot Starter并推送到远端公服
  • 《奔跑吧,程序员:从零开始打造产品、技术和团队》 读书笔记
  • PHP - 各版本对比 - 整理
  • JAVA 常见算法(选择排序,二分查找)
  • 【dotnet】Unity IL2CPP Mono
  • C++11: atomic 头文件
  • C++类的相互关联
  • CentOS从零开始部署Nodejs项目
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java程序员幽默爆笑锦集
  • jquery ajax学习笔记
  • learning koa2.x
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • npx命令介绍
  • 回流、重绘及其优化
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 聊聊hikari连接池的leakDetectionThreshold
  • 小程序测试方案初探
  • 白色的风信子
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​MySQL主从复制一致性检测
  • ​比特币大跌的 2 个原因
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #define,static,const,三种常量的区别
  • (2)(2.10) LTM telemetry
  • (9)目标检测_SSD的原理
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (二)fiber的基本认识
  • (二)linux使用docker容器运行mysql
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)计算机毕业设计高校学生选课系统
  • (十一)图像的罗伯特梯度锐化
  • (转载)Linux 多线程条件变量同步
  • . NET自动找可写目录
  • .cfg\.dat\.mak(持续补充)
  • .NET Core 2.1路线图
  • .Net Remoting常用部署结构
  • .Net 路由处理厉害了
  • .NET 设计模式初探
  • .NET框架
  • .NET序列化 serializable,反序列化
  • .sys文件乱码_python vscode输出乱码
  • /*在DataTable中更新、删除数据*/