[LeetCode周赛复盘] 第 330 场周赛20230129

news2024/11/16 12:26:25

[LeetCode周赛复盘] 第 330 场周赛20230129

    • 一、本周周赛总结
    • 二、 [Easy] 6337. 统计桌面上的不同数字
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、[Medium] 6338. 猴子碰撞的方法数
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、[Hard] 6339. 将珠子放入背包中
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 五、[Hard] 6340. 统计上升四元组
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • T3又被脑筋急转弯卡了,想了一小时Dp。
  • T1 脑筋急转弯+数学。
  • T2 脑筋急转弯+快速幂取模。
  • T3 脑筋急转弯+排序。
  • T4 枚举计算/DP。
    在这里插入图片描述

二、 [Easy] 6337. 统计桌面上的不同数字

链接: 6337. 统计桌面上的不同数字

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 每次操作,每个数的i-1都会新增出来。但1不会。
  • 也就是最终2~n之间的数都会出来。
  • 题目限制n<=100,但 进行1e9次操作,因此必能操作到头。
  • 也就是除了n=1的情况,其它都会出现2~n,即n-1个数。

3. 代码实现

class Solution:
    def distinctIntegers(self, n: int) -> int:
        if n == 1:
            return 1
        return n-1

三、[Medium] 6338. 猴子碰撞的方法数

链接: 6338. 猴子碰撞的方法数

1. 题目描述

在这里插入图片描述

2. 思路分析

题目有歧义。实际上路径也不能相撞,否则偶数的话可以相邻猴子两两交换位置。
  • 考虑不撞的方法,只有两种,就是一起顺时针或逆时针走。
  • 所有走法一共有2**n。需要用快速幂取模模板。
  • 这里是py就逃课了。

  • 一开始太相信py的大数,直接2**n-2,再取模,确实TLE,pow就没问题。

3. 代码实现

MOD = 10**9+7
class Solution:
    def monkeyMove(self, n: int) -> int:
        return (pow(2,n,MOD) - 2) % MOD 

四、[Hard] 6339. 将珠子放入背包中

链接: 6339. 将珠子放入背包中

1. 题目描述

在这里插入图片描述

2. 思路分析

这题看似能DP,于是优化了一个小时都没做出来。
转化下思路就过了。
  • 在最大最小值里,首尾两个数必会出现1次,因此无视。
  • 那么剩下的从哪取呢,想想有k-1根棍子分割这n个柱子。
  • 柱子两边的数就是这根棍子的贡献。那么排序所有可能的贡献,最大的k-1个和最小的k-1个就是答案。

3. 代码实现

class Solution:
    def putMarbles(self, w: List[int], k: int) -> int:
        if k == 1 or k == len(w):
            return 0
        a = []
        for x,y in pairwise(w):
            a.append(x+y)
        a.sort()
        return sum(a[-k+1:]) - sum(a[:k-1])

五、[Hard] 6340. 统计上升四元组

链接: 6340. 统计上升四元组

1. 题目描述

在这里插入图片描述

2. 思路分析

注意题目要求里k和j的相对位置,要求a1<a3<a2。
  • 两层循环枚举j和l。即第二个数和第四个数。
  • 在j和l之间的数k,如果小于nums[j],则可以去j前边找有多少个i满足nums[i]小于num[k],那就是几个ik对;如果大于,则可以加上所有k的贡献(即有多少ik对)。
  • 因此用一个有序集合pre跟着j走,记录j之前所有数,便于二分。
  • 外层循环枚举j,内层循环可以看成两种:
    • j右侧的数大于nums[j]的是l,小于的是k。
    • 即同时枚举k和l。
  • 这里用的nnlgn的做法,后续补充一个n*n的dp。

  • 补充n方做法。
  • 枚举j和k,这样当nums[j]>nums[k]时,k后边能选大于nums[j]的数,j前边能选小于nums[k]的数。
  • 如果能计数,则乘起来即可。
  • 可以用n方的时间计算这两个二维数组:
    • great[i][v]代表i右边大于v的数有多少个。
    • less[i][v]代表i左边小于v的数有多少个。
  • 具体计算方法有点类似子序列自动机,从前一个状态整体迁移过来,然后再计算本身的差异。
  • 注:我后来试了树状数组,发现nnlgn的树状数组做法和n方的dp时间表现没什么差异:py的空间大了确实费性能。

  • 补充一个方法三,空间O(n),时间O(n2),注释写的很详细。表现良好1276ms.

