Leetcode 第 366 场周赛题解

思科路由器、交换机组网实验报告 通过思科模拟器搭建路由交换网络 阅读详情

Leetcode 第 366 场周赛题解

题目1:2894. 分类求和并作差

思路

模拟

代码

/*
 * @lc app=leetcode.cn id=2894 lang=cpp
 *
 * [2894] 分类求和并作差
 */

// @lc code=start
// class Solution
// {
// public:
//     int differenceOfSums(int n, int m)
//     {
//         int num1 = 0, num2 = 0;
//         for (int i = 1; i <= n; i++)
//         {
//             if (i % m == 0)
//                 num2 += i;
//             else
//                 num1 += i;
//         }
//         return num1 - num2;
//     }
// };

class Solution
{
public:
    int differenceOfSums(int n, int m)
    {
        // total = num1 + num2
        // ans = num1 - num2 = total - 2 * num2
        int num = 0;
        for (int i = 1; i <= n; i++)
            if (i % m == 0)
                num += i;
        return (1 + n) * n / 2 - 2 * num;
    }
};
// @lc code=end

one-line code:

return n * (n + 1) / 2 - n / m * (n / m + 1) * m;

复杂度分析

时间复杂度:O(n)。

空间复杂度:O(1)。

题目2:2895. 最小处理时间

思路

贪心。

直觉上来说,最早空闲时间越大的处理器,处理 tasks 越小的任务,那么完成时间越早。

我们可以把 processorTime 从小到大排序,tasks 从大到小排序,那么答案就是 processorTime[i] + tasks[4 * i] 的最大值。

代码

/*
 * @lc app=leetcode.cn id=2895 lang=cpp
 *
 * [2895] 最小处理时间
 */

// @lc code=start
class Solution
{
public:
    int minProcessingTime(vector<int> &processorTime, vector<int> &tasks)
    {
        int n = processorTime.size();
        int min_time = INT_MIN;
        sort(processorTime.begin(), processorTime.end());
        sort(tasks.begin(), tasks.end(), greater<int>());
        for (int i = 0; i < n; i++)
        {
            int process_max_time = processorTime[i] + tasks[4 * i];
            min_time = max(min_time, process_max_time);
        }
        return min_time;
    }
};
// @lc code=end

复杂度分析

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

空间复杂度:O(1)。

题目3:2896. 执行操作使两个字符串相等

思路

两种操作都不会改变字符串中 1 和 0 的个数的奇偶性。

特判:

  1. s1 == s2,无需操作,返回0。
  2. s1中1的个数的奇偶性不等于s2中1的个数的奇偶性,无法让二者相等,返回-1。

遍历两个字符串,将字符不同的索引保存在数组 pos 中。

若字符不同的索引数为 pos.size(),那么有 pos.size()/2 对字符需要进行翻转。我们先只考虑操作一,将每两个下标都进行操作一翻转,那么总的操作代价为 x∗pos.size()/2。

然后遍历数组 pos,查看两个相邻下标进行操作二的翻转是否比进行操作一的翻转所需要的代价还小。如果还小,则把答案更新为两个相邻下标进行操作二翻转时的代价。

当一个下标和相邻的下标进行操作二翻转时,它只和前面的下标或者后面的下标组成一对进行翻转,但不能和前面的下标和后面的下标同时进行翻转。

在下面的代码中,cur 表示的是当前下标和前面下标不做操作二时的最优解,pre 表示前一个下标和前前一个下标不做操作二翻转时的最优解, pre+pos[i]−pos[i−1]−x 表示前一个下标和前前一个下标不做操作二翻转但和当前下标做操作二翻转时的最优解。

代码

/*
 * @lc app=leetcode.cn id=2896 lang=cpp
 *
 * [2896] 执行操作使两个字符串相等
 */

