Leetcode周赛 | 2023-8-6

news2024/12/25 1:16:40

2023-8-6

  • 题1
    • 体会
    • 我的代码
  • 题2
    • 我的超时代码
    • 题目
    • 体会
    • 我的代码
  • 题3
    • 体会
    • 我的代码

题1

在这里插入图片描述
在这里插入图片描述

体会

在这里插入图片描述
这道题完全就是唬人,只要想明白了,只要有两个连续的数的和,大于target,那么一定可以,两边一次切一个就好了。

我的代码

题2

我的超时代码

尽力了,想不出来别的方法,只能通过一半的测试用例,其他超时。

将向左和向下的代码去掉后,因为我觉得向左和向右是无意义的,通过的用例多了一些,但还是超时。

class Solution:
    def maximumSafenessFactor(self, grid: List[List[int]]) -> int:
        note = []
        m = len(grid)
        n = len(grid[0])
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 1 :
                    note.append([i,j])
                    if i == 0 and j == 0 :
                        return 0
                    if i == m-1 and j == n-1 :
                        return 0
        
        self.mm = 0
        i = j = 0
        mini = inf
        self.dfs(grid,i,j,mini,note,m,n)
        
        return self.mm
        
    def dfs(self,grid,i,j,mini,note,m,n):
        if i < 0 or i >= m or j < 0 or j >= n :
            return
        if grid[i][j] == 2 :
            return
        
        temp = [[p[0]-i,p[1]-j] for p in note]     
        for k in temp :
            mini = min(mini,abs(k[0])+abs(k[1]))
        
        if mini <= self.mm :
            return
            
        if i == m-1 and j == n-1 :
            self.mm = max(self.mm,mini)
            return                
        grid[i][j] = 2
        self.dfs(grid,i+1,j,mini,note,m,n)
        self.dfs(grid,i-1,j,mini,note,m,n)
        self.dfs(grid,i,j+1,mini,note,m,n)
        self.dfs(grid,i,j-1,mini,note,m,n)
        grid[i][j] = 0
        

改成了动态规划的方法,还是解答错误,但是通过的用例更多了
(983 / 1035)

class Solution:
    def maximumSafenessFactor(self, grid: List[List[int]]) -> int:
        note = []
        m = len(grid)
        n = len(grid[0])
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 1 :
                    note.append([i,j])
                    if i == 0 and j == 0 :
                        return 0
                    if i == m-1 and j == n-1 :
                        return 0
        dp = [[0]*(n) for _ in range(m)]
        for i in range(0,m):
            for j in range(0,n):
                mini = inf
                temp = [[p[0]-(i),p[1]-(j)] for p in note]     
                for k in temp :
                    mini = min(mini,abs(k[0])+abs(k[1]))
                '''               
                if mini < dp[i-1][j] and mini < dp[i][j-1] :
                    dp[i][j] = mini
                elif mini > dp[i-1][j] and mini > dp[i][j-1] :
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1])
                else :
                    dp[i][j] = mini
                '''
                if i == 0 and j != 0:
                    kk = dp[i][j-1]
                elif j == 0 and i!=0:
                    kk =  dp[i-1][j]
                elif j == 0 and i==0:
                    kk =  inf
                else :
                    kk = max(dp[i-1][j],dp[i][j-1])
                if mini < kk :
                    dp[i][j] = mini
                else :
                    dp[i][j] = kk
       
        #return dp
        return dp[-1][-1]
                     

两次动归也不对。

