Leetcode 第 387 场周赛题解

解密美团外卖API:mtgsig和waimai_sign参数生成原理与Python实现 本文深入解析了美团外卖API中核心风控参数mtgsig和waimai_sign的生成原理与实现方法。文章详细拆解了waimai_sign作为业务数据签名、mtgsig作为请求环境签名的不同角色与生成逻辑,并通过Python代码示例演示了如何通过逆向工程、Frida动态Hook等技术手段模拟签名生成过程,为开发者理解移动端API安全机制提供了实战参考。 阅读详情

Leetcode 第 387 场周赛题解

题目1:3069. 将元素分配到两个数组中 I

思路

简单地按题意模拟。

代码

/*
 * @lc app=leetcode.cn id=3069 lang=cpp
 *
 * [3069] 将元素分配到两个数组中 I
 */

// @lc code=start
class Solution
{
public:
    vector<int> resultArray(vector<int> &nums)
    {
        vector<int> arr1, arr2;
        arr1.push_back(nums[0]);
        arr2.push_back(nums[1]);
        for (int i = 2; i < nums.size(); i++)
        {
            if (arr1.back() > arr2.back())
                arr1.push_back(nums[i]);
            else
                arr2.push_back(nums[i]);
        }

        vector<int> result(arr1.begin(), arr1.end());
        for (int &x : arr2)
            result.push_back(x);
        return result;
    }
};
// @lc code=end

复杂度分析

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

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

题目2:3070. 元素和小于等于 k 的子矩阵的数目

思路

二维前缀和的模板题。

代码

/*
 * @lc app=leetcode.cn id=3070 lang=cpp
 *
 * [3070] 元素和小于等于 k 的子矩阵的数目
 */

// @lc code=start

// 二维前缀和