// @lc code=start
class Solution
{
public:
    int minOperations(string s1, string s2, int x)
    {
        // 特判
        if (s1 == s2)
            return 0;
        if (count(s1.begin(), s1.end(), '1') % 2 != count(s2.begin(), s2.end(), '1') % 2)
            return -1;
        int n = s1.size();
        vector<int> pos;
        for (int i = 0; i < n; i++)
            if (s1[i] != s2[i])
                pos.push_back(i);
        int cur = pos.size() / 2 * x, pre = cur;
        for (int i = 1; i < pos.size(); i++)
        {
            int next = min(cur, pre + pos[i] - pos[i - 1] - x);
            pre = cur;
            cur = next;
        }
        return cur;
    }
};
// @lc code=end

复杂度分析

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

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

题目4:2897. 对数组执行操作使平方和最大

思路

位运算+贪心

考虑两个数 a 和 b 的二进制表示,讨论二进制第 i 位在 a 和 b 中是否为 1 的情况:

  • 若 a 和 b 的第 i 位都是 0,那么 a AND b 和 a OR b 的第 i 位也都是 0。
  • 若 a 和 b 的第 i 位恰有一个 1,那么 a AND b 的第 i 位是 0,a OR b 的第 i 位是 1。
  • 若 a 和 b 的第 i 位都是 1,那么 a AND b 和 a OR b 的第 i 位也都是 1。

所以操作等价于:把一个数的 0 和另一个数的同一个比特位上的 1 交换。

令 f(a) 表示 a 的二进制表示中有几个 1。

我们发现:f(a) + f(b) = f(a AND b) + f(a OR b)。只不过所有的 1 首先都被 a OR b “抢”了,剩下的 1 才会留给 a AND b。也就是说,每个二进制位中,1 的总数不变。我们可以通过任意次操作,把 1 都集中在某个数里。

设交换前两个数是 x 和 y(x > y),把小的数上的 1 给大的数,假设交换后 x 增加了 d,那么 y 也减少了 d。

交换前:x2+y2

交换后:(x+d)2+(y-d)2=x2+y2+2d(x-y)+2d2>x2+y2

这说明应该通过交换,让一个数越大越好。

相当于把 1 都聚集在一个数中,比分散到不同的数更好。

因此做法就是统计每个二进制位里有多少 1,然后每次用这些 1 拼出尽可能大的数即可。

代码

/*
 * @lc app=leetcode.cn id=2897 lang=cpp
 *
 * [2897] 对数组执行操作使平方和最大
 */

// @lc code=start
class Solution
{
private:
    const int MOD = 1e9 + 7;

public:
    int maxSum(vector<int> &nums, int k)
    {
        vector<int> count(32, 0);
        for (const int num : nums)
        {
            for (int i = 0; i < 32; i++)
                count[i] += (num >> i) & 01;
        }
        long long ans = 0;
        for (int i = 0; i < k; i++)
        {
            int x = 0;
            for (int i = 0; i < 32; i++)
                if (count[i] > 0)
                {
                    x += 1 << i;
                    count[i]--;
                }
            ans = (ans + (long long)x * x) % MOD;
        }
        return ans;
    }
};
// @lc code=end

复杂度分析

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

空间复杂度:O(logU),其中 U 为数组 nums 的最大值。

【3GPP核心网】【5G】史上最全的5G协议规范总结 物理层信道定义:TS38.211(物理层信号的生成、调制,DMRS和额外DMRS,PRACH configuration index,Point A等介绍)传输信道和控制信道的数据处理:TS38.212(包括复用,信道编码,交织,DCI,DMRS端口号等)物理层控制过程:TS38.213(同步,上行功控,随机接入,UE上报和接收控制消息的过程,SSB等)物理层测量:TS38.215(UE和网络的测量控制,UE测量能力)频率、频点相关F R1:TS38.101-1。 阅读详情

相关推荐

从实验室到晶圆厂:一文看懂二维半导体(如MoS2)的CVD生长与晶体管制造挑战

