news 2026/4/29 18:18:02

二分查找(九)2300. 咒语和药水的成功对数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分查找(九)2300. 咒语和药水的成功对数

2300. 咒语和药水的成功对数

给你两个正整数数组spellspotions,长度分别为nm,其中spells[i]表示第i个咒语的能量强度,potions[j]表示第j瓶药水的能量强度。

同时给你一个整数success。一个咒语和药水的能量强度相乘如果大于等于success,那么它们视为一对成功的组合。

请你返回一个长度为n的整数数组pairs,其中pairs[i]是能跟第i个咒语成功组合的药水数目。

示例 1:

输入:spells = [5,1,3], potions = [1,2,3,4,5], success = 7输出:[4,0,3]解释:- 第 0 个咒语:5 * [1,2,3,4,5] = [5,10,15,20,25] 。总共 4 个成功组合。 - 第 1 个咒语:1 * [1,2,3,4,5] = [1,2,3,4,5] 。总共 0 个成功组合。 - 第 2 个咒语:3 * [1,2,3,4,5] = [3,6,9,12,15] 。总共 3 个成功组合。 所以返回 [4,0,3] 。

整体思路较为清楚,遍历每一份spells,利用这个spell来进行与potions每个元素乘积结果的判断,使用二分搜索优化,找到第一个大于等于target的位置,后续直接用个数-位置即可

class Solution { public: int lower_bound(int spell, vector<int>& potions, long long target) { int left = 0, right = potions.size()-1; while(left <= right) { int mid = left + (right-left)/2; // long long temp = potions[mid] * spell; // if(potions[mid] < target/spell) if (1LL * potions[mid] * spell < target) left = mid + 1; else right = mid - 1; } return left; } vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long long success) { int n = spells.size(), m = potions.size(); vector<int> res(n); sort(potions.begin(), potions.end()); for(int i = 0; i < n; i++) { int index = lower_bound(spells[i], potions, success); res[i] = m - index; } return res; } };

主要问题是记录一下long long型元素的结果溢出

以下错误写法:由于potions和spell元素都是int类型,所以他们会先进行相乘,但结果已经超过他们的存储范围了,这时候再用longlong来接收就已经晚了

方案A:使用1LL

long long temp = 1LL * potions[mid] * spell;

方案B:使用显示类型转换

long long temp =static_cast<long long>(potions[mid]) * spell;

int lower_bound(int spell, vector<int>& potions, long long target) { int left = 0, right = potions.size()-1; while(left <= right) { int mid = left + (right-left)/2; long long temp = potions[mid] * spell; if (potions[mid] * spell < target) left = mid + 1; else right = mid - 1; } return left; }

还有就是把乘法转化为除法的形式:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:18:30

所谓 RAG,看这一篇就够了!

在当今的大语言模型&#xff08;LLM&#xff09;应用开发中&#xff0c;检索增强生成&#xff08;RAG, Retrieval-Augmented Generation&#xff09;已成为解决模型“幻觉”和知识滞后问题的核心技术方案。然而&#xff0c;构建一个企业级的 RAG 系统远不止是简单的“向量搜索生…

作者头像 李华
网站建设 2026/4/22 14:40:21

鳍片方向之争:竖直 vs 水平,哪种散热更强?

&#x1f393;作者简介&#xff1a;科技自媒体优质创作者 &#x1f310;个人主页&#xff1a;莱歌数字-CSDN博客 &#x1f48c;公众号&#xff1a;莱歌数字&#xff08;B站同名&#xff09; &#x1f4f1;个人微信&#xff1a;yanshanYH 211、985硕士&#xff0c;从业16年 从…

作者头像 李华
网站建设 2026/4/23 9:17:47

爱普生车规级32.768 kHz晶振FC2012AA助力汽车新项目研发

爱普生推出的FC2012AA是一款汽车用32.768kHz晶体谐振器&#xff0c;符合AEC-Q200标准&#xff0c;能胜任苛刻的工况。FC2012AA具有小尺寸、低功耗和耐高温的特性&#xff0c;支持高达125℃的工作温度&#xff0c;具备较低的ESR值&#xff0c;可在全温度范围内保持2010⁻⁶的频率…

作者头像 李华
网站建设 2026/4/23 9:17:43

Web3基建狂想曲:公链、侧链与联盟链的交响式开发全攻略

引言&#xff1a;当区块链进入"乐高时代" 在以太坊Gas费突破200Gwei的深夜&#xff0c;某DeFi协议因网络拥堵损失数百万美元&#xff1b;与此同时&#xff0c;某企业联盟链因节点权限争议陷入治理僵局。这些极端场景揭示了一个残酷真相&#xff1a;区块链世界正面临&…

作者头像 李华
网站建设 2026/4/24 9:24:21

大模型智能体化推理:LLM如何成为自主智能体的全面解析

本文系统综述了智能体化推理(Agentic Reasoning)范式&#xff0c;探讨大语言模型如何从静态推理转变为与环境持续交互的自主智能体。文章从三个维度分析&#xff1a;基础智能体推理(规划、工具使用)、自我演进智能体推理(通过反馈自适应)和集体多智能体推理(多智能体协作)&…

作者头像 李华