class Solution
{
public:
    int countSubmatrices(vector<vector<int>> &grid, int k)
    {
        if (grid.empty())
            return 0;
        if (grid[0][0] > k)
            return 0;

        int m = grid.size(), n = m ? grid[0].size() : 0;
        // sum[i + 1][j + 1] 表示以 grid[0][0] 为左上角,
        // 以 grid[i][j] 为右下角的子矩阵的元素和 
        vector<vector<int>> sum(m + 1, vector<int>(n + 1, 0));

        int count = 0;
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
            {
                sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + grid[i][j];
                if (sum[i + 1][j + 1] <= k)
                    count++;
            }
        return count;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(mn),其中 m 和 n 分别为二维数组 grid 的行数和列数。

空间复杂度:O(mn),其中 m 和 n 分别为二维数组 grid 的行数和列数。

题目3:3071. 在矩阵上写出字母 Y 所需的最少操作次数

思路

统计 Y 中的元素出现次数,记到一个长为 3 的数组 cnt1 中。统计不在 Y 中的元素出现次数,记到一个长为 3 的数组 cnt2 中。

计算最多可以保留多少个元素不变,设这个值为 maxNotChange。

在 0,1,2 中枚举 i 和 j,其中 i≠j。让 Y 中的元素都变成 i,不在 Y 中的元素都变成 j,那么 maxNotChange 就是 cnt1[i]+cnt2[j] 的最大值。

最后返回 n2−maxNotChange,即最少要修改的元素个数。

代码

/*
 * @lc app=leetcode.cn id=3071 lang=cpp
 *
 * [3071] 在矩阵上写出字母 Y 所需的最少操作次数
 */

// @lc code=start
class Solution
{
public:
    int minimumOperationsToWriteY(vector<vector<int>> &grid)
    {
        int n = grid.size();    // n 为奇数
        vector<int> cnt1(3, 0); // 字母 Y 单元格各数字的出现次数
        vector<int> cnt2(3, 0); // 非字母 Y 单元格各数字的出现次数

        auto isY = [&](int i, int j) -> bool
        {
            if (i < 0 || i > n || j < 0 || j > n)
                return false;
            if (i == j && i <= n / 2)
                return true;
            if (i + j == n - 1 && i <= n / 2)
                return true;
            if (i >= n / 2 && j == n / 2)
                return true;
            return false;
        };

        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
            {
                int x = grid[i][j];
                if (isY(i, j))
                    cnt1[x]++;
                else
                    cnt2[x]++;
            }

        int max_not_change = 0;
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                if (i != j)
                    max_not_change = max(max_not_change, cnt1[i] + cnt2[j]);

        return n * n - max_not_change;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(n2+k2),其中 n 为 grid 的长度,k=3。

空间复杂度:O(k),其中 k=3。

题目4:3072. 将元素分配到两个数组中 II

思路

题解:离散化 + 树状数组(附练习题)Python/Java/C++/Go

在这里插入图片描述

代码

/*
 * @lc app=leetcode.cn id=3072 lang=cpp
 *
 * [3072] 将元素分配到两个数组中 II
 */

// @lc code=start
class Fenwick
{
    vector<int> tree;

public:
    Fenwick(int n) : tree(n) {}

    // 把下标为 i 的元素增加 1
    void add(int i)
    {
        while (i < tree.size())
        {
            tree[i]++;
            i += i & -i;
        }
    }

    // 返回下标在 [1,i] 的元素之和
    int pre(int i)
    {
        int res = 0;
        while (i > 0)
        {
            res += tree[i];
            i &= i - 1;
        }
        return res;
    }
};

class Solution
{
public:
    vector<int> resultArray(vector<int> &nums)
    {
        auto sorted = nums;
        ranges::sort(sorted);
        sorted.erase(unique(sorted.begin(), sorted.end()), sorted.end());
        int m = sorted.size();

        vector<int> a{nums[0]}, b{nums[1]};
        Fenwick t1(m + 1), t2(m + 1);
        t1.add(ranges::lower_bound(sorted, nums[0]) - sorted.begin() + 1);
        t2.add(ranges::lower_bound(sorted, nums[1]) - sorted.begin() + 1);
        for (int i = 2; i < nums.size(); i++)
        {
            int x = nums[i];
            int v = ranges::lower_bound(sorted, x) - sorted.begin() + 1;
            int gc1 = a.size() - t1.pre(v); // greaterCount(a, v)
            int gc2 = b.size() - t2.pre(v); // greaterCount(b, v)
            if (gc1 > gc2 || gc1 == gc2 && a.size() <= b.size())
            {
                a.push_back(x);
                t1.add(v);
            }
            else
            {
                b.push_back(x);
                t2.add(v);
            }
        }
        a.insert(a.end(), b.begin(), b.end());
        return a;
    }
};
// @lc code=end

复杂度分析

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

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

YOLOv8【第十章:多任务扩展深度篇·第16节】车道线检测——基于 YOLOv8-Seg 的车道线分割与拟合! 🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。 阅读详情

相关推荐

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

LeetCode第 387 场周赛个人题解

又是手速场

EQUINOX1的博客 590

倍福TwinCAT3 OPC UA配置全流程:从安装到无密码访问(附常见问题解决)

本文提供了倍福TwinCAT3 OPC UA配置的完整实战指南,重点讲解如何实现无密码游客访问。从软件安装、授权配置、服务器初始化到深度排错,详细解析了配置流程中的关键步骤与常见陷阱,帮助工程师高效打通PLC与上位系统的数据通讯通道。

vulkan6gpu的博客 473

LeetCode---387周赛

LeetCode---387周赛---模拟+二维前缀和+树状数组

V_zjs的博客 635

Ubuntu24.04下Librenms的完整安装与配置指南

本文提供了在Ubuntu 24.04 LTS系统上完整安装与配置LibreNMS网络监控系统的详细指南。内容涵盖系统环境准备、依赖安装、源码获取、PHP/数据库/Nginx配置、Composer安装、网页向导设置以及设备添加与日常使用,帮助用户快速部署一套功能强大的开源网络监控解决方案。

tgb3456789的博客 1140

使用 Python 获取网络数据

本文介绍了 Python 获取网络数据、使用 requests 库、编写爬虫代码以及使用 IP 代理的方法。Python 的 requests 库非常方便,可以帮助我们快速访问网络资源。编写爬虫程序需要掌握正则表达式、HTTP 协议等知识,同时需要注意爬取速度和频率,以避免对被爬取网站造成负担。最后,使用 IP 代理可以帮助我们隐匿身份,保护我们的网络安全。

互联说 2696

力扣(leetcode)第387题字符串中的第一个唯一字符(Python)

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!输入: s = “loveleetcode”输入: s = “leetcode”输入: s = “aabb”

qq_58737789的博客 691

Android14_MTK调试LCD屏功能

android14 MTK平台调试LCD屏

m0_37786046的博客 1473

leetcode387. 字符串中的第一个唯一字符,哈希表

leetcode387. 字符串中的第一个唯一字符,哈希表

热爱C++和golang的学生 1245

用 ADBC 把动态查询做得又快又稳:从 CL_SQL_STATEMENT 到安全取数的工程化实践

本文介绍了ABAP中ADBC(ABAP Database Connectivity)技术的核心用法与最佳实践。ADBC作为Open SQL的补充,适用于动态查询、数据库特性调用等场景。文章通过示例代码详细演示了使用ADBC执行查询的完整流程:创建SQL语句、执行查询获取结果集、批量装载数据到内表,以及分包读取处理大数据量。特别强调了动态SQL的安全防护措施,包括输入转义和参数绑定等防注入技术。同时对比了ADBC与Open SQL的适用场景,指出ADBC更适合需要动态访问数据库原生功能的场合。文章还分析了代码

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1775

uniapp - Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not suppo

Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not supported for code-splitting builds. uniapp 编译报错,vite vue3 Hbuilder 中编译报错,uniapp 打包 App 报错(vue3)hbuilder提示错误,uniapp运行到手机/模拟器 App 报错(vue3)uniapp项目启动报错,如何解决这个问题,安卓app,苹果app

🏆 前端领域优质创作者 3967

LeetCode387_387. 字符串中的第一个唯一字符

LeetCode387_387. 字符串中的第一个唯一字符

luoyepiaoxue2014的博客 644

YOLO26跨时代升级!YOLO26 MLCA注意力机制解读

摘要: 本文提出了一种基于多级上下文聚合(MLCA)注意力机制的改进卷积神经网络。MLCA模块通过局部和全局注意力机制动态调整特征图权重,结合了ECA注意力与自适应池化,显著提升特征表达能力。实验表明,添加MLCA后模型mAP提升12.11,准确率提高5.43。文中详细解析了MLCA1模块的工作原理,包括局部/全局池化、卷积操作和注意力加权机制,并介绍了集成MLCA的Bottleneck_MLCA模块。该机制通过多层次特征融合,在保持计算效率的同时增强模型对关键特征的敏感性。最后提供了YOLOv26-MLC

m0_71589036的博客 283

【Leetcode】 第387场周赛 — 题解

You are given a 1-indexed array of distinct integers of length .You need to distribute all the elements of between two arrays and using operations. In the first operation, append to . In the second operation, append to . Afterwards, in the ith opera

小白兔奶糖の博客 1344

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

leetcode 第 387 场周赛 题解

leetcode 第 387 场周赛 题解

weixin_43997780的博客 370

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

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

【LeetCode】第 387 场周赛

给你一个下标从 1 开始、包含 不同 整数的数组 nums ,数组长度为 n。你需要通过 n 次操作,将 nums 中的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中,将 nums[1] 追加到 arr1。在第二次操作中,将 nums[2] 追加到 arr2。之后,在第 i 次操作中:如果 arr1 的最后一个元素 大于 arr2 的最后一个元素,就将 nums[i] 追加到 arr1。否则,将 nums[i] 追加到 arr2。

Infinity的博客 1296

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

算法提升——LeetCode第 387 场周赛总结

LeetCode低387场周赛总结

庄的博客 990

leetcode第 387 场周赛总结

而且Y的位置是随n的大小固定的,所以我们只需要统计出Y内的0,1,2的数量以及整个矩阵的0,1,2的数量,然后计算出最小操作数就可以了。这道题其实就是个简单的二维前缀和,也很简单。这里我已经改进了,但主要还是提供一个思路,就不把修改后的代码贴出来了,如果不会这道题可以顺着我的思路自己做出来。第一道简单题,可以通过slice(-1)获取最新插入的数,进行比较分别操作即可,没什么好说的。这次周赛,题目比较简单,第三道题有点浪费了时间,思路是对的,但是被我把问题复杂化了。数值只可能是0,1,2;

STATICHIT静砸的博客 475

力扣 第 387 场周赛 解题报告 | 珂学家 | 离散化&树状数组 + 模拟场

手速场+模拟场,思路和解法都蛮直接的。所以搞点活如果T2,如果不固定左上角,批量查询某个点为左上角,求满足总和≤k\le k≤k的子矩阵个数如果T2,如果不固定左上角,求总和≤k\le k≤k的子矩阵个数如果T3, 数值不局限于0,1,2, 求最小操作数

m0_66102593的博客 1031

leetcode第387场周赛

维护两个树状数组,用于查询两个arr数组中>x的数量是多少(树状数组查询的是

qq_58860183的博客 451

【LeetCode周赛】第 387 场周赛

LeetCode第387场周赛:100243. 将元素分配到两个数组中 I、 100237. 元素和小于等于 k 的子矩阵的数目、 100234. 在矩阵上写出字母 Y 所需的最少操作次数、 100246. 将元素分配到两个数组中 II、

lunaol的博客 555

LeetCode解题汇总目录

此篇为学习完《数据结构与算法之美》后,在LeetCode刷题的汇总目录,方便大家查找(Ctrl+Find),一起刷题,一起PK交流!如果本文对你有帮助,可以给我点赞加油! Updated on 2022.6.12刷题可以按照不同的专题进行,便于加强某个知识点的理解。另有《剑指Offer》面试题(更新完毕)、《程序员面试金典》面试题(更新完毕)、LintCode代码能力测试CAT。LeetCode MySQL 数据库解题目录点击访问 我的 LeetCode 主页我的 GitHub 主页注:本文超过字数限制,

Michael是个半路程序员 8万+

力扣第 387 场周赛第四题 将元素分配到两个数组中 II 二分查找,离散化,线段树

赛时没做出来,想了个排序,其实排序总假设最坏的情况即倒序,那肯定超时。当时想到线段树了,但是好久没练没搞出来QAQ,我的板子的线段树下标是从1开始的。(新题题解力扣审的挺严,我随便写的被截了,所以乖乖算了次复杂度嘤嘤嘤~)

JK01WYX的博客 1162

历次周赛、专场竞赛、春秋赛题目场次及对应具体题目题号+链接汇总

Warm Up Contest: 386.字典序排数 387.字符串中的第一个唯一字符 388.文件的最长绝对路径 Weekly Contest 2: 389. 找不同 390. 消除游戏 391. 完美矩形 Weekly Contest 3: 392. 判断子序列 393. UTF-8 编码验证 394. 字符串解码 395. 至少有 K 个重复字符的最长子串 Weekly Contest 4: 396. 旋转函数 397. 整数替换 398. 随机数索引 399. 除法求值 Weekly Contest

zhuruihe2014的博客 5314

【OJ比赛日历】快周末了,不来一场比赛吗? #03.02-03.08 #11场

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

CompHub的博客 1103

【Leetcode周赛】从contest1开始。(一般是10个contest写一篇文章)

注意,以前的比赛我是自己开了 virtual contest。这个阶段的目标是加快手速,思考问题的能力和 bug-free 的能力。 前面已经有了100个contest。计划是每周做三个到五个contest。每次计算时间一个半小时。 Warm Up Contest (Contest 1)(2018年10月22日,周一) 链接:https://leetcode.com/cont...

weixin_30820077的博客 230
上一篇: 最简单的基于 FFmpeg 的内存读写的例子:内存转码器
下一篇: 使用 Cmake 对 VTK-9.3.0 进行编译
UestcXiye
博客等级 码龄8年 9031粉丝 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、付费专栏及课程。

余额充值