本文深入探讨了二维半导体(如MoS2)从实验室研究到晶圆厂量产的CVD生长与晶体管制造关键技术挑战。重点分析了晶圆级二维半导体的CVD生长工艺优化、晶体管制造的四大界面工程难题,以及掺杂与集成的产业化解决方案,为二维半导体在集成电路领域的应用提供技术参考。

weixin_42651748的博客 471

【LeetCode周赛】第366场周赛

LeetCode第366场周赛

lunaol的博客 189

playwright-mcp 安装使用的详细教程

Playwright MCP 快速入门指南 Playwright MCP Server 是由微软开发的浏览器自动化服务,通过 MCP 协议为 AI/Agent/LLM 提供网页交互能力。它基于可访问性树而非屏幕截图,支持多种浏览器和运行模式。 安装要求: Node.js v18+ 命令行操作能力 支持 MCP 的客户端 安装方式: 通过 npx 快速启动:npx @playwright/mcp@latest 项目依赖安装:npm install @playwright/mcp 主要特性: 支持 Chrome

上善若水 7990

leetcode刷题记录:[2895]最小处理时间

最优的方案是将下标为 1, 4, 5, 6 的任务分配给第一颗处理器(最早空闲时间 time = 10),下标为 0, 2, 3, 7 的任务分配给第二颗处理器(最早空闲时间 time = 20)。最优的方案是将下标为 4, 5, 6, 7 的任务分配给第一颗处理器(最早空闲时间 time = 8),下标为 0, 1, 2, 3 的任务分配给第二颗处理器(最早空闲时间 time = 10)。因此,可以证明执行完所有任务需要花费的最小时间是 16。因此,可以证明执行完所有任务需要花费的最小时间是 23。

人还未醒的博客 188

磁悬浮轴承控制策略设计及性能对比

摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。

技术工作者 1773

别再被网站风控了!手把手教你修改Chromium源码,实现TLS指纹随机化

本文详细介绍了如何通过修改Chromium源码实现TLS指纹随机化,有效规避网站风控。文章深入解析了TLS指纹(如JA3指纹)的工作原理,并提供了具体的源码修改步骤和编译方法,帮助开发者突破高级反爬技术。通过动态打乱加密套件顺序,实现每次请求生成不同的指纹,显著提升自动化工具的隐蔽性。

weixin_28712661的博客 426

Leetcode刷题笔记-dp

