LeetCode 每日一题 2023/9/11-2023/9/17

2023-11-05

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




9/11 630. 课程表 III

将期限日期从小到大排序
将耗时放入大顶堆中 如果当前耗时无法满足 但是比堆中最大值小时 进行替换

def scheduleCourse(courses):
    """
    :type courses: List[List[int]]
    :rtype: int
    """
    import heapq
    l=[]
    heapq.heapify(l)
    courses.sort(key = lambda x:x[1])
    now = 0
    for d,last in courses:
        if now+d<=last:
            now +=d
            heapq.heappush(l,-d)
        elif l and -l[0]>d:
            now = now+l[0]+d
            heapq.heappop(l)
            heapq.heappush(l,-d)
    return len(l)



9/12 1462. 课程表 IV

m[i][j]记录i是否依赖j
dg[i]记录当前i是否还有依赖未考虑
g[i]记录i依赖的课程
bfs l中存放当前无课程依赖可以考虑的课程

def checkIfPrerequisite(numCourses, prerequisites, queries):
    """
    :type numCourses: int
    :type prerequisites: List[List[int]]
    :type queries: List[List[int]]
    :rtype: List[bool]
    """
    m = [[False]*numCourses for _ in range(numCourses)]
    dg = [0]*numCourses
    g = [[] for _ in range(numCourses)]
    for p in prerequisites:
        dg[p[1]] +=1
        g[p[0]].append(p[1])
        
    l = []
    for i in range(numCourses):
        if dg[i]==0:
            l.append(i)
        
    while l:
        tmp = []
        for cur in l:
            for nx in g[cur]:
                m[cur][nx] = True
                for i in range(numCourses):
                    m[i][nx] = m[i][cur] or m[i][nx]
                dg[nx]-=1
                if dg[nx]==0:
                    tmp.append(nx)
        l= tmp
    ans = []
    for q in queries:
        ans.append(m[q[0]][q[1]])
    return ans



9/13 2596. 检查骑士巡视方案

规定从左上角出发 判断grid[0][0]是否为0
从当前位置向八个方向遍历是否能够到达下一个点

def checkValidGrid(grid):
    """
    :type grid: List[List[int]]
    :rtype: bool
    """
    x,y=0,0
    n = len(grid)
    if grid[0][0]!=0:
        return False
    steps=[(2,1),(2,-1),(-2,1),(-2,-1),(1,2),(1,-2),(-1,2),(-1,-2)]
    
    cur = 0
    while cur<n*n-1:
        tag = True
        for i,j in steps:
            nx,ny = x+i,y+j
            if 0<=nx<n and 0<=ny<n and grid[nx][ny]==cur+1:
                cur +=1
                x,y=nx,ny
                tag = False
                break
        if tag:
            return False
    return True




9/14 1222. 可以攻击国王的皇后

mem记录八个方向皇后可以攻击到国王的最近距离

def queensAttacktheKing(queens, king):
    """
    :type queens: List[List[int]]
    :type king: List[int]
    :rtype: List[List[int]]
    """
    mem = {}    
    for x,y in queens:
        i,j=0,0
        v = 0
        if x==king[0]:
            v = abs(y-king[1])
            j = (y-king[1])//v
        elif y==king[1]:
            v = abs(x-king[0])
            i = (x-king[0])//v
        else:
            v = abs(x-king[0])
            if v!=abs(y-king[1]):
                continue
            i = (x-king[0])//v
            j = (y-king[1])//v
        if (i,j) not in mem:
            mem[(i,j)] = v
        else:
            if v<mem[(i,j)]:
                mem[(i,j)] = v
    ans = []
    for (i,j),v in mem.items():
        ans.append([king[0]+i*v,king[1]+j*v])
    return ans
        



9/15 LCP 50. 宝石补给

按照规则依次赠送

def giveGem(gem, operations):
    """
    :type gem: List[int]
    :type operations: List[List[int]]
    :rtype: int
    """
    for x,y in operations:
        v = gem[x]//2
        gem[x]-=v
        gem[y]+=v
    return max(gem)-min(gem)




