当前位置: 首页 > news >正文

Leetcode 第 141 场双周赛题解

Leetcode 第 141 场双周赛题解

  • Leetcode 第 141 场双周赛题解
    • 题目1:3314. 构造最小位运算数组 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3315. 构造最小位运算数组 II
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3316. 从原字符串里进行删除操作的最多次数
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3317. 安排活动的方案数
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 141 场双周赛题解

题目1:3314. 构造最小位运算数组 I

思路

要让 ans[i] 满足:ans[i] OR (ans[i] + 1) == nums[i],根据位运算的性质,可以知道 ans[i] < nums[i]。

从 0 开始枚举,如果有 x | (x + 1) == nums[i],则 ans[i] = x,否则 ans[i] = -1。

代码

/** @lc app=leetcode.cn id=3314 lang=cpp** [3314] 构造最小位运算数组 I*/// @lc code=start
class Solution
{
public:vector<int> minBitwiseArray(vector<int> &nums){int n = nums.size();vector<int> ans(n, -1);for (int i = 0; i < n; i++){bool flag = false;int x;for (x = 0; x < nums[i]; x++){if ((x | (x + 1)) == nums[i]){flag = true;break;}}ans[i] = flag ? x : -1;}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n * X),其中 n 是数组 nums 的长度,X = 103 是 nums[i] 的取值范围。

空间复杂度:O(1)。

题目2:3315. 构造最小位运算数组 II

思路

可以发现,x ∣ (x+1) 的本质是把二进制最右边的 0 置为 1。

反过来,如果我们知道了 x ∣ (x+1) 的结果 101111,那么对应的 x 只能是这些:

  • 100111。
  • 101011。
  • 101101。
  • 101110。

因此我们找出 nums[i] 从最低位开始的连续 1,把连续 1 的最后一位变成 0,就是答案。

由于 x ∣ (x+1) 最低位一定是 1(因为 x 和 x+1 其中一定有一个奇数),所以如果 nums[i] 是偶数(质数中只有 2),那么无解,答案为 −1。

代码

/** @lc app=leetcode.cn id=3315 lang=cpp** [3315] 构造最小位运算数组 II*/// @lc code=start
class Solution
{
public:vector<int> minBitwiseArray(vector<int> &nums){int n = nums.size();vector<int> ans(n);for (int i = 0; i < n; i++){if (nums[i] == 2)ans[i] = -1;else{// 求从最低位开始的连续 1int p = 0;while (nums[i] >> p & 0x1)p++;// 把连续 1 的最后一位变成 0ans[i] = nums[i] ^ (1 << (p - 1));}}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n * logX),其中 n 是数组 nums 的长度,X = 109 是 nums[i] 的取值范围。

空间复杂度:O(1)。

题目3:3316. 从原字符串里进行删除操作的最多次数

思路

定义 dp[i][j] 表示要使 pattern[0,…,j] 是 source[0,…,i] 的子序列,最多的删除次数。

分类讨论:

  • 不选 source[i],问题变成要使 pattern[0] 到 pattern[j] 是 source[0] 到 source[i−1] 的子序列,最多可以进行多少次删除操作,即 dp[i−1,j]。如果 i 在 targetIndices 中,那么删除次数加一。
  • 如果 source[i]=pattern[j],那么匹配(都选),问题变成要使 pattern[0] 到 pattern[j−1] 是 source[0] 到 source[i−1] 的子序列,最多可以进行多少次删除操作,即 dp[i−1,j−1]。

这两种情况取最大值。

代码

/** @lc app=leetcode.cn id=3316 lang=cpp** [3316] 从原字符串里进行删除操作的最多次数*/// @lc code=start
class Solution
{
public:int maxRemovals(string source, string pattern, vector<int> &targetIndices){int n = source.length();int m = pattern.length();unordered_set<int> hashSet(targetIndices.begin(), targetIndices.end());// dp[i][j] 表示要使 pattern[0,...,j] 是 source[0,...,i] 的子序列,最多的删除次数vector<vector<int>> dp(n + 1, vector<int>(m + 1, INT_MIN));// 初始化dp[0][0] = 0;for (int i = 0; i < n; i++){int is_del = hashSet.count(i);dp[i + 1][0] = dp[i][0] + is_del;}// 状态转移for (int i = 0; i < n; i++)for (int j = 0; j < min(i + 1, m); j++){int is_del = hashSet.count(i);dp[i + 1][j + 1] = dp[i][j + 1] + is_del;if (source[i] == pattern[j])dp[i + 1][j + 1] = max(dp[i + 1][j + 1], dp[i][j]);}return dp[n][m];}
};
// @lc code=end

复杂度分析

时间复杂度:O(n * m),其中 n 为字符串 source 的长度,m 是字符串 pattern 的长度。

空间复杂度:O(n * m + t),其中 n 为字符串 source 的长度,m 是字符串 pattern 的长度,t 是数组 targetIndices 的元素个数。

题目4:3317. 安排活动的方案数

思路

dp[i,j] 表示前 i 个人表演 j 个节目的方案数。转移有两种情况:

  • 第 i 个人的节目在前面已经表演过了,那么有 j 个老节目可以选,因此 dp[i−1,j]×j。
  • 第 i 个人要表演个新节目,那么有 (x−j+1) 个新节目可以选,因此 dp[i−1,j−1]×(x−j+1)

统计答案时,枚举一共表演了 j 种节目,答案乘以 yj 即可。

代码

/** @lc app=leetcode.cn id=3317 lang=cpp** [3317] 安排活动的方案数*/// @lc code=start
class Solution
{
private:const int MOD = 1e9 + 7;public:int numberOfWays(int n, int x, int y){// dp[i][j] 表示前 i 个人表演 j 个节目的方案数vector<vector<long long>> dp(n + 1, vector<long long>(x + 1, 0));// 初始化dp[0][0] = 1;// 状态转移for (int i = 1; i <= n; i++)for (int j = 1; j <= x; j++){// 第 i 个人的节目在前面已经表演过了,那么有 j 个老节目可以选dp[i][j] = (dp[i][j] + dp[i - 1][j] * j) % MOD;// 第 i 个人要表演个新节目,那么有 (x−j+1) 个新节目可以选dp[i][j] = (dp[i][j] + dp[i - 1][j - 1] * (x - j + 1)) % MOD;}long long ans = 0LL, mult = 1LL;for (int j = 1; j <= x; j++){mult = (mult * y) % MOD;// 一共表演了 j 种节目,有 y^j 种打分方案ans = (ans + dp[n][j] * mult) % MOD;}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n * x)。

空间复杂度:O(n * x)。

相关文章:

Leetcode 第 141 场双周赛题解

Leetcode 第 141 场双周赛题解 Leetcode 第 141 场双周赛题解题目1&#xff1a;3314. 构造最小位运算数组 I思路代码复杂度分析 题目2&#xff1a;3315. 构造最小位运算数组 II思路代码复杂度分析 题目3&#xff1a;3316. 从原字符串里进行删除操作的最多次数思路代码复杂度分析…...

Linux性能调优,还可以从这些方面入手

linux是目前最常用的操作系统&#xff0c;下面是一些常见的 Linux 系统调优技巧&#xff0c;在进行系统调优时&#xff0c;需要根据具体的系统负载和应用需求进行调整&#xff0c;并进行充分的测试和监控&#xff0c;以确保系统的稳定性和性能。同时&#xff0c;调优过程中要谨…...

STM32的独立看门狗定时器(IWDG)技术介绍

在嵌入式系统中&#xff0c;确保系统的稳定性和可靠性至关重要。看门狗定时器&#xff08;Watchdog Timer, WDT&#xff09; 是一种常用的硬件机制&#xff0c;用于监控系统的运行状态&#xff0c;防止系统因软件故障或意外情况进入不可预期的状态。STM32系列微控制器提供了两种…...

自动化生成工作流?英伟达提出ComfyGen:通过LLM来匹配给定的文本提示与合适的工作流程

ComfyGen的核心在于通过LLM来匹配给定的文本提示与合适的工作流程。该方法从500个来自用户的多样化提示生成图像&#xff0c;随后使用一系列美学预测模型对生成结果进行评分。这些评分与相应的工作流程形成了一个训练集&#xff0c;包含提示、工作流程及其得分的三元组。 然后…...

indicatorTree-v10练习(有问题)

目标&#xff1a;设计数据库表表格式&#xff0c;将“indicatorTree-v10.json”导入到数据库&#xff0c;再从数据库读取写为JSON文件。 其他要求&#xff1a;数据库要求为mysql数据库&#xff1b;编程语言暂时限定为C&#xff1b;JSON解析使用本文件夹中的cJSON.c和cJSON.h&am…...

python源码:指定麦克风/音响播放歌曲

前言 我使用pygame实现了指定麦克风/音响播放歌曲的功能&#xff0c;主要目的是解决直播过程的多源声道控制问题。 代码 # 查看自己的音频设备 # 请记住目标音频设备的具体名称 import pygame as mixer import pygame._sdl2 as sdl2mixer.init() # Initialize the mixer, thi…...

基于华为云智慧生活生态链设计的智能鱼缸

一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长&#xff0c;智能鱼缸作为一种结合了科技与自然美的家居装饰品&#xff0c;正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸&#xff0c;它不仅能够提供…...

OJ-1015图像物体的边界

分析 思路 1.输入读取&#xff1a;读取网格的维度(M&#xff0c;N)和像素值到一个二维数组中。 2.迭代:遍历二维数组中的每个单元格。 3.边界检测:对于每个像素值为1的单元格,检查其八个相邻的单元格。如果任何相邻单元格的像素值为5,则增加边界计数。 4,边界计数调整:由于每…...

RAG 入门实践:从文档拆分到向量数据库与问答构建

本文将使用 Transformers 和 LangChain&#xff0c;选择在 Retrieval -> Chinese 中表现较好的编码模型进行演示&#xff0c;即 chuxin-llm/Chuxin-Embedding。 你还将了解 RecursiveCharacterTextSplitter 的递归工作原理。 一份值得关注的基准测试榜单&#xff1a;MTEB (M…...

445: 选择问题

解法&#xff1a; 第k大的数据查找 a, b map(int, input().split()) l list(map(int, input().split())) l.sort() print(l[b-1])...

IP地址类型选择指南:动态IP、静态IP还是数据中心IP?

你是否曾经困惑于如何选择最适合业务需求的IP地址类型&#xff1f;面对动态IP、静态IP和数据中心IP这三种选择&#xff0c;你是否了解它们各自对你的跨境在线业务可能产生的深远影响&#xff1f; 在跨境电商领域&#xff0c;选择合适的IP类型对于业务的成功至关重要。动态IP、…...

基于Python flask的豆瓣电影可视化系统,豆瓣电影爬虫系统

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…...

面试不是一场遭遇战

引言 Ethan第一次跳槽时&#xff0c;把工作总结搞成简历&#xff0c;丢到BOSS&#xff0c;面了几场&#xff0c;结果都很糟。复盘下来&#xff0c;发现面试过程临场发挥太多&#xff0c;把攻坚战打成了遭遇战。 那面试要如何准备&#xff1f;什么情况下跳槽&#xff1f;有哪些大…...

【力扣 | SQL题 | 每日3题】力扣1795,1907,1398,602

1. 力扣1795&#xff1a;每个产品在不同商品的价格 1.1 题目&#xff1a; 表&#xff1a;Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | store1 | int | | store2 | int | | store3 …...

centos7.9升级rockylinux8.8

前言 查看centos的版本 &#xff0c;我这台服务器是虚拟机,下面都是模拟实验 升级前一定要把服务器上配置文件&#xff0c;数据等进行备份 [rootlocalhost ~]#cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]#uname -a Linux jenkins_ser…...

C++初阶(三)---C++入门(下)

目录 一、内联函数 1.内联函数的定义与底层机制 0x01.内联函数的定义 0x02.内联函数的底层机制 2.内联函数的优缺点 优点&#xff1a; 缺点&#xff1a; 3.内联函数的使用建议 4.内联函数的注意事项 二、auto关键字&#xff08;C11&#xff09; 1.代码示例 2.auto使…...

Linux--多路转接之epoll

上一篇:Linux–多路转接之select epoll epoll 是 Linux 下多路复用 I/O 接口 select/poll 的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。它是 Linux 下多路复用 API 的一个选择&#xff0c;相比 select 和 poll&#xff0c…...

自动化工具Nico,从零开始干掉Appium,移动端自动化测试框架实现

这篇将用较短的篇幅给大家介绍我是如何实现iOS和Android的inspector&#xff08;元素审查工具&#xff09;的。 实现原理 为了更方便的显示UI界面&#xff0c;且更容易制作&#xff0c;我选择了使用web端来承载整个元素树展示。同时我选用Flask一次性梭哈前后端&#xff08;因…...

Fast CRC32

链接&#xff1a; Fast CRC32 Error Checking Real life data tends to get corrupted because machines (and humans) are never as reliable as we wish for. One efficient way is make sure your data wasnt unintendedly modifiied is to generate some kind of hash. T…...

生成一个带有二维数据和对应标签的螺旋形数据集(非线性可分数据集)的代码解析

def create_dataset():np.random.seed(1)m 400 # 数据量N int(m/2) # 每个标签的实例数D 2 # 数据维度X np.zeros((m,D)) # 数据矩阵Y np.zeros((m,1), dtypeuint8) # 标签维度a 4 for j in range(2):ix range(N*j,N*(j1))t np.linspace(j*3.12,(j1)*3.12,N) np.rando…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...