[LeetCode周赛复盘] 第 325 场周赛20221225

news2024/10/7 8:21:56

[LeetCode周赛复盘] 第 325 场周赛20221225

    • 一、本周周赛总结
    • 二、 [Easy] 6269. 到目标字符串的最短距离
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、[Medium] 6270. 每种字符至少取 K 个
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、[Medium] 6271. 礼盒的最大甜蜜度
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 五、[Hard] 6272. 好分区的数目
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • T1暴力。
  • T2滑窗。
  • T3二分。
  • T4背包。

在这里插入图片描述

二、 [Easy] 6269. 到目标字符串的最短距离

链接: 6269. 到目标字符串的最短距离

1. 题目描述

在这里插入图片描述

2. 思路分析

两种遍历,找最短的写。

3. 代码实现

class Solution:
    def closetTarget(self, words: List[str], target: str, startIndex: int) -> int:
        n = len(words)
        if target not in words:
            return -1
        # a = 0
        # for i in range(n):
        #     if words[(i+startIndex)%n] == target:
        #         a = i
        #         break
        # b = 0
        # for i in range(n):
        #     if words[(startIndex-i)%n] == target:
        #         b = i
        #         break
        # return min(a,b)
        ans = n
        for i,w in enumerate(words):
            if w == target:
                ans = min(ans,(i-startIndex)%n,(startIndex-i)%n)
        return ans

三、[Medium] 6270. 每种字符至少取 K 个

链接: 6270. 每种字符至少取 K 个

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 把s翻倍,然后在中间位置滑窗,即有效的答案窗口必须包含n-1或者n的位置。

  • 灵神的思路是,先从后缀找到最小合法串,然后尝试增加前缀,减小后缀。

  • 还有一种滑窗思路,从中间去掉最长一段,使剩下的abc个数满足题意;即中间段的abc个数需要<=原数-k

3. 代码实现

翻倍滑窗

class Solution:
    def takeCharacters(self, s: str, k: int) -> int:
        c = Counter(s)
        if any(c[x]<k for x in 'abc'):
            return -1
        if k == 0:
            return 0
        ss = s + s
        n = len(s)
        c = Counter()
        q = deque()
        ans = inf
        for r,v in enumerate(ss):
            c[v] += 1
            q.append(r)
            while q and c[ss[q[0]]] > k:
                c[ss[q.popleft()]] -= 1
            # print(c,q)
            if len(q)<ans and len(q)>=3*k and q[0]<=n and q[-1]>=n-1 and  c['a']>=k and c['b']>=k and c['c']>=k:
                  ans = len(q)
        return ans)

前后双指针

class Solution:
    def takeCharacters(self, s: str, k: int) -> int:
        c = Counter(s)
        if any(c[x]<k for x in 'abc'):
            return -1
        if k == 0:
            return 0
        j = n = len(s)
        c = Counter()        
        q = deque()
        while c['a']<k or c['b']<k or c['c']<k:            
            j -= 1
            q.appendleft(j)
            c[s[j]] += 1

        ans = len(q)
        for i,v in enumerate(s):
            c[v] += 1
            while q and c[s[q[0]]] > k:
                c[s[q.popleft()]] -= 1
            # print(c,q)
            ans = min(ans,len(q)+i+1)
        return ans

四、[Medium] 6271. 礼盒的最大甜蜜度

链接: 6271. 礼盒的最大甜蜜度

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 最小值最大化,又是二分。
  • ok(x)代表任意差不小于x时,能否找出k类糖果;显然x越小,越能满足。单调的。
  • ok函数内部贪心,由于要尽可能多去多选,因此可以必选最小的,然后向后尽可能取最近的满足超过x的糖果。计数能否满足k个即可。

3. 代码实现

class Solution:
    def maximumTastiness(self, price: List[int], k: int) -> int:
        n = len(price)
        mx = max(price) - min(price)
        if k == 2:
            return mx
        price.sort()
        
        def ok(x):
            # 二分判断模板,越小的x满足要求,则yes=0 no=1,答案应是最后一个0的位置即bisect_left(range(xxx),1,key=ok)-1
            yes,no = 0,1
            c = 1  # 计数
            pre = price[0]
            for p in price[1:]:
                if p-pre>=x:
                    c += 1
                    pre = p
                    if c>=k:
                        return yes  # 足够了
            return no
        
        return bisect_left(range(mx+1),1,key=ok)-1