3. 代码实现

class Solution:
    def countQuadruplets(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0
        from sortedcontainers import SortedList
        pre = SortedList()
        for j in range(n):
            mid = 0
            for l in range(j+1,n):
                if nums[l] < nums[j]:
                    mid += pre.bisect_left(nums[l])
                else:
                    ans += mid
            
            pre.add(nums[j])
        return ans       

n方dp

class Solution:
    def countQuadruplets(self, nums: List[int]) -> int:
        n = len(nums)
        great = [[]] * n 
        great[-1] = [0]*(n+1)
        for k in range(n-2,-1,-1):
            great[k] = great[k+1][:]
            for v in range(1,nums[k+1]):
                great[k][v] += 1
        ans = 0
        less = [0]*(n+1)
        for j in range(1,n-1):
            for v in range(nums[j-1],n+1):
                less[v] += 1
            for k in range(j+1,n-1):
                if nums[j] > nums[k]:
                    ans += less[nums[k]] * great[k][nums[j]]
        return ans

方法三

class Solution:
    def countQuadruplets(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0 
        cnt = [0] * n   # cnt[j]表示以j为高点的,132形状的三元组数量
        for l in range(n):
            small = 0  # j前边小于nums[l]的数量
            for j in range(l):
                if nums[j] < nums[l]:  # 如果高点小,就是满足
                    ans += cnt[j]
                    small += 1  # 且记一个小的数
                else:
                    cnt[j] += small  # 否则可以贡献small个三元组
        return ans 

六、参考链接

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

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

相关文章

过年了,给网站加个灯笼+飘雪效果!

过年了&#xff0c;下面分享一个网站的特效&#xff0c;给网站添加一个新春灯笼和飘雪的效果&#xff0c;过年期间多一点年味。灯笼特效下面是css样式&#xff0c;可以放在公共样式中&#xff1a;.deng-box{position:fixed;top:-40px;right:150px;z-index:9999;pointer-events:…

【音视频工具】前端屏幕录制工具 + 录制<video>标签内容

一、录制的实现思路 1.开始录制、停止录制、下载视频 2.Blob介绍 3.概念 var mediaRecord //用于录制视频 var mediaStream //视频流 var videoBuffer [] //保存的视频数据二、屏幕录制工具 下载地址&#xff1a; https://chrome.google.com/webstore/detail/tampermonkey…

k8s之POD资源限制和健康监测

写在前面 本文一起看下POD的资源限制配置和健康监测的相关内容。 1&#xff1a;资源限制 如果是不对POD设置资源限制的话&#xff0c;若任由其占用系统资源&#xff0c;可能会造成非常严重的后果&#xff0c;所以我们需要根据具体情况来设置资源限制&#xff0c;如使用多少内…

怎样把截图转换成文字?三分钟教会你如何截图转文字

在日常的学习中&#xff0c;当你在网上看到一篇文章&#xff0c;而当中的某一段话很适合拿来用在自己的写作上&#xff0c;但是你却无法直接将其复制粘贴下来&#xff0c;只能先截图下来再手动输入&#xff0c;这种方法虽然可行&#xff0c;但比较消耗时间和精力&#xff0c;那…

详细图解LeetCode经典链表算法题

文章目录链表类型算法题一、链表介绍本文使用的Java中链表类&#xff1a;二、链表基础题1、数组转链表代码&#xff1a;测试&#xff1a;2、单链表翻转题目&#xff1a;代码&#xff1a;解析&#xff1a;测试&#xff1a;补充&#xff1a;3、合并两个有序链表题目&#xff1a;解…

顺应信创发展,君子签电子签章方案全面适配信创环境

信创产业作为战略性新兴产业&#xff0c;近年来&#xff0c;国家不断出台相关政策对行业的发展进行支持。 2018年我国首次将信创纳入国家战略&#xff0c;并提出了 “28N”应用体系&#xff0c;信创发展步入“快车道”&#xff1b;2020年起&#xff0c;信创产业由党政逐渐向其…

垃圾收集器必问系列—ZGC

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 人的一切痛苦&#xff0c;本质上都是对自己的无能的愤怒。——王小波 文章目录Region布局读屏障染色指针染色指针的优势运作过程ZGC的优缺点ZGC有人称它为Zero GC&#xff0c;其实“Z”并非什么专业名词的缩写…

vue前端框架课程笔记(二)

目录计算属性问题引入插值语法实现methods配置属性实现computed配置属性一些问题getter与setter注意监视属性问题引入computed和methods实现watch属性watch属性简介computed与watch的比较注意本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以…

千峰网络安全笔记(前三讲)

典中典 《c语言从研发到脱发》 《C从入门到放弃》 《Java从跨平台到跨行业》 《Ios开发从入门到下架》 《Android开发大全——从开始到转行》 《PHP由初学至搬砖》 《黑客攻防:从入门到入狱》 《Mysql从删库到跑路》 《服务器运维管理从网络异常到硬盘全红》 《服务器运维管理…

CentOS 8 中dnf管理器如何仅下载不安装软件

在某些情况下&#xff0c;我们希望从命令行下载特定或一组 RPM 包而不安装它。虽然我们可以使用 wget 命令下载&#xff0c;但 wget 不会下载安装包的依赖项。在 CentOS 8 中DNF&#xff08;或 yum&#xff09;是一个命令行包管理工具。使用 DNF我们可以安装、更新和删除 rpm 包…

HTTP协议学习

一、http请求协议1、常见请求头accept:浏览器通过这个头告诉服务器&#xff0c;它所支持的数据类型Accept-Charset: 浏览器通过这个头告诉服务器&#xff0c;它支持哪种字符集Accept-Encoding&#xff1a;浏览器通过这个头告诉服务器&#xff0c;支持的压缩格式Accept-Language…

114.简单的动态切换app的图标

1.第一步 通过activity-alias别名实现&#xff0c;manifest 这里写的是一个默认的图标Default和一个需要切换的图标Test&#xff0c;以及一个默认的首页面HomeActivity&#xff1a; <!-- 默认的图标--> <activity-aliasandroid:name".activity.Default"and…

C语言入门教程||C语言 运算符||C语言 判断

C语言 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算…

基于android的大学生图书管理系统app

需求信息&#xff1a; 1.学生用户端 查询图书。学生用户可以对馆内图书资料进行简单和高级的查询。 预约图书。当查询时发现要借阅的图书已被借阅&#xff0c;可以提前预约。 挂失图书。图书不慎丢失&#xff0c;可以在学生端实现挂失。 2.管理员端 学生用户管理。管理员可以对…

LeetCode——2309. 兼具大小写的最好英文字母

一、题目 给你一个由英文字母组成的字符串 s &#xff0c;请你找出并返回 s 中的最好英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母&#xff0c;则返回一个空字符串。 最好 英文字母的大写和小写形式必须 都 在 s 中出现。 英文字母 b 比另一个英文字母 a …

Python 操作pdf(pdfplumber读取PDF写入Exce)

1. Python 操作pdf(pdfplumber读取PDF写入Exce) 1.1 安装pdfplumber模块库: 安装pdfplumber: pip install pdfplumber 复制代码 pdfplumber.PDF类 pdfplumber.PDF类表示单个PDF ,并具有两个主要属性: 属性说明pdf.metadata从PDF的Info中获取元数据键/值对字典。通常包括&q…

【HBase——陌陌海量存储案例】4. Apache Phoenix 介绍与安装

5. 性能问题 Hbase默认只支持对行键的索引&#xff0c;那么如果要针对其它的列来进行查询&#xff0c;就只能全表扫描之前介绍的查询是使用scan filter组合来进行查询的&#xff0c;但查询地效率不高&#xff0c;因为要进行顺序全表扫描而没有其他索引。如果数据量较大&#…

51单片机学习笔记-8 DS1302实时时钟

8 DS1302实时时钟 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 8.1 芯片介绍&#xff1a;DS1302 RTC(Real Time Clock)实时时钟&#xff0c;是一种集成电路&#xff0c;通常称为时钟芯片。常见的时…

AIGC在营销图片生成技术综述

基于文本生成素材imagen分析用户输入的文本并使用T5-XXL进行编码。嵌入在 AI 中的文本首先被转换为分辨率为64x64像素的小图像。Imagen进一步利用文本条件超分辨率扩散模型对图像进行6464的上采样&#xff0c;然后这个图像继续增长并最终形成。Imagen 的开发者谷歌研究的大脑团…

剑指 Offer 第11天 第12天

目录 剑指 Offer 18. 删除链表的节点 剑指 Offer 22. 链表中倒数第k个节点 剑指 Offer 25. 合并两个排序的链表 剑指 Offer 52. 两个链表的第一个公共节点 剑指 Offer 18. 删除链表的节点 给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。…