Leetcode 第 363 场周赛题解

Leetcode 第 363 场周赛题解

  • Leetcode 第 363 场周赛题解
    • 题目1:2859. 计算 K 置位下标对应元素的和
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:让所有学生保持开心的分组方法数
      • 思路:排序 + 枚举
      • 代码
      • 复杂度分析
    • 题目3:最大合金数
      • 思路:二分查找
      • 代码
      • 复杂度分析
    • 题目4:完全子集的最大元素和
      • 思路
      • 代码
      • 复杂度分析

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;}elseright = 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 除去完全平方因子后的剩余结果 resint 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 的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议征稿】第三届应用力学与先进材料国际学术会议(ICAMAM 2024)

第三届应用力学与先进材料国际学术会议&#xff08;ICAMAM 2024&#xff09; 2024 3rd International Conference on Applied Mechanics and Advanced Materials&#xff08;ICAMAM 2024&#xff09; 第三届应用力学与先进材料国际学术会议&#xff08;ICAMAM 2024&#xff09…

Python处理PDF——PyMuPDF的安装与使用详解

​​​​​​​ 1、PyMuPDF简介 1. 介绍 在介绍PyMuPDF之前&#xff0c;先来了解一下MuPDF&#xff0c;从命名形式中就可以看出&#xff0c;PyMuPDF是MuPDF的Python接口形式。 MuPDF MuPDF 是一个轻量级的 PDF、XPS和电子书查看器。MuPDF 由软件库、命令行工具和各种…

字符串排序程序

字符串排序程序&#xff0c;对一个字符串中的数值进行从小到大的排序 例如排序前给定的字符串为" 20 78 9 -7 88 36 29" 排序后&#xff1a; -7 9 20 29 36 78 88 要求使用包装类对数值类型的字符串转换成整型进行排序。 public class StringSort {public static vo…

【保姆级教程】ChatGPT/GPT4科研技术应用与AI绘图

查看原文>>>https://mp.weixin.qq.com/s?__bizMzAxNzcxMzc5MQ&mid2247663763&idx1&snbaeb113ffe0e9ebf2b81602b7ccfa0c6&chksm9bed5f83ac9ad6955d78e4a696949ca02e1e531186464847ea9c25a95ba322f817c1fc7d4e86&token1656039588&langzh_CN#rd…

..\FreeRTOS\include\FreeRTOS.h(1277): error: #65: expected a “;“出现的这个错误标志解决方法

..\FreeRTOS\include\FreeRTOS.h(1277): error: #65: expected a ";" 近来写软件过程中&#xff0c;当在某一个.C文件中我申明了FreeRTOS.h文件&#xff0c;结果呢编译是出现报错了 经过查找&#xff0c;是因为我在另外一个文件声明了 #include <stdbool.h> …

AI虚拟主播开发实战(附源码)

人工智能 文章目录 人工智能前言 前言 https://blog.csdn.net/icemanyandy/article/details/124035967

通过后端数据交互,实现【会议Oa小程序】首页数据渲染

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《微信小程序 》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;…

Java并发-06-AQS(AbstractQueuedSynchronizer)相关

1-概述 AQS全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架。同步器的设计是基于模板方法模式的&#xff0c;也就是说&#xff0c;使用者需要继承同步器并重写指定的方法&#xff0c;随后将同步器组合在自定义同步组件的实现中&#xff0c;并…

使用按钮从 SAP 系统内打开 Excel 文件

了解如何通过 SAP 屏幕上创建的按钮打开所需的 Excel 文件。为了演示这一点&#xff0c;将指导您完成以下步骤。 使用 del 命令删除 SAP 上不必要的元素添加一个按钮&#xff0c;单击后打开弹出窗口创建一个函数来选择 excel 文件创建打开所需 excel 文件的函数 定制 登录 S…

Python 框架学习 Django篇 (三) 链接数据库

