Leetcode 第 113 场双周赛题解

高通410刷OpenWRT后网络共享配置全攻略 本文详细解析了在高通410设备刷入OpenWRT后,因基带文件丢失导致无法上网的常见问题。核心解决方案是通过SMB网络共享,将备份的原厂基带文件传输至OpenWRT系统并正确还原,从而恢复移动网络连接。文章提供了从备份基带、刷机到配置共享和文件替换的完整操作指南。 阅读详情

Leetcode 第 113 场双周赛题解

题目1:2855. 使数组成为递增数组的最少右移次数

思路

问题等价于:

  1. 数组 nums 有至多两段递增子数组;
  2. 如果有两段,我们需要把第二段拼在第一段前面,所以还需要满足 nums[0]>nums[n−1],否则无法构成递增数组。

算法:

  1. 初始化 k = -1。
  2. 遍历数组 nums,两两比较相邻元素 nums[i] 和 nums[(i+1)%n],如果发现有 nums[(i + 1) % n] < nums[i],记录下标 k = i。
  3. 继续遍历下标,如果又发现 nums[(i + 1) % n] < nums[i],此时 k != -1,不符合数组 nums 有至多两段递增子数组的要求,返回 -1。
  4. 否则,右移次数 = n-k-1,返回该值。

代码

/*
 * @lc app=leetcode.cn id=2855 lang=cpp
 *
 * [2855] 使数组成为递增数组的最少右移次数
 */

