当前位置: 首页 > news >正文

算法每日一题: 最大合金数 | 二分

大家好,我是星恒,今天给大家带来的是一道比较正常的二分题目

题目:leetcode 2861
假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。
对于第 i 台机器而言,创建合金需要 composition[i][j] 份 j 类型金属。最初,你拥有 stock[i] 份 i 类型金属,而每购入一份 i 类型金属需要花费 cost[i] 的金钱。
给你整数 n、k、budget,下标从 1 开始的二维数组 composition,两个下标从 1 开始的数组 stock 和 cost,请你在预算不超过 budget 金钱的前提下,最大化 公司制造合金的数量。
所有合金都需要由同一台机器制造。
返回公司可以制造的最大合金数。
示例:
示例 1:

输入:n = 3, k = 2, budget = 15, composition = [[1,1,1],[1,1,10]], stock = [0,0,0], cost = [1,2,3]
输出:2
解释:最优的方法是使用第 1 台机器来制造合金。
要想制造 2 份合金,我们需要购买:
- 2 份第 1 类金属。
- 2 份第 2 类金属。
- 2 份第 3 类金属。
总共需要 2 * 1 + 2 * 2 + 2 * 3 = 12 的金钱,小于等于预算 15 。
注意,我们最开始时候没有任何一类金属,所以必须买齐所有需要的金属。
可以证明在示例条件下最多可以制造 2 份合金。

示例 2:

输入:n = 3, k = 2, budget = 15, composition = [[1,1,1],[1,1,10]], stock = [0,0,100], cost = [1,2,3]
输出:5
解释:最优的方法是使用第 2 台机器来制造合金。 
要想制造 5 份合金,我们需要购买: 
- 5 份第 1 类金属。
- 5 份第 2 类金属。 
- 0 份第 3 类金属。 
总共需要 5 * 1 + 5 * 2 + 0 * 3 = 15 的金钱,小于等于预算 15 。 
可以证明在示例条件下最多可以制造 5 份合金。

示例 3:

输入:n = 2, k = 3, budget = 10, composition = [[2,1],[1,2],[1,1]], stock = [1,1], cost = [5,5]
输出:2
解释:最优的方法是使用第 3 台机器来制造合金。
要想制造 2 份合金,我们需要购买:
- 1 份第 1 类金属。
- 1 份第 2 类金属。
总共需要 1 * 5 + 1 * 5 = 10 的金钱,小于等于预算 10 。
可以证明在示例条件下最多可以制造 2 份合金。

提示:

  • 1 <= n, k <= 100
  • 0 <= budget <= 108
  • composition.length == k
  • composition[i].length == n
  • 1 <= composition[i][j] <= 100
  • stock.length == cost.length == n
  • 0 <= stock[i] <= 108
  • 1 <= cost[i] <= 100

分析:
这道题的思路是二分。因为制造数的范围是有限的,是10^8, 所以我们可以遍历可以制造数量的最大数,利用二分来优化:遍历使用的机器,当使用这个数量制造金属时,是否会超过预算。这样,我们就可以遍历到需要的金属最大数。

这确实是很优质的解法,我们来看看我们的暴力求解。
乍一看,这道题是让我们选择对机器,然后计算能制造的金属数。对于确定使用的机器,我们并没有什么好方法,我们只能通过遍历比较哪台机器在budget下的制造的数量最多,来侧面反应出哪个机器最多(这也是计算机的擅长的事)。
我们来分析一下他的时间复杂度:遍历每一种机器为n,遍历最大金数数(budget/cost),计算一份合金所需花费k。总的时间复杂度O(n * (k + budget/cost))

题解:

class Solution {public int maxNumberOfAlloys(int n, int k, int budget, List<List<Integer>> composition, List<Integer> stock, List<Integer> cost) {int left = 1, right = 200000000, ans = 0;while (left <= right) {int mid = (left + right) / 2;boolean valid = false;for (int i = 0; i < k; ++i) {long spend = 0;for (int j = 0; j < n; ++j) {spend += Math.max((long) composition.get(i).get(j) * mid - stock.get(j), 0) * cost.get(j);}if (spend <= budget) {valid = true;break;}}if (valid) {ans = mid;left = mid + 1;} else {right = mid - 1;}}return ans;}
}

时间复杂度:O(nklogC)

如果大家有什么思考和问题,可以在评论区讨论,也可以私信我,很乐意为大家效劳。
好啦,今天的每日一题到这里就结束了,如果大家觉得有用,可以可以给我一个小小的赞呢,我们下期再见!

相关文章:

算法每日一题: 最大合金数 | 二分

大家好&#xff0c;我是星恒&#xff0c;今天给大家带来的是一道比较正常的二分题目 题目&#xff1a;leetcode 2861假设你是一家合金制造公司的老板&#xff0c;你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用&#xff0c;并且你可以使用 k 台机器来制…...

jvm优化过程

