Leetcode 第 112 场双周赛题解

Leetcode 第 112 场双周赛题解

  • Leetcode 第 112 场双周赛题解
    • 题目1:2839. 判断通过操作能否让字符串相等 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:2840. 判断通过操作能否让字符串相等 II
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:2841. 几乎唯一子数组的最大和
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:2842. 统计一个字符串的 k 子序列美丽值最大的数目
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 112 场双周赛题解

题目1:2839. 判断通过操作能否让字符串相等 I

思路

分两组:

  1. s1[0]+s2[0] 和 s1[2]+s2[2] 比较;
  2. s1[1]+s2[1] 和 s1[3]+s2[3] 比较。

代码

/** @lc app=leetcode.cn id=2839 lang=cpp** [2839] 判断通过操作能否让字符串相等 I*/// @lc code=start
class Solution
{
public:bool canBeEqual(string s1, string s2){return ((s1[0] == s2[0] && s1[2] == s2[2]) || (s1[0] == s2[2] && s1[2] == s2[0])) &&((s1[1] == s2[1] && s1[3] == s2[3]) || (s1[1] == s2[3] && s1[3] == s2[1]));}
};
// @lc code=end

复杂度分析

时间复杂度:O(1)。

空间复杂度:O(1)。

题目2:2840. 判断通过操作能否让字符串相等 II

思路

用两个哈希表 cnt1 和 cnt2 分别统计字符串 s1 和 s2 奇偶下标的字符的出现次数。

比较两个哈希表,若相等,说明通过操作可以让字符串 s1 和 s2 相等,返回 true;否则,返回 false。

代码

