第 124 场双周赛

第 124 场双周赛

100221. 相同分数的最大操作数目 I - 力扣(LeetCode)

给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作:

  • 选择 nums 中的前两个元素并将它们删除。

一次操作的 分数 是被删除元素的和。

在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。

请你返回按照上述要求 最多 可以进行的操作次数。

示例 1:

输入:nums = [3,2,1,4,5]
输出:2
解释:我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [1,4,5] 。
- 删除前两个元素,分数为 1 + 4 = 5 ,nums = [5] 。
由于只剩下 1 个元素,我们无法继续进行任何操作。

示例 2:

输入:nums = [3,2,6,1,4]
输出:1
解释:我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [6,1,4] 。
由于下一次操作的分数与前一次不相等,我们无法继续进行任何操作。

提示:

  • 2 <= nums.length <= 100
  • 1 <= nums[i] <= 1000

思路:

直接正序遍历,每二步一跳,如果出现了不等于target的下标就break

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)
class Solution:def maxOperations(self, nums: List[int]) -> int:target = nums[0] + nums[1]ans = 0n = len(nums)for i in range(0, n - 1, 2):if nums[i] + nums[i + 1] == target:ans += 1else:breakreturn ans

3039. 进行操作使字符串为空 - 力扣(LeetCode)

给你一个字符串 s

请你进行以下操作直到 s

  • 每次操作 依次 遍历 'a''z',如果当前字符出现在 s 中,那么删除出现位置 最早 的该字符。

请你返回进行 最后 一次操作 之前 的字符串 s

示例 1:

输入:s = "aabcbbca"
输出:"ba"
解释:我们进行以下操作:
- 删除 s = "aabcbbca" 中加粗加斜字符,得到字符串 s = "abbca" 。
- 删除 s = "abbca" 中加粗加斜字符,得到字符串 s = "ba" 。
- 删除 s = "ba" 中加粗加斜字符,得到字符串 s = "" 。
进行最后一次操作之前的字符串为 "ba" 。

示例 2:

输入:s = "abcd"
输出:"abcd"
解释:我们进行以下操作:
- 删除 s = "abcd" 中加粗加斜字符,得到字符串 s = "" 。
进行最后一次操作之前的字符串为 "abcd" 。

提示:

  • 1 <= s.length <= 5 * 105
  • s 只包含小写英文字母。

思路:

我们可以分析得到,最后只有出现次数最多的字符串可以留下,其他的都会被删除,所以我们只需要记录每个字符出现的次数,然后倒序遍历字符串,最后反转字符串就可以得到答案了

  • 时间复杂度 O ( n ) O(n) O(n),仅遍历
  • 空间复杂度 O ( m ) O(m) O(m),set的空间复杂度
class Solution:def lastNonEmptyString(self, s: str) -> str:cnt = Counter(s)mx = max(cnt.values())ans = ""seen = set()for c in s[::-1]:if cnt[c] == mx and c not in seen:ans += cseen.add(c)return ans[::-1]

100220. 相同分数的最大操作数目 II - 力扣(LeetCode)

给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作中的 任意 一个:

  • 选择 nums 中最前面两个元素并且删除它们。
  • 选择 nums 中最后两个元素并且删除它们。
  • 选择 nums 中第一个和最后一个元素并且删除它们。

一次操作的 分数 是被删除元素的和。

在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。

请你返回按照上述要求 最多 可以进行的操作次数。

示例 1:

输入:nums = [3,2,1,2,3,4]
输出:3
解释:我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [1,2,3,4] 。
- 删除第一个元素和最后一个元素,分数为 1 + 4 = 5 ,nums = [2,3] 。
- 删除第一个元素和最后一个元素,分数为 2 + 3 = 5 ,nums = [] 。
由于 nums 为空,我们无法继续进行任何操作。

示例 2:

输入:nums = [3,2,6,1,4]
输出:2
解释:我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [6,1,4] 。
- 删除最后两个元素,分数为 1 + 4 = 5 ,nums = [6] 。
至多进行 2 次操作。

提示:

  • 2 <= nums.length <= 2000
  • 1 <= nums[i] <= 1000

思路:

这道题当时做的时候傻了,记忆化搜索一直写错了,一直找不到dfs结束的标志,后来发现不用找到,直接返回0就是结束了,还需要注意这里都是if判断,不是else判断,只有这样才能正确,因为不一定某个先开始的就是最优的

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n 2 ) O(n^2) O(n2)
class Solution:def maxOperations(self, nums: List[int]) -> int:@cachedef dfs(i: int, j: int, target: int) ->int:if i >= j:return 0res = 0if nums[i] + nums[i + 1] == target:res = max(res, dfs(i + 2, j, target) + 1)if nums[j] + nums[j - 1] == target:res = max(res, dfs(i, j - 2, target) + 1)if nums[i] + nums[j] == target:res = max(res, dfs(i + 1, j - 1, target) + 1)return resn = len(nums)res1 = dfs(2, n - 1, nums[0] + nums[1])  # 最前面两个res2 = dfs(0, n - 3, nums[-2] + nums[-1])  # 最后两个res3 = dfs(1, n - 2, nums[0] + nums[-1])  # 第一个和最后一个return max(res1, res2, res3) + 1  # 加上第一次操作