class Solution:
    def maximumSafenessFactor(self, grid: List[List[int]]) -> int:
        note = []
        m = len(grid)
        n = len(grid[0])
        for i in range(m):
            for j in range(n):
                if grid[i][j] == 1 :
                    note.append([i,j])
                    if i == 0 and j == 0 :
                        return 0
                    if i == m-1 and j == n-1 :
                        return 0
        dp = [[0]*(n) for _ in range(m)]
        for i in range(0,m):
            for j in range(0,n):
                mini = inf
                temp = [[p[0]-(i),p[1]-(j)] for p in note]     
                for k in temp :
                    mini = min(mini,abs(k[0])+abs(k[1]))
                '''               
                if mini < dp[i-1][j] and mini < dp[i][j-1] :
                    dp[i][j] = mini
                elif mini > dp[i-1][j] and mini > dp[i][j-1] :
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1])
                else :
                    dp[i][j] = mini
                '''
                if i == 0 and j != 0:
                    kk = dp[i][j-1]
                elif j == 0 and i!=0:
                    kk =  dp[i-1][j]
                elif j == 0 and i==0:
                    kk =  inf
                else :
                    kk = max(dp[i-1][j],dp[i][j-1])
                if mini < kk :
                    dp[i][j] = mini
                else :
                    dp[i][j] = kk
        dp2 = [[0]*(n) for _ in range(m)]
        for i in range(m-1,-1,-1):
            for j in range(n-1,-1,-1):
                mini = inf
                temp = [[p[0]-(i),p[1]-(j)] for p in note]     
                for k in temp :
                    mini = min(mini,abs(k[0])+abs(k[1]))
                '''               
                if mini < dp[i-1][j] and mini < dp[i][j-1] :
                    dp[i][j] = mini
                elif mini > dp[i-1][j] and mini > dp[i][j-1] :
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1])
                else :
                    dp[i][j] = mini
                '''
                if i == m-1 and j != n-1:
                    kk = dp[i][j+1]
                elif j == n-1 and i!=m-1:
                    kk =  dp[i+1][j]
                elif j == n-1 and i==m-1:
                    kk =  inf
                else :
                    kk = max(dp[i+1][j],dp[i][j+1])
                if mini < kk :
                    dp[i][j] = mini
                else :
                    dp[i][j] = kk
        
        #return dp
        return max(dp[-1][-1],dp2[-1][-1])
                
      

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

体会

在这里插入图片描述
不能用DP的原因:

因为不仅可以向右和向下走,还可以向上和向左,所以不能dp。

从来没接触过这道题的解法,也看不懂。

class UnionFind:
    def __init__(self, n):
        self.parent = list(range(n))

    def find(self, a):
        a = self.parent[a]
        acopy = a
        while a != self.parent[a]:
            a = self.parent[a]
        while acopy != a:
            self.parent[acopy], acopy = a, self.parent[acopy]
        return a

    def merge(self, a, b):
        pa, pb = self.find(a), self.find(b)
        if pa == pb: return False
        self.parent[pb] = pa
        return True

class Solution:
    def maximumSafenessFactor(self, grid: List[List[int]]) -> int:
        n = len(grid)
        
        dist = [[inf] * n for _ in range(n)]
        tmp = deque([(i, j) for i in range(n) for j in range(n) if grid[i][j]])
        for i, j in tmp:
            dist[i][j] = 0
        while tmp:
            i, j = tmp.popleft()
            for dx, dy in pairwise([-1, 0, 1, 0, -1]):
                if 0 <= i + dx < n and 0 <= j + dy < n and dist[i+dx][j+dy] == inf:
                    dist[i+dx][j+dy] = dist[i][j] + 1
                    tmp.append((i+dx, j+dy))
        
        l, r = 0, 2 * n - 2
        while l <= r:
            m = (l + r) // 2
            union = UnionFind(n * n)
            for i in range(n):
                for j in range(n):
                    if dist[i][j] >= m:
                        if i < n - 1 and dist[i+1][j] >= m: union.merge(i * n + j, (i + 1) * n + j)
                        if j < n - 1 and dist[i][j+1] >= m: union.merge(i * n + j, i * n + j + 1)
            if union.find(0) == union.find(n * n - 1): l = m + 1
            else: r = m - 1
        return r

我的代码

题3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

体会

在这里插入图片描述

