[LeetCode周赛复盘] 第 340 场周赛20230409

news2024/10/7 20:36:54

[LeetCode周赛复盘] 第 340 场周赛20230409

    • 一、本周周赛总结
    • 二、 6361. 对角线上的质数
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、6360. 等值距离和
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、6359. 最小化数对的最大差值
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 五、 6353. 网格图中最少访问的格子数
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现。
    • 六、参考链接

一、本周周赛总结

  • 这周都还挺难的。
  • T1 判断质数。
  • T2 预处理+前缀和+二分。
  • T3 二分答案。
  • T4 并查集优化剪枝转移状态的BFS(和上周一样)。

在这里插入图片描述

二、 6361. 对角线上的质数

链接: 6361. 对角线上的质数

1. 题目描述

在这里插入图片描述

2. 思路分析

按题意模拟即可。

  • 由于数据范围4e6,没敢上筛;但是n小,所以暴力了(其实可以上筛);结果没判断1是合数,结果wa了。。

  • 这题证明了py的埃氏筛就是比欧拉筛快。
  • 在这里插入图片描述
    在这里插入图片描述
  • 在这里插入图片描述

3. 代码实现


class Solution:
    def diagonalPrime(self, nums: List[List[int]]) -> int:
        p = set()
        m,n = len(nums),len(nums[0])
        for i in range(n):
            p.add(nums[i][i])
            p.add(nums[i][n-i-1])
            
        def is_prime(x):            
            if x <=1:
                return False
            if x == 2 or x == 3:
                return True 
            for i in range(2,int(x**0.5)+1):
                if x % i ==0:
                    return False 
            return True
           
            
        ans = 0
        for x in p:
            if is_prime(x):
                ans = max(ans,x)
        return ans

三、6360. 等值距离和

链接: 6360. 等值距离和

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 一看考过差不多的,但是要分组。
  • 忘记预处理Tle。。
  • 按值分组,记录下标列表。
  • 对每个位置i,二分对应的列表找到i的位置。
  • 那么ans[i]可以用前缀和/后缀和计算了。

3. 代码实现

class Solution:
    def distance(self, nums: List[int]) -> List[int]:
        n = len(nums)
        d = defaultdict(list)
        for i,v in enumerate(nums):
            d[v].append(i)
        pres = defaultdict(list)
        for k,v in d.items():
            pres[k] =  [0] + list(accumulate(v))
        ans = [0] * n
        for i,v in enumerate(nums):
            p = d[v]
            n = len(p)
            if len(p)<=1:
                continue 
            pre = pres[v]
            pos = bisect_left(p,i)
            # print(p,pre,pos)
            ans[i] = i*(pos+1) - pre[pos+1] + pre[-1] - pre[pos+1] - i*(n-pos-1)
        return ans

四、6359. 最小化数对的最大差值

链接: 6359. 最小化数对的最大差值

1. 题目描述

在这里插入图片描述

2. 思路分析

最大值最小化,警觉。
  • 最大值最小化等价于二分答案。
  • 设f(x)为选出的序列中最大差值不超过x时,能否找到s对序列。
  • 显然,若f(x)==True,则f(x+1)一定是True,f(x-1)不一定,因此有二段性。找到最小的x即可。
  • f(x)怎么写呢,要让差值尽可能小,考虑每个数,排序后和相邻的数据组合就是最小值。
  • 贪心的试图组合每个数即可。你可能会质疑贪心的正确性:考虑(a,b,c,d),若ab能组合,那会使选出的对+1;如果不组合,b也只可能跟后边的c组合,而且占用了c,不会使答案更优。

3. 代码实现

class Solution:
    def minimizeMax(self, nums: List[int], p: int) -> int:
        n = len(nums)
        nums.sort()
        
        def ok(x):
            s = 0
            i  = 0
            while i < n-1:
                if nums[i+1] - nums[i] <= x:
                    s += 1
                    i += 1
                i += 1
            return s >= p 
        
        return bisect_left(range(10**9+1),True,key=ok)    

五、 6353. 网格图中最少访问的格子数

链接: 6353. 网格图中最少访问的格子数

1. 题目描述

在这里插入图片描述

2. 思路分析

没想到出了上周T4的加强版。
  • 乍一看是普通BFS最短路,但是由于转移目标是一个range(注意是连续的范围),暴力转移可能会TLE。
  • 因此可以用有序集合或者并查集删除,转移时直接通过数据结构找下一个转移目标,这样每个目标只会被访问一次,就可以AC啦!
  • 时间复杂度O(nm),这里认为并查集的均摊复杂度是O(1)。

  • 对每行每列都建立独立的并查集,一共m+n个。
  • 当访问(x,y)后,把它和右边/下边的坐标连接,union对应的(x,y+1)和(x+1,y+1),这样就等于删除(x,y)。
  • 我提交的版本没有连接另一个方向的坐标,也过了,但是跑得慢一点。应该是不影响正确性的,但每个坐标要访问两次了。

