【复盘】第 111 场力扣夜喵双周赛

又是7分选手,好好复盘!

第一题(签到题)

给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你返回满足 0 <= i < j < n 且
nums[i] + nums[j] < target 的下标对 (i, j) 的数目。 示例 1: 输入:nums =
[-1,1,2,3,1], target = 2 输出:3 解释:总共有 3 个下标对满足题目描述:

  • (0, 1) ,0 < 1 且 nums[0] + nums[1] = 0 < target
  • (0, 2) ,0 < 2 且 nums[0] + nums[2] = 1 < target
  • (0, 4) ,0 < 4 且 nums[0] + nums[4] = 0 < target 注意 (0, 3) 不计入答案因为 nums[0] + nums[3] 不是严格小于 target 。 示例 2: 输入:nums = [-6,2,5,-2,-7,-1,3],
    target = -2 输出:10 解释:总共有 10 个下标对满足题目描述:
  • (0, 1) ,0 < 1 且 nums[0] + nums[1] = -4 < target
  • (0, 3) ,0 < 3 且 nums[0] + nums[3] = -8 < target
  • (0, 4) ,0 < 4 且 nums[0] + nums[4] = -13 < target
  • (0, 5) ,0 < 5 且 nums[0] + nums[5] = -7 < target
  • (0, 6) ,0 < 6 且 nums[0] + nums[6] = -3 < target
  • (1, 4) ,1 < 4 且 nums[1] + nums[4] = -5 < target
  • (3, 4) ,3 < 4 且 nums[3] + nums[4] = -9 < target
  • (3, 5) ,3 < 5 且 nums[3] + nums[5] = -3 < target
  • (4, 5) ,4 < 5 且 nums[4] + nums[5] = -8 < target
  • (4, 6) ,4 < 6 且 nums[4] + nums[6] = -4 < target 提示: 1 <= nums.length == n <= 50
    -50 <= nums[i], target <= 50

没什么好说的,两层循环,找到了元素对则计数器加1。

class Solution(object):def countPairs(self, nums, target):count = 0for i in range(0,len(nums)):for j in range(i+1,len(nums)):if nums[i] + nums[j]<target:count = count + 1return count

第二题(双指针)

给你一个下标从 0 开始的字符串 str1 和 str2 。

一次操作中,你选择 str1 中的若干下标。对于选中的每一个下标 i ,你将 str1[i] 循环 递增,变成下一个字符。也就是说 ‘a’
变成 ‘b’ ,‘b’ 变成 ‘c’ ,以此类推,‘z’ 变成 ‘a’ 。

如果执行以上操作 至多一次 ,可以让 str2 成为 str1 的子序列,请你返回 true ,否则返回 false 。

注意:一个字符串的子序列指的是从原字符串中删除一些(可以一个字符也不删)字符后,剩下字符按照原本先后顺序组成的新字符串。

示例 1:

输入:str1 = “abc”, str2 = “ad” 输出:true 解释:选择 str1 中的下标 2 。 将 str1[2]
循环递增,得到 ‘d’ 。 因此,str1 变成 “abd” 且 str2 现在是一个子序列。所以返回 true 。 示例 2:

输入:str1 = “zc”, str2 = “ad” 输出:true 解释:选择 str1 中的下标 0 和 1 。 将 str1[0]
循环递增得到 ‘a’ 。 将 str1[1] 循环递增得到 ‘d’ 。 因此,str1 变成 “ad” 且 str2
现在是一个子序列。所以返回 true 。 示例 3:

输入:str1 = “ab”, str2 = “d” 输出:false 解释:这个例子中,没法在执行一次操作的前提下,将 str2 变为
str1 的子序列。 所以返回 false 。

提示:

1 <= str1.length <= 105 1 <= str2.length <= 105 str1 和 str2 只包含小写英文字母。

这道题我用了双指针的方法,两个指针分别指向两个字符串的开头,如果匹配或者加1后匹配,则两个指针同时后移;如果不匹配,则匹配的字符串指针后移,被匹配的字符串指针不动。最后退出的条件是:有指针到达字符串终点。如果被匹配的字符串指针到了终点说明匹配成功;反之如果匹配字符串指针到达终点而被匹配的字符串指针没有到达终结则说明匹配失败。