1.top命令执行查看&#xff0c;当前占比比较高的进程&#xff0c;可以看到21660这个进程的cpu占比已经100%了 编辑 2.可以定位到那个微服务的进程&#xff0c;可以看到是fs服务 编辑 3.执行 top -p 21660,然后按下大写的H&#xff0c;可以看到21772这个线程占比最高 编辑 4.…...

《Docker极简教程》--目录

一、前言 本书的目的和目标Docker的简介 二、Docker基础 Docker的历史和发展Docker的工作原理Docker的主要组件 三、Docker环境的搭建 在Windows上搭建Docker环境在Mac上搭建Docker环境在Linux上搭建Docker环境 四、Docker镜像 Docker镜像的概念Docker镜像的创建和使用D…...

嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针)

1. 指针数组&#xff1a; int *a[5]; char *str[5]; 指针数组主要用来操作字符串数组&#xff0c;通常将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。 二维数组主要用来存储字符串数组&#xff0c;通过每行存储一个字符串&#xff0c;多行存储多个字符串所组…...

俄罗斯方块游戏设计文档(基于C语言)

1. 引言 本设计文档旨在详细规划基于C语言开发的俄罗斯方块游戏的整体架构、功能模块以及具体实现步骤。这款游戏将通过控制下落的几何形状方块&#xff0c;以填充和消除行的方式进行&#xff0c;旨在提供用户友好的界面与流畅的游戏体验。 2. 需求分析 - 核心元素 - 方块&a…...

【解决】IntelliJ IDEA 重命名 Shift + F6 失效

IntelliJ IDEA 重命名 Shift F6 失效 问题解决 问题 Idea 重命名 Shift F6 &#xff0c;一直没反应 解决 调查发现原因是微软新版的输入法冲突了。需要设置【使用以前版本的微软拼音输入法】解决兼容性。 设置 -> 时间和语言 -> 区域 -> 语言选项 -> 键盘选项…...

Unknown encoder ‘libmp3lame

环境&#xff1a; macos m1 &#xff0c; python3.10.x 背景 做视频切片&#xff0c; 使用moviepy 中VideoFileClip进行截取视频。 报错&#xff1a; Unknown encoder libmp3lameThe audio export failed because FFMPEG didnt find the specified codec for audio encoding …...

Android升级版本兼容问题

1、JDK的选择 AndroidJavaAPI and language features supported14 (API 34)17Core libraries13 (API 33)11Core libraries12 (API 32)11Java API11 and lowerAndroid versions https://developer.android.com/build/jdks The following table lists which version of Gradle…...

微信生成带参数二维码(用户id), 扫码可获取用户id

生成带参数的二维码: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html 示例代码: /*** 生成带参数的二维码** param userId 用户id* return*/GetMappingRequestMapping("/createTicket/{userId}")pu…...

微信小程序(二十一)css变量-定义页面主题色

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.使用css变量 2.消除按钮白块影响 3.修改图标样式 源码&#xff1a; npmTest.json {"navigationStyle": "custom","usingComponents": {//引入vant组件"van-nav-bar"…...

WSL2 Debian系统添加支持SocketCAN

本人最近在使用WSL2&#xff0c;Linux系统选择的是Debian&#xff0c;用起来很不错&#xff0c;感觉可以代替VMware Player虚拟机。 但是WSL2 Debian默认不支持SocketCAN&#xff0c;这就有点坑了&#xff0c;由于本人经常要使用SocketCAN功能&#xff0c;所以决定让Debian支持…...

Redis的五种常用数据结构以及其底层实现

1.字符串 字符串作为Redis中最基础的数据结构&#xff0c;他存储的值可以是任何东西&#xff0c;可以是字符串&#xff0c;数字&#xff0c;二进制&#xff0c;但是字符串存储的值不能超过512M 在Redis中字符串的底层编码是根据值进行改变的 当存储的字符串是一个数字的时候…...

防御保护笔记

防火墙的主要职责在于&#xff1a;控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之 后做出对应的动作。 防火墙分类&#xff1a; 包过滤防火墙&#xff1a; 1&#xff0c;很多安全风险集中在应用层的&#xff0c;所以&#xff0c;仅关注三四层的数据无法做到…...

C++笔记之作用域解析符::和命名空间、作用域的关系

C++笔记之作用域解析符::和命名空间、作用域的关系 —— 杭州 2024-01-26 code review 文章目录 C++笔记之作用域解析符::和命名空间、作用域的关系1.`命名空间`和`作用域`两个术语的联系和区别命名空间(Namespace)作用域(Scope)联系与区别2.`作用域解析符::`和`命名空间`…...

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测 目录 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测预测效果基本介绍程序设计参考资料预测效果 <...

linux安装 黑方容灾备份与恢复系统软件v6.0 代理

1.环境准备 1.1硬件环境 内存>4G&#xff0c;cpu最低双核 1.2把SElinux状态改为Disabled &#xff08;1&#xff09;查看SElinux状态 输入getenforce命令 SELinux共有3个状态&#xff1a; enforcing &#xff08;执行中&#xff09;、permissive &#xff08;不执行但…...

STM32第一节——初识STM32

