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

[LeetCode周赛复盘] 第 312 场周赛20220925

[LeetCode周赛复盘] 第 312 场周赛20220925

    • 一、本周周赛总结
    • 二、 [Easy] 6188. 按身高排序
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、[Medium] 6189. 按位与最大的最长子数组
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、[Medium] 6190. 找到所有好下标
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 五、[Hard] 6191. 好路径的数目
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • T4 wa2次TLE3次,难受。
  • 并查集要好好练!
    在这里插入图片描述

二、 [Easy] 6188. 按身高排序

链接: 6188. 按身高排序

1. 题目描述

在这里插入图片描述

2. 思路分析

定级Easy。
按题意排序即可。

3. 代码实现

class Solution:
    def sortPeople(self, names: List[str], heights: List[int]) -> List[str]:
        return [a for a,b in sorted(zip(names,heights),key=lambda x:-x[1])]

三、[Medium] 6189. 按位与最大的最长子数组

链接: 6189. 按位与最大的最长子数组

1. 题目描述

在这里插入图片描述

2. 思路分析

定级Medium。

  • 两个数与的话,一定不能使任意数变大
  • 两个数相同使数不变。
  • 因此数组最大与结果k一定是最大那个数
  • 因此求出k,然后找连续的k的最长区间即可。

3. 代码实现

class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        n  = len(nums)
        ans = 1
        mx = max(nums)
        
        f = [0]*n
        if nums[0] == mx:
            f[0] = 1
        for i in range(1,n):
            if nums[i] == mx:
                f[i] = f[i-1]+1
        return max(f)
        

四、[Medium] 6190. 找到所有好下标

链接: 6190. 找到所有好下标

1. 题目描述

在这里插入图片描述

2. 思路分析

定级Medium。

  • dp
  • 用f和g记录每个位置i前边连续非增、非降的区间大小。
  • 然就检查题意区间[k,n-k)中所有下标两边的大小是否>=k即可。

3. 代码实现

class Solution:
    def goodIndices(self, nums: List[int], k: int) -> List[int]:
        n = len(nums)
        f = [1]*n
        g = [1]*n
        for i in range(1,n):
            if nums[i]<=nums[i-1]:
                f[i]= f[i-1]+1
            if nums[i] >= nums[i-1]:
                g[i] = g[i-1]+1
        ans = []
        for i in range(k,n-k):
            if f[i-1] >= k and g[i+k]>=k:
                ans.append(i)
        return ans

五、[Hard] 6191. 好路径的数目

链接: 6191. 好路径的数目

1. 题目描述

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

2. 思路分析

定级Hard

  • 并查集。
  • 先建图g。
  • 然后把点离线,从小到大排序。
  • 然后从小到大访问点,建立并查集,注意建立并查集的时候,扫描这个点连接的边:
    • 只能连接不大于当前点u的邻居v。
    • 只能连接已访问过(已经在并查集里)的邻居v 。
  • 然后查询当前点所在集合中,相同值的数量,这里边一定都小于等于当前值,则有多少个点就有多少路径。
  • 当前集合相同值一定存在一条路径(因为是连通的)。
  • 由于是从小到大建树,因此路径中、集合中一定不存在比它大的值。
  • 注意,自己单点也算一条长度1的路径。

3. 代码实现

class Solution:
    def numberOfGoodPaths(self, vals: List[int], edges: List[List[int]]) -> int:
        p = vals[:]
        n = len(vals)
        f = [Counter([p[i]]) for i in range(n)]
        # print(f)
        fathers = list(range(n))
        def find_father(x):
            if fathers[x] != x:
                fathers[x] = find_father(fathers[x])
            return fathers[x]          
        def union(x,y,z):
            x = find_father(x)
            y = find_father(y)
            if x==y:
                return
            fathers[x] = y      
            f[y][z]+=f[x][z]
        
        g = [[] for _ in range(n)]
        for u,v in edges:
            g[u].append(v)
            g[v].append(u)
            
        vals = sorted([(v,k) for k,v in enumerate(vals)])
        vis = set()
        ans = 0
        for i in range(n):
            v,k = vals[i]
            for x in g[k]:
                if p[x] <= v and x in vis:                    
                    union(k,x,v)
            x = find_father(k)
            ans += f[x][v]
            vis.add(k)
            
        # ans += n
        return ans                                      

六、参考链接

  • [python刷题模板] 并查集

相关文章:

  • 基于HTML+CSS+JavaScript的MIUI10官网网站设计与开发
  • Vue 新手期练手出现问题记录与解决方案——Vue练手项目“小问题“
  • 计算机组成原理-华科版本
  • 计算机网络原理 谢希仁(第8版)第五章习题答案
  • 记一次Netty堆外内存溢出OutOfDirectMemoryError
  • 设计模式详解:模式汇总与索引清单
  • SpringSecurity实战-第5章 自动登录和注销登录
  • Python基础内容训练9(文件操作)
  • 冰冰学习笔记:list的简单模拟
  • 基于鸽群优化算法的线性规划求解matlab程序
  • 【博客505】k8s Sig-scheduler Coscheduling调度器插件原理
  • 【Linux】I/O多路复用-SELECT/POLL/EPOLL
  • Python解释器路径寻找规则
  • [Qt桌面开发]一个Qt简单界面的开发
  • 文本的换行与包裹 之可能是全网最详细的 line-break 中文介绍
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android Studio:GIT提交项目到远程仓库
  • docker python 配置
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Github访问慢解决办法
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Javascript弹出层-初探
  • python大佬养成计划----difflib模块
  • 后端_ThinkPHP5
  • 回流、重绘及其优化
  • 力扣(LeetCode)21
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 再次简单明了总结flex布局,一看就懂...
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​2020 年大前端技术趋势解读
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​如何在iOS手机上查看应用日志
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)Nginx简介和安装教程
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (备忘)Java Map 遍历
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计ssm电影分享网站
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (十一)图像的罗伯特梯度锐化
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 物件導向與老子思想 (OO)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)大型网站架构演变和知识体系
  • (转)一些感悟
  • *上位机的定义
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .“空心村”成因分析及解决对策122344
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core WebAPI中封装Swagger配置