Leetcode 第 363 场周赛题解

线性自抗扰控制LADRC(一)---基础知识 LADRC(Linear Active Disturbance Rejection Control)是ADRC的线性化版本,通过简化非线性模块(如ESO和反馈律)降低计算复杂度,适用于实时控制系统(如电机驱动)。 阅读详情

Leetcode 第 363 场周赛题解

题目1:2859. 计算 K 置位下标对应元素的和

思路

模拟。

秒杀题。

代码

/*
 * @lc app=leetcode.cn id=2859 lang=cpp
 *
 * [2859] 计算 K 置位下标对应元素的和
 */

// @lc code=start
class Solution
{
public:
    int sumIndicesWithKSetBits(vector<int> &nums, int k)
    {
        int sum = 0;
        for (int i = 0; i < nums.size(); i++)
            if (countOne(i) == k)
                sum += nums[i];
        return sum;
    }
    // 辅函数 - 求整数 x 的置位(1)的个数
    int countOne(int x)
    {
        int count = 0;
        while (x)
        {
            count += x % 2;
            x /= 2;
        }
        return count;
    }
};
// @lc code=end

注:STL函数 __builtin_popcount(i) 可以代替 countOne(i)。

复杂度分析

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

空间复杂度:O(1)。

题目2:让所有学生保持开心的分组方法数

思路:排序 + 枚举

条件1:这位学生被选中,并且被选中的学生人数严格大于 nums[i]。

说明 nums[i] 越小,越能满足这个条件。

条件2:这位学生没有被选中,并且被选中的学生人数 严格小于 nums[i].

说明nums[i] 越大,越能满足这个条件。

所以,我们将数组 nums 从小到大排序,优先选择 nums[i] 小的学生。

枚举选中学生的个数 i,0 <= i <= n,注意特判全选和不选,每次判断能够满足让所有学生保持开心,最终返回分组方法的数目。

代码

/*
 * @lc app=leetcode.cn id=2860 lang=cpp
 *
 * [2860] 让所有学生保持开心的分组方法数
 */