// @lc code=start
class Solution
{
public:
    int minimumRightShifts(vector<int> &nums)
    {
        int n = nums.size();
        int k = -1;
        for (int i = 0; i < n; i++)
        {
            if (nums[(i + 1) % n] < nums[i])
            {
                if (k == -1)
                    k = i;
                else
                    return -1;
            }
        }
        return k == -1 ? 0 : n - k - 1;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的元素个数。

空间复杂度:O(1)。

题目2:2856. 删除数对后的最小数组长度

思路

假设数组 nums 中元素 x 出现次数最多,其出现次数为 maxCount。

分类讨论:

  • 如果 2 * maxCount > n,其余所有 n − maxCount 个数都要与 x 消除,所以最后剩下 n - 2 * (n-maxCount) = 2 * maxCount - n 个数。
  • 如果 2 * maxCount <= n 且 n 是偶数,那么可以把其余数消除至剩下 maxCount 个数,然后再和 x 消除,最后剩下 0 个数。
  • 如果 2 * maxCount <= n 且 n 是奇数,同上,最后剩下 1 个数。

代码

/*
 * @lc app=leetcode.cn id=2856 lang=cpp
 *
 * [2856] 删除数对后的最小数组长度
 */

// @lc code=start

// 哈希 + 分类讨论

class Solution
{
public:
    int minLengthAfterRemovals(vector<int> &nums)
    {
        // 特判
        if (nums.empty())
            return 0;

        int n = nums.size();
        // 统计数组 nums 中各元素的出现次数
        unordered_map<int, int> cnt;
        for (int &num : nums)
            cnt[num]++;

        int maxCount = 0;
        for (auto &[_, c] : cnt)
            maxCount = max(maxCount, c);

        return max(2 * maxCount - n, n % 2);
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的元素个数。

空间复杂度:O(n),其中 n 是数组 nums 的元素个数。

题目3:2857. 统计距离为 k 的点对

思路

在这里插入图片描述

代码

/*
 * @lc app=leetcode.cn id=2857 lang=cpp
 *
 * [2857] 统计距离为 k 的点对
 */

// @lc code=start
// 哈希

class Solution
{
public:
    int countPairs(vector<vector<int>> &coordinates, int k)
    {
        int n = coordinates.size();
        unordered_map<long long, int> cnt;
        int count = 0;

        for (vector<int> &coordinate : coordinates)
        {
            int x = coordinate[0], y = coordinate[1];
            // 令 x1 ^ x2 = i,i 的范围为 [0, k]
            for (int i = 0; i <= k; i++)
            {
                // 把 (x, y) 压缩成一个整数,例如 1e6 * x + y
                auto iter = cnt.find(1000000LL * (x ^ i) + (y ^ (k - i)));
                if (iter != cnt.end())
                    count += iter->second;
            }
            cnt[1000000LL * x + y]++;
        }

        return count;
    }

// 暴力

// class Solution
// {
// public:
//     int countPairs(vector<vector<int>> &coordinates, int k)
//     {
//         int n = coordinates.size();

//         int count = 0;
//         for (int i = 0; i < n - 1; i++)
//             for (int j = i + 1; j < n; j++)
//             {
//                 int x1 = coordinates[i][0], y1 = coordinates[i][1];
//                 int x2 = coordinates[j][0], y2 = coordinates[j][1];
//                 int d = (x1 ^ x2) + (y1 ^ y2);
//                 if (d == k)
//                     count++;
//             }

//         return count;
//     }
// };
};
// @lc code=end

复杂度分析

时间复杂度:O(n * k),其中 n 是数组 coordinates 的元素个数。

空间复杂度:O(n),其中 n 是数组 coordinates 的元素个数。

题目4:2858. 可以到达每一个节点的最少边反转次数

思路

换根 DP 模板题。

题解:【模板】换根 DP(Python/Java/C++/Go/JS)

代码

/*
 * @lc app=leetcode.cn id=2858 lang=cpp
 *
 * [2858] 可以到达每一个节点的最少边反转次数
 */

// @lc code=start
class Solution
{
public:
    vector<int> minEdgeReversals(int n, vector<vector<int>> &edges)
    {
        // g[x] 表示 x 的所有邻居
        vector<vector<pair<int, int>>> g(n);
        for (auto &edge : edges)
        {
            int x = edge[0], y = edge[1];
            // x->y 视为正向,标记为 1;反向标记为 -1
            g[x].push_back(pair<int, int>(y, 1));
            g[y].push_back(pair<int, int>(x, -1));
        }
        // size[i] 为 子树 i 的大小
        // vector<int> size(n, 1); // 注意这里初始化成 1 了,下面只需要累加儿子的子树大小
        vector<int> answer(n);

        function<void(int, int)> dfs = [&](int x, int father)
        {
            // 遍历 x 的邻居 y
            for (auto &[y, dir] : g[x])
                if (y != father) // 避免访问父节点
                {
                    answer[0] += dir < 0;
                    dfs(y, x); // x 是 y 的父节点
                }
        };

        dfs(0, -1); // 0 没有父节点

        function<void(int, int)> reRoot = [&](int x, int father)
        {
            // 遍历 x 的邻居 y
            for (auto &[y, dir] : g[x])
                if (y != father) // 避免访问父节点
                {
                    answer[y] = answer[x] + dir;
                    reRoot(y, x); // x 是 y 的父节点
                }
        };

        reRoot(0, -1); // 0 没有父节点

        return answer;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是树的节点个数。DFS 两次,每次 DFS 会递归访问每个节点恰好一次,所以时间复杂度为 O(n)。

空间复杂度:O(n),其中 n 是树的节点个数。

UG NX二次开发-博客文章速览 写了一些UG NX二次开发的心得体会,内容较多,感觉不好查找相应的内容,所以决心把导航写出来,方便自己也方便读者。主专栏是“”,C#专栏为 : “” ,Python专栏为 : “这三个专栏都会持续的更新。如果有需要咨询或者学习讨论的,请私信博主或者加QQ群:749492565。博主几乎每天都在。 阅读详情

相关推荐

1.2 重叠因子:双重指数移动平均(Double Exponential Moving Average, DEMA)概念与Python实战

双重指数移动平均(Double Exponential Moving Average, DEMA)是一种改进的移动平均线指标,由Patrick Mulloy在1994年开发。相比传统的指数移动平均线(EMA),DEMA通过减少滞后性来提供更快的市场反应。它通过两次计算EMA并进行特殊组合来实现这一目标,可以在保持平滑性的同时减少滞后。

Kewin的博客 2171

第 113 场 LeetCode 双周赛题解

t2一般,t4感觉似曾相识的感觉,倒是最后才做的t3..

xhchen的博客 388

克里金插值(Kriging)在MATLAB中的实现(克里金工具箱)

一,直接献上克里金插值MATLAB工具箱 链接:https://pan.baidu.com/s/1p0lt2G8KQ-els7Dyw5jPFg 提取码:wcss 下载后将该程序添加到MATLAB安装文件夹中的/toolbox下,然后在设置路径中添加该程序文件为默认路径即可调用程序。 资源中内附程序使用说明PDF。 二、本人实际操作代码如下所示,标注如下 load data1 %载入数据 %模型参...

qq_40937675的博客 6万+

2023年11月力扣算法和数据结构学习日志

2023年1月决定将力扣作为自己学习算法和数据结构的长期平台。9月20日左右,决定记录下来自己解决力扣编程题的过程(多半是山路十八弯、秃头、白了少年头的过程,菜菜菜!!!这份学习日志争取做到以下三点(以上,完毕。

m0_62243101的博客 553

指导初学者使用Anaconda运行GitHub上One - DM项目的步骤

指导初学者使用Anaconda运行GitHub上One - DM项目的步骤。

AI的内部世界的博客 1485

一文详解数据仓库、数据湖、湖仓一体和数据网格

本文对数据仓库、数据湖、湖仓一体、数据网格四个技术概念进行了辨析,并对它们的优势和局限给出了对比介绍。

oOBubbleX的博客 2596

LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题

⭐️学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。本文是 LeetCode 上分之旅系列的第 45 篇文章,往期回顾请移步到文章末尾~

pengxurui的博客 244

Edge主页被2345劫持?手动清理注册表与组策略的完整方案

浏览器主页劫持是Windows系统中常见的恶意篡改行为,其原理是通过修改注册表、快捷方式、组策略等多处系统配置,强制锁定浏览器启动页。这类劫持不仅影响上网体验,还可能带来隐私泄露和恶意软件感染风险。在安全防护与系统优化场景中,掌握手动清理主页劫持的技能至关重要。本文针对Edge主页被2345导航劫持的问题,深入解析劫持入口,提供从快捷方式、注册表到组策略的逐层清理步骤,并给出防复发策略,帮助用户彻底摆脱顽固劫持。

weixin_30582943的博客 397

从零基础到高效突破:程序员刷题方法论与实战技巧

算法与数据结构是计算机科学的核心基础,其中深度优先搜索(DFS)和二叉树遍历等经典算法范式,在解决路径查找、图遍历等问题时展现出强大的技术价值。通过系统化的刷题训练,开发者不仅能掌握时间复杂度分析、递归优化等关键技术,还能提升在华为OD等企业笔试中的竞争力。力扣(LeetCode)平台提供的2000+题库和在线评测系统,配合标记法、双重DFS等实战技巧,使算法学习从AC到精通成为可能。对于信息系统管理工程师等认证考试,合理平衡视频学习与刷题训练是关键。

weixin_28702105的博客 229

各种AI的调试日记——辅助工作篇

记录使用各种AI(语言大模型)的心得和总结

m0_73056986的博客 1393

无人机飞控算法开发实战:从零到一构建企业级飞控系统

本文系统介绍了无人机飞控算法开发的完整流程,包括飞行动力学模型建立、传感器校准与数据融合、主流控制算法实现(PID、ADRC、EKF)以及企业级飞控系统架构设计。通过结合开源飞控框架(如PX4)和实际工程经验,提供了完整的代码实现示例,帮助学者从零开始掌握无人机飞控开发的核心技术。文中详细讲解了四旋翼无人机的动力学模型、传感器校准方法、EKF状态估计算法、PID和ADRC控制算法的实现,以及MAVLink通信协议的集成。最后,总结了完整的飞控系统开发流程和未来发展趋势。

全栈 3407

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

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

zengjiajun2006的博客 889

企业AI数据资产评估的自动化工具:AI应用架构师的使用指南

在AI驱动的企业数字化转型中,数据资产是支撑模型训练、业务决策的核心燃料。然而,80%的AI项目失败源于数据问题——低质量数据导致模型偏差、未评估的风险引发合规危机、价值不明确的数据浪费资源。手动数据资产评估效率低、易出错,无法满足规模化AI应用需求。本文将以AI应用架构师的视角,拆解企业数据资产评估的核心逻辑,用"餐厅选食材"的生活化比喻解释复杂概念,结合自动化工具的技术原理与实战案例,教你如何从0到1搭建数据资产评估体系。无论是数据质量检测、价值量化还是风险防控,你都能找到可落地的工具方案与实践步骤。

2502_91592937的博客 1629

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

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

2403_87560480的博客 227

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数学建模模型总结

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

力扣73 矩阵置零

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

Pniubi的博客 36

WINCC7.3破解文件

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

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

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

2401_88612756的博客 717

计算机控制技术及应用

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

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

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

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

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

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

2602_95684935的博客 242

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

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

Pniubi的博客 88

LeetCode100 94. 二叉树的中序遍历

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

Shaoxingzong的博客 164

力扣35搜索插入位置(二分查找)

该题通过二分查找寻找插入位置。使用 mid = (left + right) >> 1 防止整数溢出,等价于 (left + right) / 2,但更安全。当 target <= nums[mid] 时,更新答案并继续向左查找;否则向右。最终返回最小的插入位置,时间复杂度 O(log n),空间复杂度 O(1)。

Pniubi的博客 195

动态规划入门 ( - 力扣509斐波那契数)

本文总结动态规划基础题型,以斐波那契数为例,系统讲解动归五部曲:定义dp数组含义、推导递推公式、初始化dp数组、确定遍历顺序、打印调试。强调理解核心思路比死记硬背更重要,通过简单入门题掌握通用解题框架,为后续背包、打家劫舍、子序列等问题奠定基础。

Pniubi的博客 175

力扣hot100-滑动窗口最大值

先提交了一版结果用二重循环超时了。我还奇怪不是【困难】吗?这里面因为要判断堆顶元素下标,所以用了pair,来同时存放元素和下标。然后我又学习了官方题解,大根堆的方法。学到了一个新的容器:大根堆。heap.top();// 查看最大的数,不删除。heap.pop();

m0_61483444的博客 236

Rust LeetCode334 算法题解

本文分析了 LeetCode 334 题“递增的三元子序列”的两种解法。暴力法(三重循环)时间复杂度为 O(n³),仅适用于小数据;最优解采用一次扫描贪心策略,维护 first(最小值)和 second(递增对第二元素的最小值),通过三个分支判断:若当前数大于 second,则存在三元递增子序列;否则更新 first 或 second。算法正确性基于不变式:first 始终为已遍历最小值,second 为可形成递增对的最小尾部。时间复杂度 O(n),空间复杂度 O(1),适用于大规模数据。

weixin_43379230的博客 251

LeetCode100+拓扑排序+多源BFS+矩阵置零

摘要(≤150字): 三题均考察算法优化与经典思想。矩阵置零通过利用首行首列作标记,实现O(1)空间原地操作;腐烂橘子问题用BFS模拟感染过程,结合新鲜橘子计数判断是否可全部腐烂;课程表问题通过拓扑排序检测有向图是否存在环,基于入度数组与邻接表判断课程依赖是否可行。三者分别体现标记法、广搜传播与图论拓扑的核心应用。

记录大学学习学习成长过程,欢迎各位一起交流 566

[ 力扣Hot100 ]:双指针

本文总结了力扣中四道经典双指针题:移动零(双指针交换非零元素)、盛最多水的容器(左右指针收缩求最大面积)、三数之和(排序+双指针去重)及接雨水(前后缀最大值计算)。通过双指针技巧,有效优化时间复杂度,提升代码效率,体现其在数组问题中的核心应用价值。

2403_87560480的博客 284
上一篇: Leetcode2856. 删除数对后的最小数组长度
下一篇: Leetcode2857. 统计距离为 k 的点对
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、付费专栏及课程。

余额充值