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.mzph.cn/news/651641.shtml

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

相关文章

PCL Kdtree 使用示例

PCL Kdtree 使用示例 文章目录 PCL Kdtree 使用示例一、关于 KDTree二、关于最近邻搜索三、复杂度分析四、C代码示例五、关键函数说明nearestKSearch 函数说明 一、关于 KDTree 点云数据主要是&#xff0c; 表征 目标表面 的海量点集合&#xff0c; 并不具备传统实体网格数据的…

P8651 [蓝桥杯 2017 省 B] 日期问题

#include <iostream> #include <string> using namespace std;int first; int second; int third; int day[13]{0,31,0,31,30,31,30,31,31,30,31,30,31};//每月日期bool select (int i,int j,int k){if ((i%100 first) && (j second) && (k thi…

分段函数线性化方法matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…

【ArcGIS遇上Python】python实现批量XY坐标生成shp点数据文件

单个手动生成:【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层 文章目录 一、问题分析二、解决办法三、注意事项一、问题分析 现有多个excel、txt或者csv格式的坐标数据,需要根据其坐标批量一键生成shp点数据,如下X为经度,…

Java - OpenSSL与国密OpenSSL

文章目录 一、定义 OpenSSL&#xff1a;OpenSSL是一个开放源代码的SSL/TLS协议实现&#xff0c;也是一个功能丰富的加密库&#xff0c;提供了各种主要的加密算法、常用的密钥和证书封装管理功能以及SSL协议。它被广泛应用于Web服务器、电子邮件服务器、VPN等网络应用中&#x…

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

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

前端实现弹小球功能

这篇文章将会做弹小球游戏&#xff0c;弹小球游戏大家小时候都玩过&#xff0c;玩家需要在小球到达游戏区域底部时候控制砖块去承接小球&#xff0c;并不断的将小球弹出去。 首先看一下实现的效果。 效果演示 玩家需要通过控制鼠标来实现砖块的移动&#xff0c;保证在小球下落…

Linux 文件和文件夹的创建与删除

目录 一. 新建1.1 mkdir 新建文件夹1.2 touch 新建空文件1.3 vi命令创建文件1.4 > 和 >> 新建文件 二. 删除 一. 新建 1.1 mkdir 新建文件夹 -p&#xff1a;递归的创建文件夹&#xff0c;当父目录不存在的时候&#xff0c;会自动创建 mkdir -p test1/test2/test31.…

递归神经网络:(01/4) 顺序数据处理的骨干

koushikkushal95 一、说明 循环神经网络是一个里程碑式的模型框架&#xff0c;它是对时间串处理的最基本构架&#xff1b;而理解RNN也是对自然语言处理模型的开端&#xff0c;本篇将对该模型的基本原理进行介绍。 二、顺序数据处理的架构 递归神经网络 &#xff08;RNN&#xf…

字典树-Python

字典树 字典树又叫前缀树、单词查找树&#xff0c;树形结构&#xff0c;是哈希树的变种。能够统计、排序和保存大量的字符串&#xff0c;经常被搜索引擎系统用于文本词频统计。优点是利用字符串的公共前缀来减少查询时间&#xff0c;最大程度减少无谓字符串的比较&#xff0c;…

HBase入门:运行机制

文章目录 HBase 系统架构客户端ZooKeeper 服务器Master 主服务器Region 服务器 Region 服务器工作原理用户读写数据的过程缓存的刷新StoreFile合并 Store 的工作原理HLog 的工作原理 HBase 系统架构 HBase 的系统架构包括客户端、ZooKeeper 服务器、Master 主服务器、Region服…

什么是SQL,什么是MYSQL?MYSQL的架构以及SQL执行语句的过程是什么?有哪些数据库的类型?一篇文章带你弄懂!

文章目录 前言一、为什么需要数据库二、数据库的相关概念1.什么是结构化查询语言 (SQL)2.什么是数据库管理系统 (DBMS)3.什么是 MySQL 数据库 三、数据库分类1.关系型数据库&#xff08;SQL&#xff09;2.非关系型数据库&#xff08;NoSQL&#xff09; 四、MYSQL架构1.各组件功…

OpenCV-27 Canny边缘检测

一、概念 Canny边缘检测算法是John F.Canny与1986年开发出来的一个多级边缘检测算法&#xff0c;也被很多人认为是边缘检测的最优算法。最优边缘检测的三个主要评价标准是&#xff1a; 低错频率&#xff1a;表示出尽可能多的实际边缘&#xff0c;同时尽可能的减小噪声产生的误…

503 Service Temporarily Unavailable nginx 原因和解决办法

前言 HTTP 503 Service Temporarily Unavailable 错误通常表示服务器无法处理请求&#xff0c;可能是由于服务器过载、维护或其他临时性问题导致的。在 Nginx 中&#xff0c;这种错误通常与后端服务的可用性问题相关。以下是可能的原因和解决办法&#xff1a; 正文…

windows安装openResty

一、openResty安装 1、下载 进入openResty官网&#xff1a; OpenResty - 下载 下载下图中的64zip包 2、解压zip&#xff0c;进入目录 进入conf目录&#xff08;openresty-1.25.3.1-win64\conf&#xff09;&#xff0c;找到nginx.conf文件&#xff0c;打开 3、修改配置文件&a…

k8s学习-DaemonSet和Job

1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上&#xff0c;每个Node都可能运行好几个副本。DaemonSet的不同之处在于&#xff1a;每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有&#xff1a; &#xff08;1&#xff09;在集群的每个节点上运⾏存…

Redis 面试题 | 16.精选Redis高频面试题

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

【css揭秘】

文章目录 背景与边框半透明边框多重边框box-shadowoutline 背景定位background-positionbackground-origincalc() 条纹背景水平条纹 形状圆形圆柱自适应的椭圆半椭圆四分之一椭圆 背景与边框 半透明边框 目标&#xff1a;给一个容器设置一层白色背景和一道半透明白色边框 写…

Redis学习——入门篇③

Redis学习——入门篇③ 1. Redis事务1.1 事务实际操作1.2 watch 2. Redis管道&#xff08;pipelining&#xff09;2.1 管道简介2.2 管道实际操作2.3 管道小总结 3. Redis&#xff08;pub、sub&#xff09;发布订阅(不重要)3.1 简介3.2 发布订阅实际操作 这是一个分水岭…

1.【Vue3】前端开发引入、Vue 简介

1. 前端开发引入 1.1 前端开发前置知识 通过之前的学习&#xff0c;已经通过 SpringBoot 和一些三方技术完成了大事件项目的后端开发。接下来开始学习大事件项目的前端开发&#xff0c;前端部分借助两个框架实现&#xff1a; Vue3&#xff08;一个 JS 框架&#xff09;基于 …