// @lc code=start
class Solution
{
public:
    int countWays(vector<int> &nums)
    {
        int n = nums.size();
        int way = 0; // 分组方法的数目
        sort(nums.begin(), nums.end());
        // 枚举选中学生个数
        for (int i = 0; i <= n; i++)
        {
            if (i == 0) // 不选学生
            {
                // 将 0 与数组的最小值(nums[0])比较
                if (0 < nums[0])
                    way++;
            }
            else if (i == n) // 全选学生
            {
                // 将 n 与数组的最大值(nums[n - 1])比较
                if (n > nums[n - 1])
                    way++;
            }
            else // 选中 前 i(1 ~ n - 1) 个学生
            {
                // 选中学生的最大值为 nums[i - 1],未选中学生的最小值为 nums[i]
                // i 必须位于 (nums[i - 1], nums[i]) 才行
                if (i > nums[i - 1] && i < nums[i])
                    way++;
            }
        }
        return way;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(nlogn),其中 n 为数组 nums 的长度。瓶颈在排序上。

空间复杂度:O(1)。

题目3:最大合金数

思路:二分查找

拆分成 k 个子问题:每台机器最多可以制造多少份合金。

子问题中,假设要制造 num 份合金,由于 num 越小,花费的钱越少,num 越多,花费的钱越多,有单调性,可以二分。

对于第 j 份金属:

  • 如果 composition[i][j] * num ≤ stock[j],那么无需购买额外的金属。
  • 如果 composition[i][j] * num > stock[j],那么需要购买额外的金属,花费为 (composition[i][j]⋅num−stock[j])⋅cost[j]。

如果总花费超过 budget,则无法制造 num 份合金,否则可以制造。

确定二分查找的上下界:

  • 二分下界:0。

  • 二分上界:粗略计算一下,假设 composition[i] 和 cost[j] 都是 1,此时可以制造最多的合金,个数为 *min_element(stock.begin(), stock.end()) + budget。

代码

/*
 * @lc app=leetcode.cn id=2861 lang=cpp
 *
 * [2861] 最大合金数
 */

// @lc code=start

// 二分查找

class Solution
{
public:
    int maxNumberOfAlloys(int n, int k, int budget, vector<vector<int>> &composition, vector<int> &stock, vector<int> &cost)
    {
        int ans = 0;
        int mx = *min_element(stock.begin(), stock.end()) + budget;
        for (vector<int> &com : composition)
        {
            auto check = [&](long long num) -> bool
            {
                long long money = 0;
                for (int i = 0; i < n; i++)
                {
                    if (stock[i] < com[i] * num)
                    {
                        money += (com[i] * num - stock[i]) * cost[i];
                        if (money > budget)
                            return false;
                    }
                }
                return true;
            };
            int left = 0, right = mx + 1;
            while (left < right)
            {
                int mid = (left + right) / 2;
                if (check(mid))
                {
                    ans = max(ans, mid);
                    left = mid + 1;
                }
                else
                    right = mid;
            }
        }
        return ans;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O(knlogU),其中 U=min⁡(stock)+budget。

空间复杂度:O(1)。

题目4:完全子集的最大元素和

思路

按照下标的 core 值分组。

定义 core(n) 为 n 除去完全平方因子后的剩余结果,即 n 的所有出现次数为奇数的质因子相乘。

根据题意,如果同一组中有两个数,它们的下标的 core 值不同,那么这两个数相乘,就不是一个完全平方数。

所以,同一组内的数字下标的 core 值必须都一样。

那么按照下标的 core 值分组,累加同一组的元素和,最大元素和即为答案。

代码

/*
 * @lc app=leetcode.cn id=2862 lang=cpp
 *
 * [2862] 完全子集的最大元素和
 */

// @lc code=start
class Solution
{
public:
    long long maximumSum(vector<int> &nums)
    {
        int n = nums.size();
        vector<long long> sum(n + 1, 0);
        for (int i = 1; i <= n; i++)
            sum[core(i)] += nums[i - 1];
        return *max_element(sum.begin(), sum.end());
    }
    // 辅函数 - 得到 n 除去完全平方因子后的剩余结果 res
    int core(int n)
    {
        int res = 1;
        for (int i = 2; i * i <= n; i++)
        {
            int count = 0;
            while (n % i == 0)
            {
                count++;
                n /= i;
            }
            if (count % 2 == 1)
                res *= i;
        }
        if (n > 1)
            res *= n;
        return res;
    }
};
// @lc code=end

复杂度分析

时间复杂度:O( n n n\sqrt{n} nn ​),其中 n 为数组 nums 的长度。

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

【毕业设计之python系列】基于Flask的在线音乐网设计与实现 本论文旨在通过使用Python的Web框架Flask,设计和实现一个具有完整功能的在线音乐网站。该网站包括用户注册、登录、注销、歌曲上传、编辑、删除、歌单创建、编辑、删除、评论、搜索、音乐播放等功能,并针对不同用户角色(如普通用户、管理员)实现了不同的权限管理。同时,本论文还介绍了如何使用第三方API(如网易云音乐API)获取歌曲信息等技术实现。在设计上,本论文采用了MVC(Model-View-Controller)架构模式,将后端数据处理与前端展示分离,以便于代码的管理和维护。在数据库设计方面,本论文设 阅读详情

相关推荐

ComfyUI实战:AnimateDiff与ControlNet结合,打造无缝风格化视频转绘

本文详细介绍了如何利用ComfyUI平台,结合AnimateDiff与ControlNet插件,实现高质量的视频风格化转绘。通过搭建节点工作流、调整关键参数,有效解决画面闪烁与失真问题,并分享了进阶玩法与常见问题解决方案,帮助用户轻松打造流畅、风格统一的动态视觉效果。

weixin_29039773的博客 342

力扣第363场周赛

首先,说一下我这场周赛的情况,只出来两道题,太久没打周赛了,越来越没有题感了,今后得继续努力了!下面我们进入正题!以上,便是每次周赛的全部内容啦!虽然写这篇博客花费了许多时间,但还是学到了许多东西,之前,我一直认为写博客浪费时间,一直没有好好总结,导致我现在什么题也不会做了,之前会做的题也都忘了,现在回头还要再学,这样其实浪费的时间更多。写博客的成效,时间会向我证明的,希望之后能慢慢进步吧!大学的时光不多了,今后也要好好加油!

qq_51609253的博客 189

QT下利用FFTW实现功率谱密度分析(周期图法)

写在前面 出于项目需求,需要在QT的msvc 2015编译环境下实现功率谱密度估计。 所以这个需求很直接的关键词就是 1. C++ 2. QT 3. 傅里叶变换 4. 功率谱密度估计 但是在网上搜索了很久,没有一个非常直接的答案。所以我觉得很有必要写一篇文章来说明,在QT msvc2015 32bit环境下如何实现功率谱密度估计。 本文并没有经过严格编辑,但代码是已经可以跑通的,如...

李时珍食疗志的博客 5224

【算法竞赛01】leetcode第363场周赛

笔者为数不多AK的比赛。

m0_46121643的博客 296

【车辆动力学】专栏目录汇总

车辆动力学知识目录汇总

CrazyRabbit的博客 1715

Windows 2012 SYSVOL复制失败的处理

题外话:晓原理、知架构、查日志是排错的三件法宝今天在DC1上新建并链接了一个组策略对像,在客户端刷新时,却报下面的错误:“处理组策略失败。Windows无法应用组策略对象LDAP….”如下图所示:于是在客户端用\\domain.com访问,发现\\domain.com\SYSVOL\domain.com\policies下面没有上面报错的组策略对象。这是怎么一回事呢,pin...

weixin_33989780的博客 1670

【力扣周赛】第 363 场周赛(完全平方数和质因数分解)

计算方式同质因数分解,把 n 的所有出现次数为奇数的质因子相乘,即为 core(n)。// 两两之间相乘之后是完全平方数,则质因数分解结果满足各个质因数数量奇偶性相同i

小威的博客 736

SAP 的预算控制并非单一功能,而是根据管控的精细度和业务场景,主要通过三个模块实现:CO(成本控制)、FM(基金管理) 和 PS(项目系统)

SAP系统提供三种预算控制模型:基于CO模块的成本中心/内部订单预算管控,适用于日常费用管理;基于FM模块的基金中心/承诺项目预算控制,满足公共部门严格资金管理需求;基于PS模块的WBS元素预算控制,专为项目型企业设计。各模型通过特定配置实现预算编制、审批、控制和分析功能,并配有核心事务代码(T-Code)支持全流程操作。企业可根据业务场景选择适合的预算控制方式,实现从预算编制到执行监控的闭环管理。

金牌架构师 257

LeetCode解题汇总目录

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

Michael是个半路程序员 8万+

YOLOv8多传感器融合技术——摄像头阵列融合技术详解

本文详细介绍了基于YOLOv8的摄像头阵列融合技术,该技术通过多摄像头协同工作实现360度无死角环境感知。文章阐述了系统原理,包括全方位视野覆盖、冗余设计和深度感知等优势,并提供了完整的Python实现代码。关键技术涵盖多摄像头检测、立体匹配、3D投影和目标融合等模块,支持时间域融合提升稳定性。该系统可显著提高自动驾驶的环境感知能力,减少检测盲区,增强系统可靠性,是L4-L5级自动驾驶的关键技术之一。文章还展示了城市驾驶场景的实际应用,验证了该技术对复杂交通环境的适应能力。

u010117029的博客 214

Python爬虫实战:使用最新技术爬取路透社新闻数据

网络爬虫(Web Crawler)是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。随着大数据和人工智能技术的发展,爬虫技术在数据采集、市场分析、舆情监控等领域发挥着越来越重要的作用。requests:同步HTTP请求库aiohttp:异步HTTP请求库:HTML解析库lxml:高效的HTML/XML解析库selenium:浏览器自动化工具playwright:现代浏览器自动化工具pandas:数据处理和分析库scrapy:专业的爬虫框架:生成随机User-Agentredis:缓存和分布式爬虫支持。

2201_76125261的博客 1204

LeetCode 363 期周赛

给你一个下标从 0 开始的整数数组 nums 和一个整数 k。请你用整数形式返回 nums 中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。整数的二进制表示中的 1 就是这个整数的 置位。例如,21 的二进制表示为 10101 ,其中有 3 个置位。输入:nums = [5,10,1,5,2], k = 1输出:13解释:下标的二进制表示是:0 = 00021 = 00122 = 01023 = 0112。

m0_73731708的博客 255

多思计组实验实验六 微程序控制器实验

实验六 微程序控制器实验

qq_53089329的博客 3791

LeetCode 每日一题 363. 矩形区域不超过 K 的最大数值和

363. 矩形区域不超过 K 的最大数值和 难度:困难 语言:java 题目描述 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一个数值和不超过 k 的矩形区域。 解题思路 终于,来了一道困难题了 首先说我自己的思路,第一个想到的是动态规划,dp,如果想要最大,那么只要前面的矩形里面的和尽可能地大,我可以直接通过上一个矩形来判断向下拓展和向右拓展来确定是否需要添加,但是dp有一个问题就是,我没法确定边界,一般dp的

ChasingSunny的博客 418

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

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

贡献法是一种巧妙的转化问题的数学思维贡献法:一种数学思维,把要求所有方案数中每一个方案总和的总和 转换成每一个元素i的贡献值乘以总方案数的总和16:00下班。

m0_62243101的博客 911

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

周赛363(模拟、排序+枚举、二分答案、思维题)

是班级中学生的总数。假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。如果一组数字中每对元素的乘积都是一个完全平方数,则称这组数字是一个。每台机器都需要特定数量的每种金属来创建合金。,这些特定元素满足:其对应下标的二进制表示中恰存在。完全平方数是指可以表示为一个整数和其自身相乘的数。返回能够满足让所有学生保持开心的分组方法的数目。种不同类型的金属可以使用,并且你可以使用。整数的二进制表示中的 1 就是这个整数的。返回公司可以制造的最大合金数。,我们定义对应该子集的。公司制造合金的数量。

qq_42958831的博客 308

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【OJ比赛日历】快周末了,不来一场比赛吗? #09.16-09.22 #12场

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

CompHub的博客 249

【算法】二分答案

对于 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

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

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

2403_87560480的博客 226

力扣73 矩阵置零

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

Pniubi的博客 34

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

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

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

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

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

2401_88612756的博客 717

【双指针|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的博客 88

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

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

Pniubi的博客 195
上一篇: Leetcode 第 364 场周赛题解
下一篇: Leetcode 第 361 场周赛题解
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、付费专栏及课程。

余额充值