只要你是做后端开发的&#xff0c;那么就离不开各种数据库&#xff0c;Django框架对各种数据库都非常友好&#xff0c;比如常见的PostgreSQL、MySQL、SQLite、Oracle&#xff0c;django都对他们提供了统一调用api&#xff0c;我们这里主要使用mysql数据库作为演示 一、ORM机制 …

10月20日星期五今日早报简报微语报早读

10月20日星期五&#xff0c;农历九月初六&#xff0c;早报微语早读分享。 1、上海4岁走失女童遗体在宁波市某滩涂被发现&#xff0c;排除刑事案件&#xff1b; 2、中国多个实体和个人被指涉伊朗军工制造将遭美国非法单边制裁&#xff0c;外交部&#xff1a;坚决反对&#xff…

2.3 如何使用FlinkSQL读取写入到JDBC(MySQL)

1、JDBC SQL 连接器 FlinkSQL允许使用 JDBC连接器&#xff0c;向任意类型的关系型数据库读取或者写入数据 添加Maven依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc</artifactId><version>3.1…

杭电oj--字符串统计

对于给定的一个字符串&#xff0c;统计其中数字字符出现的次数。 输入数据有多行&#xff0c;第一行是一个整数n&#xff0c;表示测试实例的个数&#xff0c;后面跟着n行&#xff0c;每行包括一个由字母和数字组成的字符串。 对于每个测试实例&#xff0c;输出该串中数值的个…

【高危安全通告】Oracle 10月月度安全漏洞预警

近日&#xff0c;安全狗应急响应中心关注到Oracle官方发布安全公告&#xff0c;共披露出在Oracle Weblogic中存在的6个高危漏洞。 漏洞描述 CVE-2023-22069&#xff1a;Oracle Weblogic 远程代码执行漏洞 Oracle WebLogic Server存在远程代码执行漏洞&#xff0c;该漏洞的CVS…

如何写代码实现VRP问题中车辆容量限制及时间窗要求(python)

问题研究背景 使用遗传模拟退火算法求解如下10个卸货点的VRPTW问题。为了使研究的问题更加有意义&#xff0c;本人将时间限理解为服务点一天的具体可以允许配送的时间。 如果不要求车辆从配送中心出发的时间是统一的并且为0时刻&#xff0c;那么就默认第一个配送节点是一定能赶…

用echarts在vue2中实现3d饼图

先看效果&#xff0c;再看文章&#xff1a; 一、安装插件 3d的图不仅用到echarts&#xff0c;还用到了echarts-gl&#xff0c;因此都需要安装一下哦~ npm install echarts npm install echarts-gl2.0.9 //可以指定版本&#xff0c;也可不指定二、在main.js中引入 import * …

达索智能制造解决方案,敏捷电芯制造如何赋能企业竞争力 | 百世慧®

敏捷电芯制造赋能企业竞争力 全球电池市场正在快速扩大&#xff0c;为制造商带来巨大商机。 锂电行业的智能制造如何应用&#xff1f; 电池制造业的市场趋势是什么&#xff1f; 电池制造商面临哪些挑战&#xff1f; 特别是电池电芯制造方面&#xff0c;如何克服挑战获得竞…

竞赛 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

微信小程序 —— 会议OA项目首页布局与Mock数据交互

14天阅读挑战赛如果世界上有奇迹&#xff0c;那一定是努力的另一个名字。 目录 一、小程序布局 1.1 Flex布局 1.2 Flex属性 二、OA会议首页搭建 2.1 首页底部菜单 2.2 创建后端结口 2.3 Mock模拟数据 2.4 首页轮播图搭建 2.5 首页内容搭建 一、小程序布局 1.1 Flex布…

产品新闻稿撰写流程是怎样的,纯干货

企业和品牌每年都会投放大量的产品新闻稿&#xff0c;一篇优质的产品新闻稿可以掀起更多的关注&#xff0c;收获更多的流量&#xff0c;如何在众多的新闻稿中脱颖而出&#xff0c;吸引读者的注意力&#xff1f;本文伯乐网络传媒将为您揭秘产品新闻稿撰写流程&#xff0c;教您如…