44.Wildcard Matching func isMatch(s string, p string) bool { dp := make([][]bool, len(s)+1) // dp[s_idx][p_idx] for i := range dp { dp[i] = make([]bool, len(p)+1) } ...

Sengo的博客 1459

【向量数据库】Milvus向量数据库 ① 从入门到实战

Milvus是专为海量高维向量设计的开源数据库,支持AI搜索、图像识别、推荐系统等场景。相比传统关系型数据库(如PostgreSQL),它更高效处理语义检索、非结构化数据存储,可毫秒级响应亿级向量查询。单机场景下,推荐配置8GB内存/32GB硬盘,支持FAISS/HNSW等索引算法,支持GPU加速。本文涵盖优快云专属部署教程(CentOS脚本/配置调优),提供避坑指南与扩展资源,并对比分析与传统数据库差异。适合算法工程师、AI开发人员快速上手,附官方下载与性能测试技巧,手把手教你搭建高效向量检索系统!

xiezhiyi007的专栏 1586

第 366 场周赛 LeetCode 周赛题解

t4感觉似曾相识,但一时半会儿又想不起来..

xhchen的博客 222

GRCNN抓取网络学习3【自制Jacquard数据集模型调优】

请先完成,这样有利于下面操作的理解!然后第二步是,有了自己的数据集输入到GRCNN中是三种文件,那么可以GRCNN抓取网络学习2【自制Jacquard数据集训练】!既然学会训练,那么开展下一步计划模型调优。GRCNN源码:https://github.com/skumra/robotic-grasping。

vor234的博客 2501

k8s infiniband 和 RoCE(RDMA over Converged Ethernet)

vendors 为设备厂商编号,注意这里不是 ibv_devinfo 命令看到的vendor_id 的值,而是 lspci -n |grep “网卡的bdf” 得到的。如上文所述,启动了两个测试 pod ,登录其中一个 pod(该 pod roce 设备 ip 为 10.56.217.79)如上文所述,启动了两个测试 pod ,登录其中一个 pod(该 pod ip 为 10.96.225.24)说明:文中用到的镜像是自定义的,文末有其Dockerfile 文件。修改该文件,增加污点容忍的内容,如下。

weixin_40548182的博客 1794

LeetCode第177场周赛(Weekly Contest 177)解题报告

这周周日的周赛,大家强的离谱,一堆人AK,完了完了,掉分之旅。最后一题主要是思维题,即分析好情况,其实很容易解决,奈何等我有想法的时候,已经快要结束没时间写代码了,蓝瘦。 第一题:模拟(调用函数库?)。 第二题:DFS 或者 并查集。 第三题:暴力枚举。 第四题:思维 + 贪心。 详细题解如下。 1.日期之间隔几天(Number Of Days Between Two Dates) ...

Mikchy的博客 766

华为OD面试八股真题 - 操作系统 - 1

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 1634

LeetCode第366场周赛学习笔记(学习自灵茶山艾府 AKA 灵神)

本次学习笔记将分析周赛第365场的题目,并提供相关的解题思路和代码实现。这场周赛包括四道题目,分别讨论每道题的解法。

WishLostmymind的博客 519

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LeetCode 第177场周赛

1.日期之间隔几天 【思路】计算两个日期和1970-1-1之间相隔的天数,然后相减即可。需要注意闰年闰月的判断。 int getday(int *d1){ int month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int day1=0,i; for(i=1970;i<d1[0];i++){ if(...

sunshine_lyn的博客 543

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【LeetCode第366场周赛】8028. 执行操作使两个字符串相等 | 线性DP | 中等

【LeetCode第366场周赛】8028. 执行操作使两个字符串相等 | 线性DP | 中等

solego’s blog 434

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【LeetCode第 177 场周赛】5169. 日期之间隔几天

请你编写一个程序来计算两个日期之间隔了多少天。 日期以字符串形式给出,格式为YYYY-MM-DD,如示例所示。 示例 1: 输入:date1 = "2019-06-29", date2 = "2019-06-30" 输出:1 示例 2: 输入:date1 = "2020-01-15", date2 = "2019-12-31" 输出:15 提示: 给定的日期是1971年...

韩旭051的博客 771

Leetcode练习:第 153 场周赛第二题:一周中的第几天

我假设我仅仅知道今日(2019年9月8日)为周日。 python代码如下:闰年判断时的一个小bug让我没拿到分。 class Solution(object): def isRun(self, year): if year % 400 == 0: return True if year % 4 == 0 and year %10...

yzl14的博客 221

LeetCode 第 153 场周赛 【公交站间的距离】【一周中的第几天】【删除一次得到子数组最大和】

5181. 公交站间的距离 环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离。 环线上的公交车都可以按顺时针和逆时针的方向行驶。 返回乘客从出发点 start 到目的地 destination 之间的最短距离。 示例 1: 输入:distance...

pitt1997的博客 379

LeetCode 刷题指北 考点汇总

LeetCode

m0_38024592的博客 384

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等) 题目描述: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: - s = s1 + s2 + ... + sn - t = t1 + t2 + ... + tm - |n - m| <= 1 - 交错 是 s1 + t

huayimenghan的博客 207

LeetCode 每日一题 2026/11/2-2026/11/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 175

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

力扣73 矩阵置零

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

Pniubi的博客 21

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

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

2403_87560480的博客 217

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

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

2401_88612756的博客 589
上一篇: Leetcode 第 367 场周赛题解
下一篇: Leetcode 第 365 场周赛题解
UestcXiye
博客等级 码龄8年 9029粉丝 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、付费专栏及课程。

余额充值