Leetcode 第 362 场周赛题解

Python算法模板:二分、双指针、回溯、DP与并查集高效刷题指南 算法模板是将问题结构与代码骨架映射的复用技术,通过固定二分查找、双指针、回溯、动态规划、并查集等高频考点的代码框架,降低记忆负担并提升解题速度。其原理在于统一接口与明确区间语义,使开发者专注于问题映射而非边界推导。技术价值在于将刷题效率翻倍,减少调试时间。应用场景包括技术面试、编程竞赛和周赛提速。本文系统拆解Python算法模板的设计原则、核心代码与避坑方法,帮助读者构建可复用的模板库。 阅读详情

Leetcode 第 362 场周赛题解

题目1:2848. 与车相交的点

思路

哈希。

代码

/*
 * @lc app=leetcode.cn id=2848 lang=cpp
 *
 * [2848] 与车相交的点
 */

// @lc code=start
class Solution
{
public:
    int numberOfPoints(vector<vector<int>> &nums)
    {
        vector<bool> seat(101, false);
        for (const vector<int> &num : nums)
        {
            int start = num[0], end = num[1];
            for (int i = start; i <= end; i++)
                seat[i] = true;
        }
        int count = 0;
        for (int i = 1; i <= 100; i++)
            if (seat[i])
                count++;
        return count;
    }
};
// @lc code=end

复杂度分析

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

空间复杂度:O(L),辅助数组的长度,据题意 L = 100。

题目2:2849. 判断能否在给定时间到达单元格

思路

脑筋急转弯。

带点贪心的思想。

代码

class Solution
{
public:
    bool isReachableAtTime(int sx, int sy, int fx, int fy, int t)
    {
        if (t == 1 && sx == fx && sy == fy)
            return false;
        return abs(sx - fx) <= t && abs(sy - fy) <= t;
    }
};

复杂度分析

时间复杂度:O(1)。

空间复杂度:O(1),没有辅助变量。

题目3:2850. 将石头分散到网格图的最少移动次数

思路

暴力列举全排列,每次计算出一个曼哈顿距离,更新最小值即为最小移动次数。

代码

/*
 * @lc app=leetcode.cn id=2850 lang=cpp
 *
 * [2850] 将石头分散到网格图的最少移动次数
 */