class Solution:
    def findMaximumElegance(self, items: List[List[int]], k: int) -> int:
        items.sort(reverse=True)
        chosen = set()
        to_delete = []

        tot = 0
        for i in range(k):
            x, t = items[i]
            tot += x
            if t in chosen: heappush(to_delete, x)
            else: chosen.add(t)
        
        ans = tot + len(chosen) ** 2
        for i in range(k, len(items)):
            x, t = items[i]
            if t not in chosen and len(to_delete):
                chosen.add(t)
                tot -= heappop(to_delete)
                tot += x
                ans = max(ans, tot + len(chosen) ** 2)
        return ans

我的代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/842767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript |(七)BOM及JSON简介 | 轮播图 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 系列笔记&#xff1a; JavaScript |&#xff08;一&#xff09;JavaScript简介及基本语法JavaScript |&#xff08;二&#xff09;JavaScript自定义对象及函数JavaScript |&#xff08;三&#xff…

【JavaEE】Spring Boot - 日志文件

【JavaEE】Spring Boot 开发要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】Spring Boot 开发要点总结&#xff08;3&#xff09;1. 日志有什么作用2. 日志格式2.1 日志框架原理 3. 日志的打印3.1 System.out.println3.2 使用日志框架3.3 日志级别3.3.1 设置默认日志显…

论文阅读---《Unsupervised T ransformer-Based Anomaly Detection in ECG Signals》

题目&#xff1a;基于Transformer的无监督心电图&#xff08;ECG&#xff09;信号异常检测 摘要 异常检测是数据处理中的一个基本问题&#xff0c;它涉及到医疗感知数据中的不同问题。技术的进步使得收集大规模和高度变异的时间序列数据变得更加容易&#xff0c;然而&#xff…

Unity 中检测射线穿过的所有的物体

在开发中 有个需求&#xff0c;射线要检测所有穿过的物体。 代码如下&#xff1a; using UnityEngine;public class HitCollider : MonoBehaviour {public float raycastDistance Mathf.Infinity;// Update is called once per framevoid Update(){Ray ray Camera.main.Scre…

GIT-HUB上传大文件.docx

下载git Github上传大文件&#xff08;&#xff1e;25MB&#xff09;教程_UestcXiye的博客-CSDN博客 上传流程 https://blog.csdn.net/weixin_35770067/article/details/116564429?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-blog-2%7Ed…

WebRTC | 音视频直播客户端框架

端到端通信互动技术可分解为以下几个技术难点&#xff1a;客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。 一、音视频直播 音视频直播可分成两条技术路线&#xff1a;一条是以音视频会议为代表的实时互动直播&#xff1b;另一条是以娱乐直播为代…

Fabric

Fabric Fabric.js是一个非常好用的Javascript HTML5 canvas库&#xff0c;封装了canvas原生较为复杂的api&#xff0c;在canvas元素的顶部提供交互式对象模型&#xff0c;用于实现图片的变形旋转拖拉拽等功能。 在线demo: 官网链接 下载 npm install fabric --save或 yarn …

实力认证 | 百分点科技蝉联中国大数据企业50强

近日&#xff0c;第八届中国大数据产业生态大会在京召开 &#xff0c;本届大会以“数实共融 生态共建”为主题&#xff0c;由赛迪传媒、大数据产业生态联盟、《软件和集成电路 》杂志社联合主办。会上颁布多个奖项&#xff0c;百分点科技斩获2023中国大数据企业50强、金沙奖“…

由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序,怎么解决

vcruntime140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2015中的一个动态链接库文件。它是用于支持在Windows操作系统上运行使用Visual C编写的应用程序或游戏所必需的文件之一。当出现vcruntime140_1.dll丢失的错误时&#xff0c;通常是由于缺少或损坏了…

作者推荐 | 【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(系统服务调优)