五、[Hard] 6272. 好分区的数目

链接: 6272. 好分区的数目

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 这题目一看像背包,但又发现要>=k的数量,不好写。
  • 因此反着算,求<k的方案数,再计算总体方案数,相减即可。
  • 比赛时由于不会特判错误情况,只能最后判断大小,导致中途不能取模,很可能TLE,但是赛后造了下数据没有TLE,很怪。可能力扣的数据量还是不够极限。
  • 定义f[j]为取任意数求和为j的方案数,由于两边是对称的且不会重(提前特判了非法的重复),因此我们可以sum(f)*2来计算总的<k的方案数。

3. 代码实现

MOD = 10**9 + 7
class Solution:
    def countPartitions(self, nums: List[int], k: int) -> int:        
        # 特判很关键,代表任意分组都无法让两边同时满足;这样就会剔除背包计算出来的一边小于k,但另一边也小于k的重复数据
        # 即:背包的结果一定是一边小于k,而剩下的不小于k,对称无重复,可以放心乘2
        if k*2>sum(nums):  
            return 0
        f = [0]*k
        f[0] = 1
        for x in nums:
            for j in range(k-1,x-1,-1):
                f[j] = (f[j] + f[j-x]) % MOD
        return (pow(2, len(nums), MOD) - sum(f)*2%MOD) %MOD
        
        # # # #以下是错误答案,由于不会上边那个特判,因此只能最后判断大小,导致中途不敢取模,大数据必TLE
        # n = len(nums)
        # f = [0]*k
        # f[0] = 1
        # for x in nums:
        #     for j in range(k-1,x-1,-1):
        #         f[j] += f[j-x]
        # print(n)
        # a = 2**n
        # b = sum(f)*2
        # if a <= b:
        #     return 0
        # return (2**n - sum(f)*2)%MOD

六、参考链接

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

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

相关文章

<Linux线程同步>——《Linux》

目录 1. Linux线程同步 1.1条件变量 1.2同步概念与竞态条件 1.3条件变量函数 1.4 为什么pthread_ cond_ wait 需要互斥量? 1.5 条件变量使用规范 后记&#xff1a;●由于作者水平有限&#xff0c;文章难免存在谬误之处&#xff0c;敬请读者斧正&#xff0c;俚语成篇&am…

论文阅读技巧

文献阅读思维 为什么你花了大量的时间来看文献却没有收获&#xff1f;那是因为你漫无目的的看文献&#xff0c;能有什么收获&#xff1f;所以我们要带着两个问题有目的的阅读文献。这个目的是什么&#xff1f;就是为了给自己找创新思路。同时在看摘要的时候你问自己第一个问题…

Mac (M1)搭建QGC地面站环境

之前朋友介绍了一个活&#xff0c;刚开始以为是针对树莓派进行二次开发。到了之后才发现&#xff0c;全新的领域&#xff0c;抱着试一试的想法就蛮答应了下来。后来在搭建环境的过程了一路受挫&#xff0c;不过就在写此文前几分钟&#xff0c;终于看到了成功的标志&#xff0c;…

2022年春秋杯网络安全联赛-冬季赛RE部分题解

easy_python python字节码 逻辑整理后就给flag flag [204, 141, 44, 236, 111, 140, 140, 76, 44, 172, 7, 7, 39, 165, 70, 7, 39, 166, 165, 134, 134, 140, 204, 165, 7, 39, 230, 140, 165, 70, 44, 172, 102, 6, 140, 204, 230, 230, 76, 198, 38, 175] for i in rang…

C++进阶(一)C++新特性:智能指针、右值引用、lambda、多线程操作、function和bind、可变模板参数

layout: post title: C进阶&#xff08;一&#xff09;C新特性&#xff1a;智能指针、右值引用、lambda、多线程操作、function和bind、可变模板参数 description: C进阶&#xff08;一&#xff09;C新特性&#xff1a;智能指针、右值引用、lambda、多线程操作、function和bind…

圣诞节来啦,快把这个动态爱心送个那个TA

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

_15LeetCode代码随想录算法训练营第十五天-C++二叉树

_15LeetCode代码随想录算法训练营第十五天-C二叉树 题目列表 110.平衡二叉树257.二叉树的所有路径404.左叶子之和 110.平衡二叉树 题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每…

雪花算法和uuid比较