// @lc code=start
class Solution
{
public:
    int minimumMoves(vector<vector<int>> &grid)
    {
        int m = grid.size(), n = m ? grid[0].size() : 0; // m = n = 3
        // 所有移走的石子个数 = 所有移入的石子个数(grid[i][j] = 0)
        vector<pair<int, int>> from; // 移走石子坐标数组
        vector<pair<int, int>> to;   // 移入石子坐标数组
        // 构建 from 和 to 数组
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
            {
                if (grid[i][j] > 1)
                {
                    // 有 grid[i][j] - 1 个可以移走的石子
                    for (int k = 0; k < grid[i][j] - 1; k++)
                        from.push_back(make_pair(i, j));
                }
                else if (grid[i][j] == 0)
                    to.push_back(make_pair(i, j));
            }
        // 枚举 from 的全部排列可能,与 to 匹配,求 from[i] 和 to[i] 的曼哈顿距离之和,最小值即为答案
        int minCount = __INT_MAX__; // 最少移动次数
        // 使用 next_permutation 枚举全排列必须先对数组进行排序
        sort(from.begin(), from.end());
        do
        {
            int count = 0;
            for (int i = 0; i < from.size(); i++)
            {
                // 计算曼哈顿距离
                count += abs(from[i].first - to[i].first) + abs(from[i].second - to[i].second);
            }
            minCount = min(minCount, count); // 更新答案
        } while (next_permutation(from.begin(), from.end()));
        return minCount;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(m×n×(m×n)!),使用 STL 函数 next_permutation 进行全排列的时间复杂度为O((m×n)!),循环内计算单次计算曼哈顿距离的时间复杂度为O(m×n),其中 m、n 分别为矩阵 gird 的长度和宽度,m = n = 3。

空间复杂度:O(mn),为辅助数组 from 和 to 的空间,其中 m、n 分别为矩阵 gird 的长度和宽度,m = n = 3。

题目4:2851. 字符串转换

超出能力范围。

思路

矩阵快速幂优化 DP(矩阵快速幂 + 动态规划 + KMP)

视频讲解:

https://www.bilibili.com/video/BV1U34y1N7Pe/?vd_source=df165d34990cd0aa2cacb2c452e99aad

代码

/*
 * @lc app=leetcode.cn id=2851 lang=cpp
 *
 * [2851] 字符串转换
 */

// @lc code=start

// 矩阵快速幂优化 DP

class Solution
{
public:
    int numberOfWays(string s, string t, long long k)
    {
        int n = s.size();
        int c = kmp_search(s + s.substr(0, n - 1), t);
        vector<vector<long long>> m = {
            {c - 1, c},
            {n - c, n - 1 - c}};
        m = pow(m, k);
        return m[0][s != t];
    }

private:
    // KMP 模板
    vector<int> calc_max_match(string s)
    {
        vector<int> match(s.size());
        int c = 0;
        for (int i = 1; i < s.size(); i++)
        {
            char v = s[i];
            while (c && s[c] != v)
                c = match[c - 1];
            if (s[c] == v)
                c++;
            match[i] = c;
        }
        return match;
    }

    // KMP 模板
    // 返回 text 中出现了多少次 pattern(允许 pattern 重叠)
    int kmp_search(string text, string pattern)
    {
        vector<int> match = calc_max_match(pattern);
        int match_cnt = 0, c = 0;
        for (int i = 0; i < text.size(); i++)
        {
            char v = text[i];
            while (c && pattern[c] != v)
                c = match[c - 1];
            if (pattern[c] == v)
                c++;
            if (c == pattern.size())
            {
                match_cnt++;
                c = match[c - 1];
            }
        }
        return match_cnt;
    }

    const long long MOD = 1e9 + 7;

    // 矩阵乘法
    vector<vector<long long>> multiply(vector<vector<long long>> &a, vector<vector<long long>> &b)
    {
        vector<vector<long long>> c(2, vector<long long>(2));
        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                c[i][j] = (a[i][0] * b[0][j] + a[i][1] * b[1][j]) % MOD;
        return c;
    }

    // 矩阵快速幂
    vector<vector<long long>> pow(vector<vector<long long>> &a, long long n)
    {
        vector<vector<long long>> res = {{1, 0}, {0, 1}};
        for (; n; n /= 2)
        {
            if (n % 2)
                res = multiply(res, a);
            a = multiply(a, a);
        }
        return res;
    }
};
// @lc code=end

复杂度分析

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

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

智能座舱-语音交互系统 从什么是智能座舱、智能座舱的发展驱动因素、智能座舱的构成要素三个方面梳理我对智能座舱的基础认识之后,为了加深“智能座舱产品入门”课程中语音交互部分知识的理解,我从什么是语音交互、语音交互的底层技术、智能座舱的语音交互等方面,对智能座舱语音交互系统相关的知识进行了梳理与总结。 阅读详情

相关推荐

AI协议助手:法律文本解析与智能问答技术解析

自然语言处理(NLP)技术在法律文本解析中展现出巨大潜力,通过BERT等预训练模型实现条款分类与语义理解。结合OCR与知识图谱技术,AI协议助手能快速提取合同核心条款,并以问答形式解释法律术语,显著提升商务场景的决策效率。测试数据显示,该系统对NDA协议的识别准确率达92%,响应时间仅1.2秒,特别适用于人力资源竞业协议、云服务SLA评估等场景。随着RAG架构与法律术语向量库的应用,AI+法律正推动合同审核成本下降67%,未来将在跨境合规、智能谈判等方向持续演进。

weixin_29053577的博客 132

【LeetCode周赛】第362场周赛

LeetCode第362场周赛

lunaol的博客 288

STM32F103四位数码管动态显示实战:从硬件连接到代码调试(附Proteus仿真)

本文详细介绍了STM32F103驱动四位数码管的动态显示技术,从硬件连接到代码调试的全过程。内容包括共阴/共阳数码管的区别、GPIO配置、动态显示原理及优化方法,并附有Proteus仿真验证。通过实战案例,帮助开发者快速掌握STM32数码管动态显示的核心技术。

weixin_29168393的博客 471

【LeetCode周赛】LeetCode第362场周赛

那么我们可以先存储所有石头多的位置和0石头的位置,对0石头的位置进行全排列,然后依次计算从石头多的位置移动到0石头的位置需要多少步,维护一个最小值即可。解释:从单元格 (3, 1)开始出发,穿过上图标注的单元格,至少需要 4 秒后到达单元格 (7, 3)。解释:从单元格 (2, 4)开始出发,穿过上图标注的单元格,可以在恰好 6 秒后到达单元格 (7, 7)。输入:grid = [[1,1,0],[1,1,1],[1,2,1]]输入:grid = [[1,3,0],[1,0,0],[1,0,3]]

a碟的博客 364

【实战解析】SAP EWM与PP深度集成:从后台配置到前台物料流转的全链路设计

本文深入解析SAP EWM与PP深度集成的全链路设计,涵盖后台配置与前台物料流转的实战应用。通过两种集成模式(DPI与API)的选择策略、十二个关键后台配置步骤详解,以及PMR生成、PSA补货等前台演示,帮助企业实现生产计划与物料供应的高效协同,显著提升生产效率和库存周转率。

weixin_30723433的博客 422

白盒测试逻辑覆盖之谓词覆盖、子句覆盖、三类有效字句覆盖等知识点

本篇笔记会简化书本上的概念,用容易理解的方式来说明,有些例子打字麻烦,我会直接放图片! 目录 基础知识: 谓词覆盖predicate coverage 子句覆盖 clause coverage 组合覆盖 combinatorial coverage 有效字句覆盖Active Clause Coverage 广义有效子句覆盖(General Active Clause Coverage) 相关性有效子句覆盖(Correlated Active Clause Coverage) 限制性有效

weixin_46019681的博客 2666

【力扣周赛】第 362 场周赛(⭐差分&匹配&状态压缩DP&矩阵快速幂优化DP&KMP)

斜着走,一步顶两步——相当于可以同时横着走和竖着走。那么只要满足垂直和水平方向中最长的那个距离就好了。排序之后按顺序枚举,每次比较和上个区间结束位置之间的关系。注意有个特例是:只走一步时,如果起点和终点相同就不可以了。

小威的博客 804

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

leetcode第362场周赛补题

思路:可惜我没有超级大脑。

qq_62417282的博客 318

T100服务端接口实战:从注册到日志排查的全链路开发指南

本文提供了一份T100服务端接口开发的全链路实战指南。从程序注册与框架签出开始,详细讲解了接口的数据结构设计、核心业务逻辑编写,到最终的部署上线与调用验证。文章重点分享了如何利用日志文件高效定位和排查接口问题,帮助开发者快速掌握T100接口开发的关键步骤与实用技巧。

weixin_28831399的博客 300

(92页PPT)某大型集团信息化项目企业数字化转型ERP系统蓝图设计规划方案(附下载方式)

同时,外贸获利空间被严重挤压,必须从价格竞争转向品牌竞争。该方案针对某大型外贸集团在数字化时代的转型需求,提出了一套完整的ERP系统建设框架和实施路径,具有很高的专业参考价值。特别值得关注的是方案提出的"价值为先"指导思想,通过将企业价值图与信息系统建设紧密结合,确保IT投资直接支撑价值创造。同时,方案充分考虑了集团多元化、国际化的发展需求,设计了灵活可扩展的系统架构。总的来说,这份实施方案专业性强、内容全面、措施具体,既立足解决当前问题,又着眼未来发展需求,为大型集团企业的数字化转型提供了优秀范本。

AI_data_cloud的博客 1027

leetcode第362场周赛

其实这题思维不好想,就是把要拿出的石头坐标统计出来,那几个就统计几个,然后要拿入的统计出来,然后枚举它们的所有组合情况的最小值。统计覆盖区间,把nums中有的区间+1,维护区间我们用差分数组,然后求出差分数组的前缀和即是我们维护的区间,判断区间有哪些值是大于0的即可。核心思想:动态规划+KMP+矩阵快速幂,其实动态规划简单,主要是找到前一个动态和后一个动态的关系,然后具体怎么找的c可以看b站灵神的视频,这里只讲整体思路。核心思想:数学题,贪心做法,首先走斜线,然后走到终点看最短的路径是否小于等于t。

saonantabusao的博客 415

【乐企】有关乐企能力测试接口对接-基础版(详细)

乐企能力测试接口对接详细代码以及步骤

九七的博客 7674

LeetCode 362 期周赛

给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] = [starti, endi] ,其中 starti 是第 i 辆车的起点,endi 是第 i 辆车的终点。返回数轴上被车 任意部分 覆盖的整数点的数目。模拟。

m0_73731708的博客 244

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2024.3.(9,11号)力扣刷题记录-周赛362(未完)

【矩阵快速幂优化 DP【力扣周赛 362】】 https://www.bilibili.com/video/BV1U34y1N7Pe/?参考视频代码,对两处进行修改。2.将差分数组还原成原数组的部分。使用差分数组将区间变化转化为两个点变化。

lshx4658的博客 331

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【LeetCode第362场周赛】8020.字符串转换 | 推导+矩阵快速幂+KMP | 困难

【LeetCode第362场周赛】8020.字符串转换 | KMP+推导+快速幂 | 困难

solego’s blog 354

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【OJ比赛日历】快周末了,不来一场比赛吗? #09.09-09.15 #15场

实时聚合多平台的(Kaggle、天池…)和(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注!以下信息仅供参考,以比赛官网为准。

CompHub的博客 570

【算法】二分答案

对于 nums[1],当其 < nums[0] 时,答案还是 nums[0];当其 > nums[0] 时,则答案是两者的平均向上取整。答案不好直接求,但是可以判断某个数字是否可以满足题目要求且单调时。」就要想到二分答案,这是一个固定的套路。首先最大值的最小值是 nums[0]。具体看下面例题体会一下即可。里面有一些二分答案的题目。

小威的博客 342

动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100

将一个复杂问题拆分成多个规模更小的子问题,通过保存子问题的计算结果,避免重复计算,最终得到原问题的答案。先看一个经典问题。dp[i] = 以第 i 个元素结尾的最优结果例如最长递增子序列。最长递增子序列不一定以最后一个元素结尾,因此必须遍历整个数组取最大值。dp[i] = 前 i 个元素的最优结果这种情况下,最终答案通常就是dp[n]。关键在于理解 dp 数组的定义。动态规划的核心并不是背诵某个固定模板,而是建立正确的状态定义,并通过状态转移方程解决问题。dp[i] 或 dp[i][j] 表示什么?

zengjiajun2006的博客 888

力扣73 矩阵置零

该解法通过标记含0的行和列来实现矩阵置零。遍历矩阵,用布尔数组记录有0的行和列;再遍历一次,若当前行或列被标记,则置为0。时间复杂度O(mn),空间复杂度O(m+n)。

Pniubi的博客 34

Hash表:两数之和、字母异位词分组、最长连续序列 [力扣 Hot100]

三道高频哈希表应用题:两数之和(利用HashMap快速查找补数)、字母异位词分组(排序后作为键分组)、最长连续序列(通过HashSet去重并仅从序列起点扩展)。核心思想均为借助哈希结构优化查找效率,避免重复计算。同时提及双指针等其他解法思路,体现算法设计中“空间换时间”的典型策略。

2403_87560480的博客 226

LeetCode Hot 100 二叉树专题(三):BST 二叉搜索树与右视图(Java)

本专题主线:三题(98 / 230 / 199)共用两把钥匙——BST 的中序序列严格递增,以及遍历中的"层"与"深度"标记。看懂这两点,三题共用一套模板。 结构约定:每题统一分三部分——①题目分析与解题思路(含易错点辨析);②常见解法(附代码)及讲解;③知识点总结。

2401_88612756的博客 717

LeetCode 3105.最长的严格递增或递减子数组:一次遍历

LeetCode 3105.最长的严格递增或递减子数组:一次遍历

<font color="Pink">Tisfy的博客</font> 189

【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱

LeetCode1089.复写零要求原地复写数组中的0,避免覆盖未读元素。正向遍历会因写入操作破坏后续数据,故不可行。正确解法为逆向双指针:先正向预处理确定目标末尾位置,再从后向前复写,遇0写两个0,非0则直接搬运。需特别处理0复写越界情况(仅保留一个0)。时间复杂度O(n),空间复杂度O(1),是原地数组操作的经典范例。

2602_95684935的博客 231

力扣240搜索二维矩阵(二分查找)

本文介绍在力扣240题“搜索二维矩阵II”中,对每一行独立使用二分查找的解法。通过遍历每行并调用二分查找函数判断目标值是否存在,若找到则返回true,否则最终返回false。该方法利用了每行有序的特性,时间复杂度为O(m log n),其中m为行数,n为列数。具体二分查找逻辑可参考作者主页中关于力扣35题“搜索插入位置”的实现。

Pniubi的博客 87

LeetCode100 94. 二叉树的中序遍历

中序遍历(左根右)通过栈实现,模拟递归过程。从根开始,不断向左走并压栈,直到左子树为空;弹出栈顶节点访问(根),转向其右子树重复流程。样例:1→2→3,遍历顺序为1→3→2。时间复杂度O(n),空间复杂度O(h)。

Shaoxingzong的博客 164
上一篇: Leetcode376. 摆动序列
下一篇: 基于 FFmpeg+SDL 的视频播放器的制作
UestcXiye
博客等级 码龄8年 9032粉丝 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、付费专栏及课程。

余额充值