全方面带你透彻探索服务优化技术方案&#xff08;服务器系统性能调优&#xff09; 调优意义计划分析 流程相关分析优化分析Nginx请求服务日志将请求热度最高的接口进行优化异步调用优化方式注意要点 分析调用链路追踪体系建立切面操作分析性能和数据统计存储相关的调用以及耗时…

拓展知识 启望未来 | 记内蒙古移动《AntDB ACA初级认证培训》活动

炎炎六月&#xff0c;迎来了备受期待的“亚信科技AntDB数据库初级认证培训”活动。通过培训&#xff0c;希望内蒙古移动及项目组的伙伴们能够系统学习到国产数据库的核心知识&#xff0c;提升专业技能&#xff0c;为服务感知提升、运维团队培育注入新的活力。 26号上午&#xf…

Pytest测试框架3

目录&#xff1a; pytest结合数据驱动-yamlpytest结合数据驱动-excelpytest结合数据驱动-csvpytest结合数据驱动-jsonpytest测试用例生命周期管理&#xff08;一&#xff09;pytest测试用例生命周期管理&#xff08;二&#xff09;pytest测试用例生命周期管理&#xff08;三&a…

rust-异步学习

rust获取future中的结果 两种主要的方法使用 async: async fn 和 async 块 async 体以及其他 future 类型是惰性的&#xff1a;除非它们运行起来&#xff0c;否则它们什么都不做。 运行 Future 最常见的方法是 .await 它。 当 .await 在 Future 上调用时&#xff0c;它会尝试把…

vue2.29-Vue3跟vue2的区别

1、vue3介绍 更新&#xff08;和重写&#xff09;Vue的主要版本时&#xff0c;主要考虑两点因素&#xff1a;首先是新的JavaScript语言特性在主流浏览器中的受支持水平&#xff1b;其次是当前代码库中随时间推移而逐渐暴露出来的一些设计和架构问题。 相较于vue2&#xff0c;vu…

从零开始打造你的书店小程序商城

随着互联网的发展&#xff0c;线上商城成为了书店经营的重要方式之一。如何快速搭建一个符合书店特点的小程序商城呢&#xff1f;下面将为您详细介绍利用乔拓云平台搭建一个符合书店特点的小程序商城的步骤。 首先&#xff0c;登录乔拓云平台&#xff0c;进入商城后台管理页面。…

uniapp两个单页面之间进行传参

1.单页面传参&#xff1a;A --> B url: .....?code JSON.stringify(param), 2.单页面传参B–>Auni.$emit() uni.$on()

Aspose.Imaging for Python via .NET Crack

Aspose.Imaging for Python via .NET Crack Aspose.Imaging for Python via.NET是一个提供高级图像处理功能的库。您可以使用此API轻松创建、加载、操作、转换或压缩图像。另外&#xff0c;Aspose.Imaging for Python通过.NET支持绘图和使用图形基元。图像导出和转换-API的核心…

使用XMLHttpRequest实现文件异步下载

1、问题描述 我想通过异步的方式实现下载文化&#xff0c;请求为post请求。一开始我打算用ajax。 $.ajax({type:post,contentType:application/json,url:http://xxx/downloadExcel,data:{data:JSON.stringify(<%oJsonResponse.JSONoutput()%>)},}).success(function(dat…

旅游系统开源

线上旅游电子商务系统 适用业务场景&#xff1a; 线路、酒店、门票、租车、邮轮、导游、团购、签证、特产、户外、商城等。 支持B2C\B2B2C\B2B业务&#xff0c;支持微信公会号、微信小程序、PC端等等。 源码介绍&#xff1a; 1、采用WEB软件应用最广泛的PHPMYSQL语言 采用B…

4大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)

四大软件测试策略分别是单元测试、集成测试、确认测试和系统测试。 一、单元测试 单元测试也称为模块测试&#xff0c;它针对软件中的最小单元&#xff08;如函数、方法、类、模块等&#xff09;进行测试&#xff0c;以验证其是否符合预期的行为和结果。单元测试通常由开发人…