3. 代码实现。

class DSU:
    def __init__(self, n):
        self.fathers = list(range(n))

    def find_fa(self, x):
        fs = self.fathers
        t = x
        while fs[x] != x:
            x = fs[x]
        while t != x:
            fs[t], t = x, fs[t]
        return x

    def union(self, x: int, y: int) -> bool:
        x = self.find_fa(x)
        y = self.find_fa(y)

        if x == y:
            return False
        # if self.size[x] > self.size[y]:  # 注意如果要定向合并x->y,需要干掉这个;实际上上边改成find_fa后,按轶合并没必要了,所以可以常关
        #     x, y = y, x
        self.fathers[x] = y
        return True

class Solution:
    def minimumVisitedCells(self, grid: List[List[int]]) -> int:
        m,n = len(grid),len(grid[0])
        if m==n==1:
            return 1
        def inside(x,y):
            return 0<=x<m and 0<=y<n
        rows = [DSU(n+1) for _ in range(m)]
        cols = [DSU(m+1) for _ in range(n)]
        ans = 1
        q = deque([(0,0)])
        rows[0].union(0,1)
        cols[0].union(0,1)
        while q:
            ans += 1
            for _ in range(len(q)):
                x,y = q.popleft()
                if x == m-1 and y == n-1:
                    return ans - 1
                mn,mx = min(y+1,n-1),min(grid[x][y]+y,n-1)
                dsu1,dsu2 = rows[x],cols[y]
                while mn <= mx:
                    mn = dsu1.find_fa(mn)
                    if mn <= mx:
                        if x == m-1 and mn == n-1:
                            return ans
                        q.append((x,mn))
                        dsu1.union(mn,mn+1)
                        cols[mn].union(x,x+1)
                        mn += 1
                        
                mn,mx = min(x+1,m-1),min(grid[x][y]+x,m-1)
                
                while mn <= mx:
                    mn = dsu2.find_fa(mn)
                    if mn <= mx:
                        if mn == m-1 and y == n-1:
                            return ans
                        q.append((mn,y))
                        dsu2.union(mn,mn+1)
                        rows[mn].union(y,y+1)
                        mn += 1                                
                
        return -1       

六、参考链接

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

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

相关文章

【排序】排序这样写才对Ⅰ --插入排序与选择排序

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

Axios请求(对于ajax的二次封装)——Axios请求的响应结构、默认配置

Axios请求&#xff08;对于ajax的二次封装&#xff09;——Axios请求的响应结构、默认配置知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货axios请求的响应结构响应格式详解实际请求中的响应格式axios请求的默认配置全局axios默认值&#xff08;了解…

Debug | wget 的安装与使用(Windows)

!wget -nc http://labfile.oss.aliyuncs.com/courses/780/WeatherData.zip 报错信息&#xff1a; wget 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 分析&#xff1a; 在jupyter notebook中做机器学习时导入数据使用!wget遇到了这个问题&#xff0c;查到…

轻松上手git代码版本管理工具--协同开发-冲突解决、线上分支合并以及使用pycharm操作git

一、协同开发 多人合作开发一个项目---->多人公用一个远程仓库 以后台项目为例: git init # git管理设置忽略文件.gitignore git add .git commit -m 第一次提交,写完了首页功能远程新建一个远程仓库(空) 创建一个origin git remote add origin git@gitee.com:xx…

穿戴规范智能识别系统 yolov7

穿戴规范智能识别系统通过yolov7python网络模型AI深度视觉学习算法&#xff0c;穿戴规范智能识别系统对工厂画面中人员穿戴行为自动识别分析&#xff0c;发现现场人员未按照规定穿戴着装&#xff0c;立即抓拍告警。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c…

垃圾满溢检测系统 yolov5

垃圾满溢检测系统通过pythonyolov5网络模型技术&#xff0c;垃圾满溢检测系统对控画面中小区内的垃圾桶进行7*24小时不间断监控&#xff0c;发现垃圾桶溢满周围有堆积物立即触发预警推送给相关人员处理。YOLOv5中在训练模型阶段仍然使用了Mosaic数据增强方法&#xff0c;该算法…

kubeadm方式部署k8s最新版本V1.26.2

Kubernetes核心概念 Master主要负责资源调度&#xff0c;控制副本&#xff0c;和提供统一访问集群的入口。--核心节点也是管理节点 Node是Kubernetes集群架构中运行Pod的服务节点。Node是Kubernetes集群操作的单元&#xff0c;用来承载被分配Pod的运行&#xff0c;是Pod运行的宿…