100205. 修改数组后最大化数组中的连续元素数目 - 力扣(LeetCode)

给你一个下标从 0 开始只包含 整数的数组 nums

一开始,你可以将数组中 任意数量 元素增加 至多 1

修改后,你可以从最终数组中选择 一个或者更多 元素,并确保这些元素升序排序后是 连续 的。比方说,[3, 4, 5] 是连续的,但是 [3, 4, 6][1, 1, 2, 3] 不是连续的。

请你返回 最多 可以选出的元素数目。

示例 1:

输入:nums = [2,1,5,1,1]
输出:3
解释:我们将下标 0 和 3 处的元素增加 1 ,得到结果数组 nums = [3,1,5,2,1] 。
我们选择元素 [3,1,5,2,1] 并将它们排序得到 [1,2,3] ,是连续元素。
最多可以得到 3 个连续元素。

示例 2:

输入:nums = [1,4,7,10]
输出:1
解释:我们可以选择的最多元素数目是 1 。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 106

思路:

这道题完全不会,补的灵神的思路,虽然能看懂,但自己写可能还是想不到,先给个答案把

  • 时间复杂度: O ( n l o g ⁡ n ) O(nlog⁡n) O(nlogn),其中 n 为 nums 的长度。瓶颈在排序上。
  • 空间复杂度: O ( n ) O(n) O(n)
class Solution:def maxSelectedElements(self, nums: List[int]) -> int:nums.sort()f = defaultdict(int)for x in nums:f[x + 1] = f[x] + 1f[x] = f[x - 1] + 1return max(f.values())

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

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

相关文章

leetcode5_最长回文字串

题目链接&#xff1a; 5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 思路分析&#xff1a; s长度最大是1000,考虑枚举&#xff0c;枚举每一个s[i],以s[i]为中心点向两侧枚举&#xff0c;可以发现&#xff1a; 当枚举的区间长度为奇数时&#xff1a;只需要满足中心点…

前端工程化面试题 | 10.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

赋能AI原生应用开发:百度智能云千帆AppBuilder正式开放服务

为满足企业敏捷、高效地进行AI原生应用开发的需求&#xff0c;降低AI原生应用开发门槛&#xff0c;百度智能云千帆AppBuilder正式开放服务。戳我体验 AppBuilder将大模型开发AI原生应用的常见模式、工具、流程&#xff0c;沉淀成一个工作台&#xff0c;帮助开发者聚焦业务本身…

【网络安全】什么样的人适合学?该怎么学?

有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题&#xff1a; 什么样的人适合学习网络安全&#xff1f;我适不适合学习网络安全&#xff1f; 当然&#xff0c;产生这样的疑惑并不奇怪&#xff0c;毕竟网络安全这个专业在2017年才调整为国家一级…

C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现

介绍完了list类的相关内容后&#xff1a;C初阶&#xff1a;适合新手的手撕list&#xff08;模拟实现list&#xff09; 接下来进入新的篇章&#xff0c;stack和queue的介绍以及模拟&#xff1a; 文章目录 1.stack的初步介绍2.stack的使用3.queue的初步介绍4.queue的使用5.容器适…

10个常考的前端手写题

1. 实现一个简单的 JavaScript 函数&#xff0c;用于判断一个对象是否为空&#xff1a; 判断对象是否为空的函数 这个函数通过遍历对象的所有属性来检查是否有任何实际定义的键。如果在循环中找到了一个键&#xff0c;则立即返回false&#xff0c;表示对象不为空。如果没有找到…

rust函数 stuct struct方法 关联函数

本文结合2个代码实例主要介绍了rust函数定义方法&#xff0c;struct结构体定义、struct方法及关联函数等相关基础知识。 代码1&#xff1a; main.rc #[derive(Debug)]//定义一个结构体 struct Ellipse {max_semi_axis: u32,min_semi_axis: u32, }fn main() {//椭圆&#xff0…

micro-app以UMD js链接方式引入使用

npm 下载好micro-zoe/micro-app后&#xff0c;找到index.umd.js&#xff1a; 新建一个测试html&#xff0c;引入并使用&#xff1a; 参考&#xff1a; 微组件实践 - 掘金

外汇110:外汇做空是什么意思?如何运作?一文读懂

