Leetcode 第 141 场双周赛题解

LeetCode高效刷题全攻略:从环境搭建到实战模板的系统方法论 算法与数据结构是计算机科学的核心基础,它们通过特定的逻辑组织和操作规则,为解决复杂问题提供高效方案。其原理在于将问题抽象为可计算模型,利用时间与空间复杂度的权衡来优化性能。掌握这些基础对于提升编程能力、优化系统性能具有重要技术价值,广泛应用于搜索引擎、推荐系统、数据库索引等场景。本文聚焦于LeetCode刷题实践,系统性地分享了从环境配置、科学路线规划到高频题型模板的完整方法论,旨在帮助开发者通过刻意练习,将算法知识内化为解决实际编码问题的能力,有效应对技术面试中的动态规划与二分查找等经典考察点。 阅读详情

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
            {
                // 求从最低位开始的连续 1
                int p = 0;
                while (nums[i] >> p & 0x1)
                    p++;
                // 把连续 1 的最后一位变成 0
                ans[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高效刷题宝典:从核心思维到实战技巧的系统性指南 算法是计算机科学的核心基础,其本质是通过特定的数据结构和计算步骤高效解决问题。理解算法的关键在于掌握其底层原理,例如时间与空间复杂度的权衡、递归与迭代的转换,以及如何针对不同问题场景选择最优策略。这种能力的技术价值在于,它能显著提升软件的执行效率、资源利用率和系统可扩展性,是构建高性能应用和解决复杂工程问题的基石。在应用场景上,算法广泛应用于搜索引擎、推荐系统、数据库索引、网络路由、图像处理乃至人工智能等各个领域。本文聚焦于**LeetCode刷题**这一具体实践,旨在通过系统性的**五毒神掌**方法论,帮 阅读详情

相关推荐

组态王7.5和SQLsever数据库交互

摘要:本文详细介绍了组态王7.5与SQL Server 2016数据库交互的实现流程,包括建立连接、数据存储与查询操作。主要内容涵盖ODBC数据源配置、数据库表格创建、数据插入及查询功能实现(含日期控件查询)

gsjkwg的博客 1579

LeetCode --- 134双周赛

LeetCode --- 134 双周赛 --- 模拟 + 贪心 + 位运算/双指针

V_zjs的博客 644

WINCC8.1工业组态软件安装与授权配置指南

SCADA系统作为工业自动化控制的核心平台,通过实时数据采集与监控实现生产流程可视化。WINCC作为西门子旗舰级组态软件,其8.1版本凭借稳定的运行时环境在汽车制造、流程工业等领域广泛应用。本文从工业控制系统软件安装规范切入,重点解析WINCC8.1与Automation License Manager的协同工作原理,详细说明包括系统环境检查、安装包校验、授权文件配置等关键技术环节。针对工程实施中常见的内存配置不足、授权管理器报错等典型问题,提供经过现场验证的解决方案,特别适用于需要进行产线监控系统升级维护

cqwf95925的博客 1652

【LeetCode】力扣140th双周赛部分题解

LeetCode第140场双周赛T1+T2题解

shenshan_的博客 578

我看MFC的过去、现在和未来

首先说句题外话,虽然我现在的“主业”是Qt,但自己扪心自问,对MFC的熟悉程度要超过Qt。正是由于有了对MFC的熟悉,才能在使用Qt时,比较清醒的认清两者的优劣之处,在此暂且不提。 这个话题也可以说是由来已久,众说纷纭,今时我也谈谈自己的感悟。 一、对MFC的总体看法 首先看看云风在其《游戏之旅-我的编程感悟》一书中对MFC的看法: “我所见到的程序员中,很多把C+

qter_wd007的专栏 6115

CoppeliaSim和Python进行无人机联合仿真

CopeeliaSim和Python进行无人机轨迹跟踪联合仿真。首先建立起CoppeliaSim和Python的连接,其次在Python中生成轨迹,CoppeliaSim仿真环境中的无人机进行跟踪,并绘制出轨迹曲线,有每一步详细的教学。

加斯顿工程师的博客 987

力扣 LeetCode-CN 第200场双周赛

最终成绩 牢骚 在经历了198周、199周连续的两道题全退,1000+、2000+排名之后终于迎来了新一轮的手速竞赛。可以看到本周题相对来说非常简单,前489名都是AK了四道题的选手。自己的成绩也还算过的去,勉强挤进了前150名,得益于当天良好的状态和清晰的思路。。。 正文 1534.统计好三元组 - E 题目内容:https://leetcode-cn.com/contest/weekly-contest-200/problems/count-good-triplets/ 思路: 看了一下总共的数据量不

zclhit 2089

Scale-up,scale-out技术概述

本文系统分析了Scale-up与Scale-out两种扩展技术在现代计算中的应用与发展。Scale-up通过增强单节点性能,适用于高耦合任务,而Scale-out通过横向扩展节点,实现高可用性和无限扩展。在芯片层面,Chiplet技术推动Scale-up发展;在数据中心层面,二者协同工作构建强大集群。光模块在长距离高带宽传输中发挥关键作用。文章对比了NVIDIA、AMD和Broadcom三家公司的技术路线,指出NVIDIA采用封闭生态,AMD选择开放标准,Broadcom则主导底层连接技术。未来发展方向将聚

元直的博客 1446

LeetCode---126双周赛

LeetCode---126双周赛---模拟+二维背包

V_zjs的博客 975

MSP430FR6043超声波传感器设计记录

1.前言 最近项目设计了一个超声波传感器 参考TI官方的板子EVM430-FR6043搭建的电路 EVM430-FR6043评估模块是一个用于评估MSP430FR6043 MCU性能的开发平台。 MSP430FR6043 MCU是一款超低功耗器件, 集成了超声波感测模拟前端 用于精确地进行超声波测量。 专为超声波水表、热量计和燃气表而设计, MSP430FR6043 器件采用低功耗加速器 (LEA), 可实现基于高速 ADC 的信号采集以及后续优化数字信号处理, 为电池供电型计量提供了一款超低功耗、高

bingdund的博客 2870

从底层结构开始学习FPGA(8)----Block RAM(BRAM,块RAM)

BRAM作为FPGA底层的存储资源,作用很大,比如可以RAM/ROM/FIFO。

孤独的单刀 2万+

LeetCode 86 双周赛

可惜这次周赛没有和第四题打照面。不然有机会A掉第四题的。第三题也是本来有机会过的!这样来看,四舍五入就相当于我AK了,哈哈哈!(YY一下)

vcj1009784814的博客 764

【SpringBoot笔记44】SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置)

在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源。

✅ Java 开发工程师 1116

LeetCode 第141场双周赛个人题解

手速场

EQUINOX1的博客 545

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode 第 141 场双周赛

【代码】LeetCode 第 141 场双周赛。

记录一些刷过的题并分享学习心得 370

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

2019LeetCode第 12 场双周赛

5097. 力扣排行榜 题目描述 新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard。 请你帮忙来设计这个 Leaderboard 类,使得它有如下 3 个函数: addScore(playerId, score): 假如参赛者已经在排行榜上,就给他的当前得分增加 score 点分值并更新排行。 假如该参赛者不在排行榜上,就把他添加到榜单上...

Onwaier的博客 879

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

GitHub“惊现”标星70K的力扣刷题宝典,谷歌大神都对此赞不绝口!冲击大厂的里程碑

前言 说起LeetCode,作为一个程序员来说,应该都不会感到陌生,就在近几年里参加面试都会提到它。国内外的程序员都用它刷题主要原因是为了面试。据历史记载,这个网站2011年就已经成立了,马上就要到自己10周年的生日了。每周举行周赛,双周赛,月赛,在有限时间内编码,确实非常能考验人的算法能力。一些大公司赞助冠名的比賽获得前几名除了有奖品,还能直接拿到内推的机会。奖励可谓极其丰厚 想必大家都知道在国内BAT等众多一线名企,在招聘工程师的过程中,对算法和数据结构都会重点考察。不过算法易学难精,大家可能技术能

m0_50180963的博客 1933

GitHub“惊现”标星65K+的力扣刷题宝典,又是一面里程碑

前言 说起LeetCode,作为一个程序员来说,应该都不会感到陌生,就在近几年里参加面试都会提到它。国内外的程序员都用它刷题主要原因是为了面试。据历史记载,这个网站2011年就已经成立了,马上就要到自己10周年的生日了。每周举行周赛,双周赛,月赛,在有限时间内编码,确实非常能考验人的算法能力。一些大公司赞助冠名的比賽获得前几名除了有奖品,还能直接拿到内推的机会。奖励可谓极其丰厚 想必大家都知道在国内BAT等众多一线名企,在招聘工程师的过程中,对算法和数据结构都会重点考察。不过算法易学难精,大家可能技术能力都

weixin_47067712的博客 494

GitHub上的“榜霸”!仅用一周时间就星标70K,这份LeetCode刷题宝典,可载入“史册”

前言 说起LeetCode,作为一个程序员来说,应该都不会感到陌生,就在近几年里参加面试都会提到它。国内外的程序员都用它刷题主要原因是为了面试。据历史记载,这个网站2011年就已经成立了,马上就要到自己10周年的生日了。每周举行周赛,双周赛,月赛,在有限时间内编码,确实非常能考验人的算法能力。一些大公司赞助冠名的比賽获得前几名除了有奖品,还能直接拿到内推的机会。奖励可谓极其丰厚 想必大家都知道在国内BAT等众多一线名企,在招聘工程师的过程中,对算法和数据结构都会重点考察。不过算法易学难精,大家可能技术能

m0_50180963的博客 207

LeetCode面试经典150题:高效刷题与面试突破指南

算法与数据结构是计算机科学的核心基础,其原理与应用贯穿软件开发全生命周期。通过系统化的题目训练,开发者可以掌握时间复杂度分析、空间复杂度优化等关键技术能力,这在技术面试和工程实践中都至关重要。LeetCode面试经典150题精选了数组、链表、树、动态规划等高频考点,采用三遍刷题法等科学训练方法,能有效提升解题思维。结合动态规划、滑动窗口等热词技术,本文详解了从基础概念到面试实战的完整路径,特别适合准备互联网大厂算法面试的工程师参考学习。

weixin_30562507的博客 415

LeetCode 85双周赛(补记)

仍然是3道题,第4题做了尝试,有基本思路(不像以前根本没时间和机会和第4题打照面),还算是有进步。什么时候能AK一次呢,还得继续加油。

vcj1009784814的博客 932

[LeetCode周赛复盘] 第 330 场周赛20230129

T3又被脑筋急转弯卡了,想了一小时Dp。T1 脑筋急转弯+数学。T2 脑筋急转弯+快速幂取模。T3 脑筋急转弯+排序。T4 枚举计算/DP。

liuliangcan的博客 625

LeetCode 90 双周赛

本场比赛很拉跨。只做出两题。最近准备换租,当天晚上去楼上新的房子里打扫了卫生,有点累,做题的时候有点心不在焉,边做边和朋友聊天。哈哈哈,结果第一题花了45分钟才做出来。第三题也是在临近12点比赛结束时才发现规律, 等到提交通过时已经是12点4分了。T1可以模拟,也可以用哈希表;T2暴力;T3是数学问题,需要察觉到规律就是模运算,同余;T4是单调栈的变形运用,注意,如果扩展一下,求右侧第k大,那么y总的那种下标排序+有序列表是比较有效的。另外,这里再次看到了,

vcj1009784814的博客 469

LeetCode 91 双周赛

本场比赛只做出3题,T4读题花了太久时间。T1是双指针简单模拟;T2是动态规划;T3是图的遍历;T4是模拟。

vcj1009784814的博客 820

LeetCode 第 36 场双周赛(304/2204,前13.8%)

文章目录1. 比赛结果2. 题目1. LeetCode 5515. 设计停车系统 easy2. LeetCode 5516. 警告一小时内使用相同员工卡大于等于三次的人 medium3. LeetCode 5518. 给定行和列的和求可行矩阵 medium4. LeetCode 5517. 找到处理最多请求的服务器 hard 1. 比赛结果 做出来3题,但速度不够快,第四题不会。继续加油! 全国排名: 304 / 2204,13.8%;全球排名: 1143 / 8332,13.7% 2. 题目 1. L

Michael是个半路程序员 2350

leetcode-40场双周赛

目录5557. 最大重复子字符串5558. 合并两个链表5560. 设计前中后队列5559. 得到山形数组的最少删除次数 5557. 最大重复子字符串 题目-5557. 最大重复子字符串 比赛的时候写的超级复杂,最简单的就是一次构造k个重复的word,查查有没有。 class Solution { public int maxRepeating(String sequence, String word) { int cnt = 0; String ss = word;

残梦听雨 405
上一篇: Leetcode 第 359 场周赛题解
下一篇: Leetcode 第 419 场周赛题解
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值