1 硬件介绍 1.1 硬件平台 配套硬件&#xff1a;以野火的STM32 F1霸道开发板为平台&#xff0c;若用的是别的开发板&#xff0c;可自己进行移植。 1.2 什么是STM32 STM32是由意法半导体&#xff08;STMicroelectronics&#xff09;公司推出的一系列32位的ARM Cortex-M微控制…...

多场景建模:美团HiNet

HiNet: Novel Multi-Scenario & Multi-Task Learning with Hierarchical Information Extraction 背景&#xff1a; 美团的多场景多任务&#xff08;ctr、ctcvr&#xff09; 解决方案 通过分层来分别学习多场景多任务 方案详情 点评&#xff1a;在底层Embedding时用…...

第二百九十三回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取图片文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …...

【网络协议分析】使用Wireshark分析UDP协议

一、实验目的 通过使用Wireshark抓取UDP流来分析学习UDP协议&#xff0c;比较TCP与UDP的不同。 二、实验过程 1、使用Wireshark抓取UDP报文流&#xff0c;常见的使用UDP协议的应用有DNS、QQ、在线游戏等。 2、分析抓取到的数据包&#xff0c;比较与TCP协议的异同。 我们选取DN…...

Magika:AI驱动的文件类型检测神器,准确率高达99%+

Magika&#xff1a;AI驱动的文件类型检测神器&#xff0c;准确率高达99% 【免费下载链接】magika 项目地址: https://gitcode.com/GitHub_Trending/ma/magika 你是否曾经遇到过这样的情况&#xff1a;下载了一个文件却不知道它是什么格式&#xff1f;或者在处理大量文件…...

RTKLIB 2.4.3 b34 多系统兼容配置与实战调试指南

1. RTKLIB 2.4.3 b34多系统配置入门 第一次接触RTKLIB的朋友可能会被它的多系统支持能力惊艳到。这个开源软件不仅能处理GPS数据&#xff0c;还能同时解算GLONASS、Galileo、北斗等多个卫星系统的观测数据。我去年在做一个农业无人机项目时&#xff0c;就深刻体会到多系统兼容的…...

Musicdl革新性全场景音乐解决方案:5个维度揭秘开源音乐下载技术的破局之道

Musicdl革新性全场景音乐解决方案&#xff1a;5个维度揭秘开源音乐下载技术的破局之道 【免费下载链接】musicdl Musicdl: A lightweight music downloader written in pure python. 项目地址: https://gitcode.com/gh_mirrors/mu/musicdl 在数字音乐产业蓬勃发展的今天…...

在AutoDL上搞定nuScenes数据集:从解压到mmdetection3d初始化(含避坑指南)

在AutoDL云端高效部署nuScenes数据集&#xff1a;全流程解析与实战避坑指南 nuScenes作为自动驾驶领域最具挑战性的3D感知数据集之一&#xff0c;包含1000个复杂城市场景的多模态数据。但对于刚接触云端GPU服务器的研究者来说&#xff0c;从数据解压到环境配置的每一步都可能遇…...

VCAM虚拟摄像头:革新移动设备视觉交互的技术探索

VCAM虚拟摄像头&#xff1a;革新移动设备视觉交互的技术探索 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam VCAM虚拟摄像头是一款基于Xposed框架的安卓应用&#xff0c;通过HOOK技术&…...

如何构建高效离线OCR解决方案:从引擎选型到性能优化的完整指南

如何构建高效离线OCR解决方案&#xff1a;从引擎选型到性能优化的完整指南 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 在数字化办公与信息处理中&#xff0c;文字识别&#xff08;OCR&#xff09;技…...

如何用d2s-editor高效管理暗黑破坏神2存档:终极可视化编辑指南

如何用d2s-editor高效管理暗黑破坏神2存档&#xff1a;终极可视化编辑指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款免费开源的Web版暗黑破坏神2存档编辑器&#xff0c;它将复杂的二进制存档文件转化为直…...

互联网舆情分析系统:基于Nanbeige 4.1-3B的情感与主题挖掘

互联网舆情分析系统&#xff1a;基于Nanbeige 4.1-3B的情感与主题挖掘 最近几年&#xff0c;大家有没有感觉网上的声音越来越复杂&#xff1f;一个热点出来&#xff0c;瞬间就是成千上万条评论&#xff0c;有支持的&#xff0c;有反对的&#xff0c;有理性分析的&#xff0c;也…...

YOLO X Layout案例集:10类典型文档(发票/简历/论文/合同/说明书)Layout识别效果汇总

YOLO X Layout案例集&#xff1a;10类典型文档Layout识别效果汇总 获取更多AI镜像 想探索更多AI镜像和应用场景&#xff1f;访问 CSDN星图镜像广场&#xff0c;提供丰富的预置镜像&#xff0c;覆盖大模型推理、图像生成、视频生成、模型微调等多个领域&#xff0c;支持一键部署…...

高效获取Sketchfab 3D资源:Firefox专属下载工具使用指南

高效获取Sketchfab 3D资源&#xff1a;Firefox专属下载工具使用指南 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 在3D设计与开发领域&#xff0c;获取高质量模型…...