/** @lc app=leetcode.cn id=2840 lang=cpp** [2840] 判断通过操作能否让字符串相等 II*/// @lc code=start// 哈希class Solution
{
public:bool checkStrings(string s1, string s2){int cnt1[2][26], cnt2[2][26];memset(cnt1, 0, sizeof(cnt1));memset(cnt2, 0, sizeof(cnt2));for (int i = 0; i < s1.length(); i++){cnt1[i % 2][s1[i] - 'a']++;cnt2[i % 2][s2[i] - 'a']++;}return memcmp(cnt1, cnt2, sizeof(cnt1)) == 0;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n+∣Σ∣),其中 n 为字符串 s1 的长度。

空间复杂度:O(∣Σ∣),其中 ∣Σ∣ 为字符集合的大小,本题中字符均为小写字母,所以 ∣Σ∣ = 26。

题目3:2841. 几乎唯一子数组的最大和

思路

滑动窗口。

看到「长度固定的子数组」就要想到滑动窗口。

用一个哈希表 mp 维护窗口内的元素出现次数,当窗口内的 mp.size()>=m 时,更新子数组最大和。

代码

/** @lc app=leetcode.cn id=2841 lang=cpp** [2841] 几乎唯一子数组的最大和*/// @lc code=start// 滑动窗口class Solution
{
public:long long maxSum(vector<int> &nums, int m, int k){// 特判if (nums.empty() || m > k)return 0LL;long long max_sum = 0LL;vector<int> window;unordered_map<int, int> mp;long long sum = 0LL;for (int i = 0; i < nums.size(); i++){window.push_back(nums[i]);mp[nums[i]]++;sum += nums[i];while (window.size() > k){auto it = window.begin();mp[*it]--;if (mp[*it] == 0)mp.erase(*it);sum -= *it;window.erase(it);}if (mp.size() >= m)max_sum = max(max_sum, sum);}return max_sum;}
};
// @lc code=end

复杂度分析

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

空间复杂度:O(k)。哈希表的大小不会超过窗口长度,即 k。

题目4:2842. 统计一个字符串的 k 子序列美丽值最大的数目

思路

哈希 + 组合数学。

提示:

在这里插入图片描述

统计每个字符出现次数的个数,然后从大到小遍历次数 c 及其个数 num。

在这里插入图片描述

所有方案数相乘即为答案。

如果 k 太大(循环中没有出现 num≥k),那么不存在合法子序列,返回 0。

代码

/** @lc app=leetcode.cn id=2842 lang=cpp** [2842] 统计一个字符串的 k 子序列美丽值最大的数目*/// @lc code=start
class Solution
{
private:const int MOD = 1e9 + 7;public:int countKSubsequencesWithMaxBeauty(string s, int k){vector<int> cnt(26, 0);for (char &c : s)cnt[c - 'a']++;// STL map 会自动按键从小到大排序map<int, int> cc;for (int &c : cnt)if (c)cc[-c]++;long long ans = 1;for (auto &[c, num] : cc){if (num >= k)return ans * pow(-c, k) % MOD * comb(num, k) % MOD;ans = ans * pow(-c, num) % MOD;k -= num;}return 0;}// 辅函数 - 快速幂long long pow(long long x, int n){long long res = 1;for (; n; n /= 2){if (n % 2)res = res * x % MOD;x = x * x % MOD;}return res;}// 辅函数 - 求组合数 C(n,k)long long comb(long long n, int k){long long res = n;for (int i = 2; i <= k; i++){n--;// n, n-1, n-2,... 中的前 i 个数至少有一个因子 ires = res * n / i;}return res % MOD;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 为字符串 s 的长度。

空间复杂度:O(∣Σ∣)。其中 ∣Σ∣ 为字符集合的大小,本题中字符均为小写字母,所以 ∣Σ∣=26。

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

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

相关文章

C#系列-访问SqlServer+Mysql+Oracle数据库(6)

目录 一、 C#访问SqlServer数据库 二、 C#异步读取SqlServer数据库 三、 C#访问Mysql数据库 四、 C#访问Oracle数据库 一&#xff0c;C#访问SqlServer数据库 在C#中访问SQL Server数据库&#xff0c;你通常会使用ADO.NET (ActiveX Data Objects .NET)&…

“深度解析Java虚拟机:运行时数据区域、垃圾收集、内存分配与回收策略、类加载机制“

"深度解析Java虚拟机&#xff1a;运行时数据区域、垃圾收集、内存分配与回收策略、类加载机制" Java 虚拟机一、运行时数据区域程序计数器Java 虚拟机栈本地方法栈堆方法区运行时常量池直接内存 二、垃圾收集判断一个对象是否可被回收1. 引用计数算法2. 可达性分析算…

Python列表中的insert功能及用法举例

Python列表中的insert功能及用法举例 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;insert()&#x1f333;&#x1f340;功能介绍&#x1f340;&#x1f340;语法&#x1f340;&#x1f340;示例&#x1f340;&#x1f340;注意事项&#x…

【Java】小白友好的SpringBoot简单开发基础学习笔记

目录 简介 简单代码示例 配置文件种类 选择特定profile 从配置文件获取数据 Spring Boot整合MyBatis代码示例 简介 Spring Boot是一个用于创建独立、生产级别的Spring应用程序的开源框架。它简化了基于Spring框架的应用程序的开发和部署过程&#xff0c;提供了一种快速构…

【前后端的那些事】webrtc入门demo(代码)

文章目录 前端代码apivue界面 后端modelwebsocketconfigresource 龙年到了&#xff0c;先祝福各位龙年快乐&#xff0c;事业有成&#xff01; 最近在搞webrtc&#xff0c;想到【前后端的那些事】好久都没有更新了&#xff0c;所以打算先把最近编写的小demo发出来。 p2p webrt…

for循环的多重跳出

for的多重跳出 1.前言2.标签使用3.使用异常的方式 本文在jdk17中测试通过 1.前言 前段时间面试时&#xff0c;面试官问我多重for循环如何跳出&#xff0c;我懵了&#xff0c;今天特别的研究了一下 本文主要说的不是continue与break&#xff0c;而是少用的另类操作 1.continue:…

数据结构——5.4 树、森林

5.4 树、森林 概念 树的存储结构 双亲表示法 孩子表示法 孩子兄弟表示法&#xff08;二叉树表示法&#xff09;&#xff1a; 二叉树每个结点有三个变量 ① 二叉树结点值&#xff1a;原树结点的值 ② 二叉树左孩子&#xff1a;原树结点的最左孩子 ③ 二叉树右孩子&#xff1a…

计算机网络——04接入网和物理媒体

接入网和物理媒体 接入网络和物理媒体 怎样将端系统和边缘路由器连接&#xff1f; 住宅接入网络单位接入网络&#xff08;学校、公司&#xff09;无线接入网络 住宅接入&#xff1a;modem 将上网数据调制加载到音频信号上&#xff0c;在电话线上传输&#xff0c;在局端将其…

【C语言|数据结构】数据结构顺序表

目录 一、数据结构 1.1概念 1.2总结 1.3为什么需要数据结构&#xff1f; 二、顺序表 1.顺序表的概念及结构 1.1线性表 2.顺序表分类 2.1顺序表和数组的区别 2.2顺序表的分类 2.2.1静态顺序表 2.2.1.1概念 2.2.1.2缺陷 2.2.2动态顺序表 三、动态顺序表的实现 3.1新…

如何部署一个高可用的 Linux 集群?

部署一个高可用的 Linux 集群需要经过多个步骤和考虑因素。以下是一个简要的指南&#xff0c;帮助您了解如何部署一个高可用的 Linux 集群&#xff1a; 确定需求和目标&#xff1a;在开始部署之前&#xff0c;您需要明确高可用性的定义和目标。对于一些组织而言&#xff0c;高…

寒假提升(6)[杂烩典型题]

天可补&#xff0c;海可填&#xff0c;南山可移。 日月既往&#xff0c;不可复追。 ——曾国藩 知识点 1、关于整形提升2、大小端3、使用函数时参数的影响3、1、计算大小(有函数存在)3、2、计算大小(无函数存在)3、3、形参和实参 4、关于赋值 1、关于整形提升 char a101; int …

算法竞赛例题讲解:平方差 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C平方差

题目描述 给定 L L L和 R R R&#xff0c;问 L ≤ x ≤ R L\leq x \leq R L≤x≤R中有多少个数 x x x满足存在整数 y y y, z z z使得 x y 2 − z 2 x y^{2} - z^{2} xy2−z2。 输入格式 输入一行包含两个整数 L L L, R R R&#xff0c;用一个空格分隔。 输出格式 输出一…

计算机设计大赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

刷题13 数组

989. 数组形式的整数加法 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。例如&#xff0c;对于 num 1321 &#xff0c;数组形式是 [1,3,2,1] 。 给定 num &#xff0c;整数的 数组形式 &#xff0c;和整数 k &#xff0c;返回 整数 num k 的 数组形式 。 输入…

12118 - Inspector‘s Dilemma (UVA)

题目链接如下&#xff1a; Online Judge 脑雾严重&#xff0c;这道题一开始我想的方向有问题.....后来看了别人的题解才写出来的..... 用的是欧拉路径的充要条件&#xff1b;以及数连通块。需要加的高速路数目 连通块个数 - 1 sum&#xff08;每个连通块中连成欧拉路径需要…

EMC学习笔记(二十三)降低EMI的PCB设计指南(三)

双层板电源分配 1.单点与多点分布2.星型分布3.创建网格平面4.旁路和磁珠5.将噪声保持在芯片附近 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 1.单点与多点分布 在一个真正的单点配电系统中&#xff0c;每个有源元件都有自己独立的电源和地&#xff0c;这些…

Hibernate JPA-@PreUpdate 和@PrePersist、@MappedSuperclass应用场景

文章目录 PrePersist注解 和 PreUpdate注解PreUpdatePrePersist 应用场景给一张表加上create_time&#xff0c;update_time这样的字段&#xff0c;想实现自动保存&#xff0c;更新这两个字段 MappedSuperclassInheritanceSINGLE_TABLE(将所有父类和子类集合在一张表)TABLE_PER_…

【React】如何使antd禁用状态的表单输入组件响应点击事件?

最近遇到一个需求&#xff0c;需要在<Input.textarea>组件中&#xff0c;设置属性disabled为true&#xff0c;使textarea响应点击事件&#xff0c;但直接绑定onClick并不会在禁用状态下被响应。 解决方法1 之后尝试了很多方法&#xff0c;比如设置csspointer-events:no…

【Make编译控制 07】CMake常用命令

目录 一、变量相关命令 1. 定义变量 2. 设置C标准 3. 设置输出路径 二、文件相关命令 1. file 命令 2. aux_source_directory 命令 2. include_directories 命令 三、字符串相关命令 1. 字符串输出 2. 字符串拼接 3. 字符串移除 前情提示&#xff1a;【Make编译控制 …

【Dubbo源码二:Dubbo服务导出】

入口 Dubbo服务导出的入口&#xff1a;服务导出是在DubboBootstrapApplicationListener在监听到ApplicationContextEvent的ContextRefreshedEvent事件后&#xff0c;会触发dubboBootstrap.start(), 在这个方法中最后会导出Dubbo服务 DubboBootstrapApplicationListener Dub…