外汇市场允许卖空&#xff0c;就像众多金融市场一样。但什么是卖空呢&#xff1f;如何外汇做空&#xff1f;在本文中&#xff0c;我们将讨论如何做空货币。什么是外汇做空&#xff1f; 外汇做空&#xff08;Short Selling&#xff09;是外汇市场上的一种投资方式。它指的是投资…

聊聊Java那些事

本系列文章简介&#xff1a; Java是一种广泛使用的高级编程语言&#xff0c;它是一种面向对象的语言&#xff0c;具有简单、可移植、安全和高性能等特点。Java在各个领域都有广泛的应用&#xff0c;包括企业级应用程序开发、移动应用程序开发、嵌入式系统开发等。本系列文章旨在…

深度学习系列58:大模型训练和压缩

1. 大模型训练 1.1数据并行 1.2 模型并行 1.3 ZeRO 1.4 流水线并行 1.5 混合精度训练 1.6 offloading 把梯度放在cpu上保存和计算 1.7 overlapping 提前传输数据 1.8 checkpointing 中间线性层不保存&#xff0c;反向传播时再次重新计算 1.9 使用BMtrain 2. 大模型压…

蝶阀、球阀、阀门百科

一、D71X是蝶阀的型号其中D 就代表了蝶阀,7 代表是对夹式链接,1代表这个蝶阀是中线结构,x就是密封面材质为橡胶。结合起来D71X表示的就是手柄对夹中线蝶阀。 二、J41H-100C型号字母含义介绍 J41H-100C型号是德特森阀门常用的高压截止阀型号字母代表的意思是: J——代表阀门类…

windows下Oracle 11g的安装和配置教程的详细步骤

#### 1、下载Oracle软件 访问Oracle官方网站或者Oracle下载中心。在下载页面中找到适用于您操作系统的Oracle 11g软件。根据您的需求选择合适的版本&#xff0c;如“Oracle Database 11g Release 2 Express Edition for Windows x64”。点击下载并接受相关许可协议。 2、安装…

MCU中断控制

目录 一、中断相关基础知识 1、NVIC&#xff1a;嵌套向量中断控制器 2、可屏蔽中断和不可屏蔽中断的区别 3、中断优先级 4、常见特殊中断 二、中断相关寄存器 三、中断使用步骤&#xff1a; 一、中断相关基础知识 1、NVIC&#xff1a;嵌套向量中断控制器 (1) 它是内核的…

LVS/DR配置

实验环境: servera作为lvs服务器 serverc&#xff0c;serverd作为web服务器 一.配置serverc,serverd 对两台服务器做相同配置: 1.安装nginx服务:yum install nginx -y2.切换到nginx根目录cd /usr/share/nginx/html/3.将原来的index.html备份mv index.html index.html.bak4.输出…

Windows Server 2012 评估版和Windows Server 2019 评估版 升级为正式版(工作v笔记v分享)

Windows Server 2012 评估版和Windows Server 2019 评估版是微软提供的试用版本&#xff0c;可以免费下载和使用一段时间。当使用评估版时&#xff0c;可以在适当的时候将其升级为正式版&#xff0c;以便继续使用并享受完整的功能。 要将评估版升级为正式版&#xff0c;可以按…

基于ArcGIS Pro SDK的MVVM架构

示例结果展示 文件夹创建 相对于原始C#&#xff0c;少了Command文件夹里的类。该文件中的RelayCommand使用 ArcGIS.Desktop.Framework Properties属性配置&#xff0c;主要用于设置执行程序路径&#xff08;自带文件夹&#xff09; DarkImages用于存放深色图片&#xff08;自…

Rust 学习笔记 - 流程控制 与 Range 类型

前言 任何一门编程语言几乎都脱离不了&#xff1a;变量、基本类型、函数、注释、循环、条件判断&#xff0c;这是一门编程语言的语法基础&#xff0c;只有当掌握这些基础语法及概念才能更好的学习 Rust。 条件判断 if 表达式 if 语句在其他语言中很常见&#xff0c;这里不再…

面试经典150题【1-10】

文章目录 面试经典150题【1-10】88. 合并两个有序数组27.移除元素26.删除有序数组中的重复项80.删除有序数组中的重复项II169.多数元素189.轮转数组121.买卖股票的最佳时机1122. 买卖股票的最佳时机 II55.跳跃游戏![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ff…

nvm安装配置环境

前言 对于前端开发人员来说&#xff0c;多个项目可能用的不同的node版本&#xff0c;如何方便快速的转换版本&#xff0c;nvm版本管理工具的出现&#xff0c;解决这个问题。 实战 1. 搜索nvm版本&#xff0c;我用的1.1.2&#xff0c;下载后直接安装。 2.在d盘建立nvm空文件…