9/16 198. 打家劫舍

使用一个maxlist记录 进入当前x位置的房间能够得到的最大价值
可知前一个位置无法获取 所以在x时
可以通过[0,x-2]之间的最大值加上x的值获得该位置最大值
而在maxlist中最大的值必定是在最后两个位置 n,n-1
因为位置n的值必定大于n-2的值 所以我们只要比较maxlist中x-3,x-2这两个位置的值
就可以得到[0,x-2]之间的最大值

def rob(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    maxlist=[]
    res = 0
    for i in range(len(nums)):
        if i>2:
            tmp = max(maxlist[i-3],maxlist[i-2])+nums[i]
            maxlist.append(tmp)
        elif i==2:
            tmp = maxlist[0]+nums[i]
            maxlist.append(tmp)
        else:
            tmp = nums[i]
            maxlist.append(nums[i])
        res = max(res,tmp)
    return res



9/17 213. 打家劫舍 II

第一个和最后一个不能同时选择
分两种情况 选最后一个 和不选最后一个
记录前一家最大值pre1 和前前一家最大值pre2
可以得到当前i最大值 max(pre1,pre2+nums[i])

def rob(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    def func(start,end):
        now,pre1,pre2 = 0,0,0
        for i in range(end,start-1,-1):
            now = max(pre1,nums[i]+pre2)
            pre2=pre1
            pre1=now
        return now
    
    n =len(nums)
    if n==0:
        return 0
    elif n==1:
        return nums[0]
    return max(func(0,n-2),func(1,n-1))



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode 每日一题 2023/9/11-2023/9/17 的相关文章

  • Go-OpenWrt获取wan口ip、dns、网关ip

    Go OpenWrt获取wan口ip dns 网关ip 文章目录 Go OpenWrt获取wan口ip dns 网关ip 1 前言 2 解决方案思路 3 代码 1 前言 一般来说 Openwrt可以配置多个wan口和多个lan口 这里获取的

随机推荐

  • Vue父子组件通过prop异步传输数据踩坑

    今天碰到vue开发父子组件通信的一个小坑 情况是这样的 子组件使用echart展示图表 所需options由父组件通过prop传入 父组件中的options初始值为空 在mounted钩子函数中发起http请求获取数据然后更新options
  • Qt制作简单的无边框登陆窗口

    使用qt做简单的登录窗口 环境 win10 Qt5 创建项目 选择Widget类 勾选ui界面 因为我是用的默认类名所以类名是Widget 以下是Widget h ifndef WIDGET H define WIDGET H includ
  • 离散方法介绍

    离散成 的方法存在很多 但是各个方法直接存在优劣 从两方面进行参数比较 方面 1 从零点和极点 2 环节的频率响应 幅频和相频特性 系统控制方面 评价离散方法的参数 1 主导零 极点 2 系统带宽或者穿越频率 3 直流增益 4 增益裕度 5
  • Python采集世界大学排行榜,做数据可视化,来看看你的大学上榜没

    前言 这不是最近疫情又开始了 马上也要过年了 就是说很多大学都开始准备放假了吧 我有个表妹下周二就放寒假了哈哈 感觉现在读书寒假可长了 今天有点无聊 就来 爬取一下世界大学排行榜 做数据可视化 看看你们的学校上榜没 知识点 动态数据抓包 r
  • Algorithm oj 全集(已过oj)

    Algorithm oj 分治策略 作业1 找出数组中第 k 小的数 总提交数 616次 通过数 188次 通过率 30 52 内存限制 104857600 BYTE 时间限制 10000 MS 输入限制 1000 行 输出限制 1000
  • 【我的面试-01】Web前端开发实习岗-面试题总结

    简单开头 首先技术面试官会根据简历里所写的项目和个人掌握技术栈提问 我不知道已经改过多少次简历了 因为前期投简历是真的是沉在茫茫大海 捞漂流瓶都捞不到的那种 我的技术栈 Vue还在苦苦的自学当中 随便推荐一下coderwhy老师B站的教学视
  • 通过反射获取一个对象的属性值三种方法比较

    这里写目录标题 为何要写这篇博客 数据准备 方法实践 总结 为何要写这篇博客 反射机制的用途非常多 比如获取方法 属性名和属性值等 甚至可以获取标签等标签属性 今天来比较几种获取实例化对象的属性值方法 数据准备 Builder FieldD
  • C++的cout高阶格式化操作

    敬告 当您的浏览器以非默认字体浏览本文时 段落格式可能会出现偏差 这篇文章主要讲解如何在C 中使用cout进行高级的格式化输出操作 包括数字的各种计数法 精度 输出 左或右对齐 大小写等等 通过本文 您可以完全脱离scanf printf
  • 攻防世界-WEB新手练习区教程(二)

    目录 攻防世界 WEB新手练习区教程 二 simple js xff referer weak auth command execution simple php 攻防世界 WEB新手练习区教程 二 simple js 进入场景 需要输入密
  • 记忆化搜索 Memorization Search

    记忆化搜索 Memorization Search 什么是记忆化搜索 记忆化搜索函数的三个特点 记忆化搜索 vs 动态规划 三种适用于DP的场景 三种不适用于DP的场景 Examples Leetcode 140 单词拆分 II Leetc
  • print.js 打印的网页单页内容,多出第二页空白页面

    问题如上图 解决过程 给table外嵌套的div设置了样式page break after也没有效果 最后索性给打印区域添加加边框 准备看看预览时空白页里有什么 结果后一页的空白页就这么没了 o 观察发现 加上边框后 table的宽度确实有
  • 【js】用正则实现一串数字用逗号隔开千分位

    此方法适用于正整数 负整数 浮点数 const formatNumberWithCommas number any gt 兼容一下传进来的number字段有可能是null undefined NaN 0的情况 当number为null un
  • .NET基础概念解释及主要体系结构

    一 NET概念详解 1 NET NET就是微软用来实现XML Web Services SOA 面向服务的体系结构service orientedarchitecture 和敏捷性的技术 NET是微软的新一代技术平台 为敏捷商务构建互联互通
  • python无web框架接口通信

    1 发送 def image to base64 image np image cv2 imencode jpg image np 1 tobytes base64 data base64 b64encode image base64 da
  • Java解析txt文件

    Java解析txt文件 package com wb test import java io BufferedReader import java io File import java io FileInputStream import
  • mysql和c#在类型转换的问题

    1 char 36 和string mysql在将char 36 类型的会转成System GUID 如果char 36 字段里存的不是guid 最好不要用char 36 改成char 37 这样的就没事了 在 net开放中 asp net
  • 李晓波

    一 大败局 第一部 这套书 真的写出来改革开放以来 中国比较出名的企业的生存与失败 这套书可以指导我十年吧 这几本书应该每两年翻阅一遍 1 秦池酒的成功与失败 中国标王 广告对普通人的影响 公关 品牌营销 2013 11 20 二 中国经济
  • cygwin环境编译 致命错误:stddef.h:can not found

    最近需要在linux下运行代码 为了省去搭建环境的时间 就使用了cygwin这一工具 但它在编译过程中 出现了can not found stddef h的问题 原因是库文件sttdef h没有找到 上网查了一下 有的博客写到需要对g 降级
  • 使用MongoDB命令连接远程服务器的MongoDB数据库

    使用MongoDB命令连接远程服务器的MongoDB数据库 MongoDB连接远程服务器的命令格式如下 mongo 远程主机ip或DNS MongoDB端口号 数据库名 u user p password MongoDB连接远程服务器的命令
  • LeetCode 每日一题 2023/9/11-2023/9/17

    记录了初步解题思路 以及本地实现代码 并不一定为最优 也希望大家能一起探讨 一起进步 目录 9 11 630 课程表 III 9 12 1462 课程表 IV 9 13 2596 检查骑士巡视方案 9 14 1222 可以攻击国王的皇后 9