1. 雪花算法 ​ 现在的服务基本是分布式、微服务形式的&#xff0c;而且大数据量也导致分库分表的产生&#xff0c;对于水平分表就需要保证表中 id 的全局唯一性。对于 MySQL 而言&#xff0c;一个表中的主键 id 一般使用自增的方式&#xff0c;但是如果进行水平分表之后&…

结构体(10)

目录 1、结构体的声明 1、结构体的声明 2、结构体变量的定义和初始化 2、结构体成员的访问 3、结构体传参 1、结构体的声明 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1、结构体的声明 例如&#xff1a;描述一个学生 注…

KOOM线上APM监控最全剖析

APM&#xff0c;全称是Application Performance Management&#xff0c;也就是应用性能管理&#xff0c;这与我们平时写的业务可能并不相关&#xff0c;但是却承载着App线上稳定的责任。当一款App发布到线上之后&#xff0c;不同的用户有不同场景&#xff0c;一旦App出现了问题…

【云原生系列CKA备考】新建虚拟机安装Ubuntu20.04系统

目录一、环境准备二 、安装虚拟机设置网络其他操作手册&#xff1a;安装 kubeadm 一台兼容的 Linux 主机(或者云主机)。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。 每台机器 2 GB 或更多的 RAM&#xff08;如果…

数据库,计算机网络、操作系统刷题笔记18

数据库&#xff0c;计算机网络、操作系统刷题笔记18 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

红中私教:计网那点事(1)

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;红中 &#x1f342;专栏地址&#xff1a;网安专栏 光明神已陨落&#xff0c;现在 由计网引领我 破戒了&#xff0c;本来…

前端开发:Vue封装通过API调用的组件的方法

前言 在前端开发中&#xff0c;关于Vue的使用相比大家并不陌生&#xff0c;而且Vue框架的优势也是其他框架所不能比的&#xff0c;尤其是Vue的封装思想更是堪称一绝&#xff0c;还有就是组件化的运用实践过程也是亮点。所以关于Vue框架的使用想必看官都不陌生&#xff0c;而且常…

TCP 的主要特点(计算机网络-运输层)

目录 传输控制协议&#xff08;Transmission Control Protocol&#xff0c;TCP&#xff09; TCP 连接与面向字节流的概念 TCP 的连接 UDP与TCP复用的区别 传输控制协议&#xff08;Transmission Control Protocol&#xff0c;TCP&#xff09; TCP 是面向连接的运输层协议 …

【算术】数据结构

MySQL性能优化1、数据结构前言2、常见的数据结构2.1 线性表2.1.1 数组2.1.2 链表2.1.3 栈2.1.4 队列2.2 散列表2.3 树2.3.1 二叉树2.4 图1、数据结构前言 数据结构(data structure)是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合&#xff…

【工作流Activiti7】6、Activiti 7 源码学习

1. 启动分析 源码版本是 7.1.0.M6 首先从 ProcessEngineAutoConfiguration 开始 ProcessEngineAutoConfiguration 是activiti-spring-boot-starter 7.1.0.M6自动配置的入口类&#xff0c;在这里主要看 SpringProcessEngineConfiguration 主要是配置了自动部署 最最最重要的…

后渗透攻击(三)

目录 1、创建新账户 2、获取账号密码 3、远程屏幕控制 在进行提权后我们的操作空间就会大很多&#xff0c;可以进行一系列的创建新账户、获取账号密码、远程操控屏幕等等的操作。该文章就对一些常用的操作进行了整理。 1、创建新账户 查看目标靶机已存在用户 可以在meter…

[Jule CTF 2022] 部分WP

这个比赛参加的人极少&#xff0c;比赛有一星期那么长&#xff0c;快结束的时候来了个大牛&#xff0c;一下上到12000&#xff0c;我这6K只能排到第二了。不过题还是挺不错的。只是入口不是人链接&#xff0c;得自己输才能进&#xff0c;可能很多人因为这个没参加。 Crypto E…

【工作流Activiti7】5、Activiti7 多实例子流程

顾名思义&#xff0c;子流程是一个包含其他活动、网关、事件等的活动&#xff0c;这些活动本身形成了一个流程&#xff0c;该流程是更大流程的一部分。 使用子流程确实有一些限制&#xff1a; 一个子流程只能有一个none类型的启动事件&#xff0c;不允许有其他类型的启动事件…