Leetcode 第 111 场双周赛题解

Leetcode 第 111 场双周赛题解

  • Leetcode 第 111 场双周赛题解
    • 题目1:2824. 统计和小于目标的下标对数目
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:2825. 循环增长使字符串子序列等于另一个字符串
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:2826. 将三个组排序
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:2827. 范围中美丽整数的数目
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 111 场双周赛题解

题目1:2824. 统计和小于目标的下标对数目

思路

两层循环搞定。

代码

/** @lc app=leetcode.cn id=2824 lang=cpp** [2824] 统计和小于目标的下标对数目*/// @lc code=start
class Solution
{
public:int countPairs(vector<int> &nums, int target){int n = nums.size();int count = 0;for (int i = 0; i < n - 1; i++)for (int j = i + 1; j < n; j++)if (nums[i] + nums[j] < target)count++;return count;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n2),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

题目2:2825. 循环增长使字符串子序列等于另一个字符串

思路

设置两个指针 i 和 j,分别指向字符串 str1 和 str2 的第一个字符。

双指针遍历 str1[i] 和 str2[j],如果 str1[i] 可以匹配 str2[j],那么 i 和 j 都加一,否则只有 i 加一。

匹配的含义是 str1[i] 等于 str2[j],或者 str1[i] 循环递增的下一个字符等于 str2[j]。

如果 j 等于 str2 的长度,则返回 true,否则返回 false。

代码

/** @lc app=leetcode.cn id=2825 lang=cpp** [2825] 循环增长使字符串子序列等于另一个字符串*/// @lc code=start
class Solution
{
public:bool canMakeSubsequence(string str1, string str2){// 特判if (str1.length() < str2.length())return false;if (str1 == str2)return true;int len1 = str1.length(), len2 = str2.length();int i = 0, j = 0;for (int i = 0; i < len1; i++){if (match(str1[i], str2[j]))j++;if (j == len2)return true;}return false;}// 辅函数 - 判断字符 c1 和 c2 是否匹配bool match(char c1, char c2){if (c1 == c2)return true;c1 = c1 == 'z' ? 'a' : char(c1 + 1);return c1 == c2;// return (c2 - c1 + 26) % 26 <= 1;}
};
// @lc code=end

复杂度分析

时间复杂度:O(len1 + len2,其中 len1 是字符串 str1 的长度,len2 是字符串 str2 的长度。

空间复杂度:O(1)。

题目3:2826. 将三个组排序

思路

最长递增子序列的变种题。

利用 Leetcode300. 最长递增子序列 的方法,求出数组 nums 的最长递增子序列 g,最后答案为 nums.size() - g.size()。

在这里插入图片描述

代码

/** @lc app=leetcode.cn id=2826 lang=cpp** [2826] 将三个组排序*/// @lc code=start
class Solution
{
public:int minimumOperations(vector<int> &nums){// 特判if (nums.empty())return 0;int n = nums.size();vector<int> g; // 最长递增子序列for (int i = 0; i < n; i++){int j = upper_bound(g.begin(), g.end(), nums[i]) - g.begin();if (j == g.size())g.push_back(nums[i]);elseg[j] = nums[i];}return n - g.size();}
};
// @lc code=end

复杂度分析

时间复杂度:O(nlogn),其中 n 是数组 nums 的元素个数。

空间复杂度:O(n),其中 n 是数组 nums 的元素个数。

题目4:2827. 范围中美丽整数的数目

思路

题解:数位 DP(Python/Java/C++/Go)

代码

/** @lc app=leetcode.cn id=2827 lang=cpp** [2827] 范围中美丽整数的数目*/// @lc code=start// 数位 DPclass Solution
{
public:int numberOfBeautifulIntegers(int low, int high, int k){return countBIfrom1toN(high, k) - countBIfrom1toN(low - 1, k);}// 辅函数 - 计算 [1, n] 的美丽整数的数目int countBIfrom1toN(int n, int k){string s = to_string(n);int len = s.length(), memo[len][k + 1][len * 2 + 1];memset(memo, -1, sizeof(memo)); // -1 表示没有计算过function<int(int, int, int, bool, bool)> dfs;// 返回从 i 开始填数字,前面填的数字集合是 mask,能构造出的特殊整数的数目// diff: 奇数数位的数目 - 偶数数位的数目// is_limit 表示前面填的数字是否都是 n 对应位上的,// 如果为 true,那么当前位至多为 s[i],否则至多为 9// is_num 表示前面是否填了数字(是否跳过),// 如果为 true,那么当前位可以从 0 开始,否则当前位可以跳过,或者从 1 开始填数字dfs = [&](int i, int val, int diff, bool is_limit, bool is_num) -> int{if (i == len){// 找到了一个合法数字return is_num && val == 0 && diff == len;}if (!is_limit && is_num && memo[i][val][diff] != -1)return memo[i][val][diff];int res = 0;if (!is_num){// 可以跳过当前数位res = dfs(i + 1, val, diff, false, false);}// 如果前面填的数字都和 n 的一样,那么这一位至多填数字 s[i](否则就超过 n 啦)int up = is_limit ? s[i] - '0' : 9;// 枚举要填入的数字 dfor (int d = 1 - is_num; d <= up; d++)res += dfs(i + 1, (val * 10 + d) % k, diff + d % 2 * 2 - 1, is_limit && d == up, true);if (!is_limit && is_num)memo[i][val][diff] = res; // 记忆化return res;};return dfs(0, 0, len, true, false);}
};
// @lc code=end

复杂度分析

在这里插入图片描述

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

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

相关文章

Jenkins上跑自动化项目,case出现错误时,导致项目运行时间过长,该如何处理?

1、方案一&#xff1a;Jenkins上调整 进入配置&#xff1a; 构建环境&#xff1a; 自行选择超时时间即可&#xff5e; 2、方案二&#xff1a;代码调整【python】 安装插件&#xff1a;pytest-timeout 选择一&#xff1a;装饰器用法&#xff1a;将单个测试用例标记为超时&…

Linux之安装配置CentOS 7

一、CentOS简介 CentOS&#xff08;Community Enterprise Operating System&#xff0c;中文意思是社区企业操作系统&#xff09;是Linux发行版之一&#xff0c;它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码&#xff0c…

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…

Procexp64.exe —— 强大的进程管理器

1&#xff0c;简介 Process Explorer 是一款增强型的任务管理器&#xff0c;你可以使用它方便地管理你的程序进程&#xff0c;能强行关闭任何程序。 除此之外&#xff0c;它还详尽地显示计算机信息&#xff1a;CPU、内存使用情况&#xff0c;DLL、句柄信息&#xff0c;很酷的…

redis-4 搭建redis集群

1.为什么需要redis集群&#xff1f; Redis 集群提供了高可用性、横向扩展和数据分片等功能&#xff0c;使得 Redis 能够应对大规模的数据存储和高并发访问的需求。以下是一些需要使用 Redis 集群的常见情况&#xff1a; 高可用性&#xff1a;通过在多个节点之间进行数据复制和…

【动态规划】【逆向思考】【C++算法】960. 删列造序 III

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 动态规划汇总 LeetCode960. 删列造序 III 给定由 n 个小写字母字符串组成的数组 strs &#xff0c;其中每个字符串长度相等。 选取一个删除索引序列&#xff0c;对于 strs 中的每个字符串&a…

虹科数字化与AR部门升级为安宝特AR子公司

致关心虹科AR的朋友们&#xff1a; 感谢您一直以来对虹科数字化与AR的支持和信任&#xff0c;为了更好地满足市场需求和公司发展的需要&#xff0c;虹科数字化与AR部门现已升级为虹科旗下独立子公司&#xff0c;并正式更名为“安宝特AR”。 ”虹科数字化与AR“自成立以来&…

React中文官网已经搬迁了,原网址内容将不再更新

注意1&#xff1a;React中文官网已经搬迁至-React 官方中文文档&#xff0c;原网址内容将不再更新 注意2&#xff1a;React官网已经将React的定义由“用于构建用户界面的 JavaScript 库”更改为“用于构建 Web 和原生交互界面的库”。

SpringBoot系列之JPA实现按年月日查询

SpringBoot系列之JPA实现按年月日查询 通过例子的方式介绍Springboot集成Spring Data JPA的方法&#xff0c;进行实验&#xff0c;要先创建一个Initializer工程&#xff0c;如图&#xff1a; 选择&#xff0c;需要的jdk版本&#xff0c;maven项目 选择需要的maven配置&#x…

Python初学者学习记录——python基础综合案例:数据可视化——地图可视化

一、基础地图使用 1、基础地图演示 2、基础地图演示——视觉映射器 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京市", 99),("上海市", 199),("湖南省", 2…

高考复习技巧考研资料、美赛论文及代码,数据收集网站(初高中招生考试全科试卷等)

图&#xff0c;就要从“点、线、面的位置关系”这一内核开始发散&#xff0c;第一层级为彼此的位置关系&#xff0c;平行、相交、异面&#xff08;两直线间位置&#xff09;、垂直&#xff08;相交或异面中的特殊位置&#xff09;&#xff0c;多面体、旋转体等&#xff0c;然后…

基于springboot+vue的在线教育系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

使用Opencv-python库读取图像、本地视频和摄像头实时数据

使用Opencv-python库读取图像、本地视频和摄像头实时数据 Python中使用OpenCV读取图像、本地视频和摄像头数据很简单&#xff0c; 首先需要安装Python&#xff0c;然后安装Opencv-python库 pip install opencv-python然后在PyCharm或者VScode等IDE中输入对应的Python代码 一…

leetcode:二叉树的中序遍历(外加先序,后序遍历)

题外&#xff1a;另外三种遍历可以看这&#xff1a; 层序遍历&#xff1a; Leetcode:二分搜索树层次遍历-CSDN博客 先序遍历&#xff1a; 二叉树的先序&#xff0c;中序&#xff0c;后序遍历-CSDN博客 后序遍历&#xff1a; 二叉树的先序&#xff0c;中序&#xff0c;后序…

黑马程序员-瑞吉外卖-day5

修改实体类 package com.itheima.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode;i…

Python算法题集_接雨水

本文为Python算法题集之一的代码示例 题目42&#xff1a;接雨水 说明&#xff1a;给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1]…

VMware虚拟机部署Linux Ubuntu系统

本文介绍基于VMware Workstation Pro虚拟机软件&#xff0c;配置Linux Ubuntu操作系统环境的方法。 首先&#xff0c;我们需要进行VMware Workstation Pro虚拟机软件的下载与安装。需要注意的是&#xff0c;VMware Workstation Pro软件是一个收费软件&#xff0c;而互联网中有很…

Windows10上通过MSYS2编译FFmpeg 6.1.1源码操作步骤

1.从github上clone代码&#xff0c;并切换到n6.1.1版本&#xff1a;clone到D:\DownLoad目录下 git clone https://github.com/FFmpeg/FFmpeg.git git checkout n6.1.1 2.安装MSYS2并编译FFmpeg源码: (1).从https://www.msys2.org/ 下载msys2-x86_64-20240113.exe &#…

【揭秘】ForkJoinTask全面解析

内容摘要 ForkJoinTask的显著优点在于其高效的并行处理能力&#xff0c;它能够将复杂任务拆分成多个子任务&#xff0c;并利用多核处理器同时执行&#xff0c;从而显著提升计算性能&#xff0c;此外&#xff0c;ForkJoinTask还提供了简洁的API和强大的任务管理机制&#xff0c…

pytorch-metric-learning度量学习工具官方文档翻译

基于Pytorch实现的度量学习方法 开源代码&#xff1a;pytorch-metric-learning官网文档&#xff1a;PyTorch Metric Learning官方文档 度量学习相关的损失函数介绍&#xff1a; 度量学习DML之Contrastive Loss及其变种度量学习DML之Triplet Loss度量学习DML之Lifted Structu…