class Solution(object):def canMakeSubsequence(self, str1, str2):i = 0j = 0while True:if j==len(str2):return Trueif j!=len(str2) and i==len(str1):return Falseif str2[j] == 'a':if str1[i] == 'a' or str1[i] == 'z':i = i + 1j = j + 1else:i = i + 1else:if str1[i]==str2[j] or ord(str1[i])+1 == ord(str2[j]):i = i + 1j = j + 1else:i = i + 1            

第三题(没做出来)

比赛的时候看题以为是暴力可以求出来,结果最后一直有10% 的样例不过。

给你一个下标从 0 开始长度为 n 的整数数组 nums 。

从 0 到 n - 1 的数字被分为编号从 1 到 3 的三个组,数字 i 属于组 nums[i] 。注意,有的组可能是 空的 。

你可以执行以下操作任意次:

选择数字 x 并改变它的组。更正式的,你可以将 nums[x] 改为数字 1 到 3 中的任意一个。 你将按照以下过程构建一个新的数组
res :

将每个组中的数字分别排序。 将组 1 ,2 和 3 中的元素 依次 连接以得到 res 。 如果得到的 res 是
非递减顺序的,那么我们称数组 nums 是 美丽数组 。

请你返回将 nums 变为 美丽数组 需要的最少步数。

示例 1:

输入:nums = [2,1,3,2,1] 输出:3 解释:以下三步操作是最优方案:

  1. 将 nums[0] 变为 1 。
  2. 将 nums[2] 变为 1 。
  3. 将 nums[3] 变为 1 。 执行以上操作后,将每组中的数字排序,组 1 为 [0,1,2,3,4] ,组 2 和组 3 都为空。所以 res 等于 [0,1,2,3,4] ,它是非递减顺序的。 三步操作是最少需要的步数。 示例 2:

输入:nums = [1,3,2,1,3,3] 输出:2 解释:以下两步操作是最优方案:

  1. 将 nums[1] 变为 1 。
  2. 将 nums[2] 变为 1 。 执行以上操作后,将每组中的数字排序,组 1 为 [0,1,2,3] ,组 2 为空,组 3 为 [4,5] 。所以 res 等于 [0,1,2,3,4,5] ,它是非递减顺序的。 两步操作是最少需要的步数。 示例 3:

输入:nums = [2,2,2,2,3,3] 输出:0 解释:不需要执行任何操作。 组 1 为空,组 2 为 [0,1,2,3] ,组 3
为 [4,5] 。所以 res 等于 [0,1,2,3,4,5] ,它是非递减顺序的。

提示:

1 <= nums.length <= 100 1 <= nums[i] <= 3

比赛结束后,看到题解有dp突然想起来可能是动态规划。
a代表结尾为1时所需要的最小步数,b代表结尾为2时所需要的最小步数,c代表结尾为3时所需要的最小步数。当num等于1时,结尾为1不需要做出任何调整,结尾为2则需要选取aa和bb的最小值并对num进行调整,结尾为3则需要选取aa和bb和cc的最小值并对num进行调整。

class Solution(object):def minimumOperations(self, nums):a = 0b = 0c = 0 for num in nums:aa = abb = bcc = cif num==1:a = aab = min(aa,bb) + 1c = min(aa,bb,cc) + 1elif num==2:a = aa + 1b = min(aa,bb)c = min(aa,bb,cc) + 1elif num==3:a = aa + 1b = min(aa,bb) + 1c = min(aa,bb,cc)return min(a,b,c)

第四题(没做出来)

第四题是最恶心了,每次都有几个或者十几个样例卡你,不是超时就是超内存hhhh。

给你正整数 low ,high 和 k 。

如果一个数满足以下两个条件,那么它是 美丽的 :

偶数数位的数目与奇数数位的数目相同。 这个整数可以被 k 整除。 请你返回范围 [low, high] 中美丽整数的数目。

示例 1:

输入:low = 10, high = 20, k = 3 输出:2 解释:给定范围中有 2 个美丽数字:[12,18]

  • 12 是美丽整数,因为它有 1 个奇数数位和 1 个偶数数位,而且可以被 k = 3 整除。
  • 18 是美丽整数,因为它有 1 个奇数数位和 1 个偶数数位,而且可以被 k = 3 整除。 以下是一些不是美丽整数的例子:
  • 16 不是美丽整数,因为它不能被 k = 3 整除。
  • 15 不是美丽整数,因为它的奇数数位和偶数数位的数目不相等。 给定范围内总共有 2 个美丽整数。 示例 2:

输入:low = 1, high = 10, k = 1 输出:1 解释:给定范围中有 1 个美丽数字:[10]

  • 10 是美丽整数,因为它有 1 个奇数数位和 1 个偶数数位,而且可以被 k = 1 整除。 给定范围内总共有 1 个美丽整数。 示例 3:

输入:low = 5, high = 5, k = 2 输出:0 解释:给定范围中有 0 个美丽数字。

  • 5 不是美丽整数,因为它的奇数数位和偶数数位的数目不相等。

提示:

0 < low <= high <= 109 0 < k <= 20

我的代码(超内存了):

class Solution(object):def numberOfBeautifulIntegers(self, low, high, k):count = 0for i in range(low,high+1):ji = 0ou = 0if i%k==0:length = len(str(i))for p in str(i):if ji>=length//2+1 or ou>=length//2+1:breakif p in ['1','3','5','7','9']:ji = ji + 1else:ou = ou + 1if ou==ji:count = count + 1return count

看题解是数位DP,没接触过。。

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

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

相关文章

探索人工智能 | 模型训练 使用算法和数据对机器学习模型进行参数调整和优化

前言 模型训练是指使用算法和数据对机器学习模型进行参数调整和优化的过程。模型训练一般包含以下步骤&#xff1a;数据收集、数据预处理、模型选择、模型训练、模型评估、超参数调优、模型部署、持续优化。 文章目录 前言数据收集数据预处理模型选择模型训练模型评估超参数调…

websocker无法注入依赖

在公司中准备用websocker统计在线人数&#xff0c;在WebSocketServer使用StringRedisTemplate保存数据到redis中去&#xff0c;但是在保存的时候显示 StringRedisTemplate变量为null 详细问题 2023-08-20 10:37:14.109 ERROR 28240 --- [nio-7125-exec-1] o.a.t.websocket.po…

linux面试题整理

目录标题 基础篇1.说下企业为什么用linux而不用windows&#xff1f;2.linux学过什么&#xff0c;怎么学习的&#xff1f;3.linux基本命令4.linux查看端口、进程、文件类型、挂载5.使用top命令之后前五行会显示什么内容&#xff1f;6.linux怎么查找一个文件7.vim进去后的各种操作…

NAS个人云存储 - 手把手教你搭建Nextcloud个人云盘并实现公网远程访问

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

LeetCode ——二叉树篇(三)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 二叉树的定义及创建见&#xff1a; LeetCode ACM模式——二叉树篇&#xff08;一&#xff09;_要向着光的博客-CSDN博客 目录 116. 填充每个节点的下一个右侧节点指针 117. 填…

Maven介绍_下载_安装_使用_原理

文章目录 1 Maven介绍1.1 Maven的介绍1.2 Maven的作用 2 Maven下载与安装2.1 官网下载2.2 文件目录2.3 环境配置 3 Maven基础概念3.1 仓库分类3.2 依赖坐标3.3 坐标组成 4 Maven配置4.1 本地仓库配置4.2 远程仓库的设置4.3 镜像仓库配置4.4 IDEA配置Maven 5 Maven项目创建5.1 M…

LaWGPT零基础部署win10+anaconda

准备代码&#xff0c;创建环境 # 下载代码 git clone https://github.com/pengxiao-song/LaWGPT cd LaWGPT # 创建环境 conda create -n lawgpt python3.10 -y conda activate lawgpt pip install -r requirements.txt # 启动可视化脚本&#xff08;自动下载预训练模型约15GB…

arcpy之excel数据处理

目录 步骤一:导入所需模块步骤二:从Excel读取数据步骤三:将数据导入到Excel中步骤四:写入Excel数据总结当涉及到地理信息系统(GIS)数据处理时, ArcPy提供了处理 Excel数据的强大功能,包括从 Excel读取数据和将数据导入到 Excel中。在本篇博客中,我将向您介绍如何使…