测试7年,去过阿里也去过小公司,给你们年轻人一个忠告...

你眼中的软件测试岗位是怎样的&#xff1f;大部分人可能会给出这样的回答&#xff1a;“测试&#xff1f;简单啊&#xff0c;没什么技术含量&#xff0c;无非就是看需求、看业务手册、看设计文档、然后点点功能是否实现&#xff0c;麻烦点的就是测试下部署安装是否出现兼容性问…

分布式事务Seata原理

Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能与简单易用的分布式事务服务&#xff0c;为用户提供了 AT、TCC、SAGA 和 XA 几种不同的事务模式。Seata AT模式是基于XA事务演进而来&#xff0c;需要数据库支持。AT 模式的特点就是对业务无入侵式&#xff0…

【故障定位】基于多元宇宙算法的主动配电网故障定位方法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

LeetCode 37. 解数独

一、题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#x…

如果重回大学时光

目录如果重回大学时光1. 多参加社团活动&#xff0c;结交更多的朋友2. 认真考虑专业分流方向3. 根据兴趣和能力选择适合自己的出路4. 为未来做好准备&#xff0c;规划职业发展如果重回大学时光 当前我是一名普通的码农&#xff0c;还有几个月&#xff0c;又将有一批大学生将毕…

vue实现美观大方的动漫、cos、帖子类型网站

一、先上效果图 1.项目demo预览&#xff1a;点击预览 参照半次元的榜单-绘画榜、榜单-COS榜、榜单-写作榜、个人中心、登录注册页面&#xff0c;导航栏等&#xff0c;分别实现页面排版、数据交互、基础框架布局搭建以及自定义vue组件合理的封装及使用。在vue项目开发过程中&a…

梦中情树---二叉树

前言&#xff1a; 今天就来讲树的一种特殊结构---二叉树 当然先来给大家看一张图片 看到这棵树了吗&#xff1f;它从根开始&#xff0c;每个结点都有且仅有两个分支&#xff0c;这个结构就是我们的二叉树。 其实我们上次讲的堆也可以看成一棵二叉树&#xff0c;但是人家的本质…

【python】Jupyter的使用(python代码编辑器)

文章目录一、Jupyter的介绍1、Jupyter是什么&#xff1f;2、Jupyter有什么独特之处&#xff1f;二、Jupyter的安装1、首先要下载python2、用pip命令下载Jupyter三、Jupyter的使用1、运行Jupyter2、简要介绍Jupyter的使用方法3、快捷键的使用四、总结一、Jupyter的介绍 1、Jupy…

安卓系统软键盘初步分析

初步分析的相关日志 复现log: 11-05 14:01:24.768 7991 7991 V InputMethodManager: onViewClicked: true 11-05 14:01:24.768 7991 7991 D InputMethodManager: showSoftInput() viewandroidx.appcompat.widget.AppCompatEditText{bd0acc9 VFED..CL. .F.P..ID 0,0-900,9…

C# 基础:创建、数据类型转换、基本运算符、

VS 快捷键 Ctri K D 代码整理 Ctri KM O 代码收缩 Ctri J 弹出提示 halcon 窗体应用 添加在线第三方库 右键项目名 --> 管理NuGet程序包 halcon 界面&#xff0c;创建选择 添加halcon离线动态链接库 右键引用 --> 添加引用 --> 选择动态链接库 .dll文件 导入…

22勤于思考:gRPC都有哪些优势和不足?

如果你能从专栏的开篇词开始读到这篇文章并且能够在过程中认真思考,那么我相信你目前已经能够对gRPC有了较为充分了解。在专栏的最后几节中,我们抽出一篇文章。来探讨一下gRPC有哪些优势和不足,因为只有这样我们才能取其精华,去其糟粕,学习gRPC框架设计的优点,还能反观出…

NLP领域顶级会议和期刊汇总(附CCF最新推荐目录)

研究NLP需要关注学术界or大厂AI Lab最新的科研动态&#xff0c;了解技术发展的趋势&#xff0c;写论文才能下笔如有神。找到了论文就能找到要复现的代码和要用到的数据集。 掌握科研动态也有助于提早做好产品规划以及技术预研。 对于NLPer而言&#xff0c;了解科研动态最好的方…

总结:网卡

一、背景 经常听到eth0&#xff0c;bond0这些概念&#xff0c;好奇他们的区别&#xff0c;于是有了此篇文章记录下。 二、介绍 网卡&#xff1a;即网络接口板&#xff0c;又称网络适配器或NIC (网络接口控制器)&#xff0c;是一块被设计用来允许计算机在计算机网络上进行通讯…