postgresql自定义方法创建之坐标的自动转换

postgresql导入点类型的空间数据&#xff0c;一般会提供xy坐标(或者lon和lat)字段&#xff0c;一般的工具并没有提供转换为空间数据的功能。此时&#xff0c;我们需要提供一些方法或者触发器来实现空间字段的自动更新。而xy坐标在导入的时候也会存在两种情况&#xff0c;一种是…

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测 目录 回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测&#x…

el-row的@click.stop并没有阻止事件冒泡,还是会触发外层div的点击事件

当点击一个元素时&#xff0c;会进行冒泡&#xff0c;一直触发到父元素。可以通过给click加stop来阻止事件冒泡&#xff0c;如&#xff1a;click.stop“search_maf_version(version)”&#xff0c;但是发现给el-row加上click.stop并没有生效&#xff0c;还是会触发外部的点击事…

第二讲:BeanFactory的实现

BeanFactory的实现 1. 环境准备2. 初始化DefaultListableBeanFactory3. 手动注册BeanDefinition4. 手动添加后置处理器5. 获取被依赖注入的Bean对象6. 让所有的单例bean初始化时加载7. 总结 Spring 的发展历史较为悠久&#xff0c;因此很多资料还在讲解它较旧的实现&#xff0c…

中间件(上)

1、何为中间件&#xff1a; 中间件&#xff08;Middleware&#xff09;是指位于操作系统和应用程序之间的一层软件层&#xff0c;用于提供各种服务和功能&#xff0c;以帮助不同的应用程序、系统或组件进行通信、交互和协作。中间件可以看作是在不同计算机或系统之间建立连接和…

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍…

iTOP-RK3568开发板ubuntu环境下安装Eclipse

eclipse 是使用 Java 语言开发的&#xff0c;一个 Java 应用程序&#xff0c;这意味着 eclipse 只能运行在 Java虚拟机上。倘若没有安装 JDK&#xff08;Java Development Kit&#xff09;&#xff0c;即使在 ubuntu 上安装了 eclipse&#xff0c;也不能运行&#xff0c;所以要…

正则表达式在PHP8中的应用案例-PHP8知识详解

正则表达式在php8中有许多应用案例。以下是一些常见的应用场景&#xff1a;如数据验证、数据提取、数据替换、url路由、文本搜索和过滤等。 1、数据验证 使用正则表达式可以对用户输入的数据进行验证&#xff0c;例如验证邮箱地址、手机号码、密码强度等。 下面是一个用正则表…

漏洞指北-VulFocus靶场专栏-入门

漏洞指北-VulFocus靶场01-入门 VulFocus靶场前置条件&#xff1a;入门001 命令执行漏洞step1&#xff1a; 输入默认index的提示step2&#xff1a; 入门002 目录浏览漏洞step1&#xff1a;进入默认页面&#xff0c;找到tmp目录step2 进入tmp目录获取flag文件 VulFocus靶场前置条…

GuLi商城-前端基础Vue指令-单向绑定双向绑定

什么是指令? 指令 (Directives) 是带有 v- 前缀的特殊特性。 指令特性的预期值是:单个 JavaScript 表达式。 指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于DOM 例如我们在入门案例中的 v-on&#xff0c;代表绑定事…

抓住WhatsApp 营销风口,做全球电商领跑者

您的电子邮件营销活动效果是否一直不理想&#xff1f;不妨考虑 WhatsApp营销&#xff0c;一种实时通讯营销&#xff0c;可帮助企业接触更广泛的受众&#xff0c;与客户建立个人联系并最终增加销售额。还可以再借助具有强大功能的全渠道客户服务工具&#xff0c;例如SaleSmartly…

Java序列化和反序列化操作

fastjson可以实现java的序列化和反序列化操作&#xff0c;这里使用serialize的方法重新写序列化方法改写成JSON格式&#xff0c;方便通信与读写。 首先定义FastJsonRedisSerializer.java内容 public class FastJsonRedisSerializer<T> implements RedisSerializer<T&…