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

二分查找(九)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; }

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

http://www.jsqmd.com/news/289778/

相关文章:

  • 【实战项目】 微服务架构下的服务健康检查
  • 2026年市面上诚信的离心泵源头厂家哪家强,防腐氟塑料泵/衬氟氟塑料泵/氟塑料泵/衬氟离心泵,离心泵工厂联系方式
  • 2026生物制药用冷水机组最新市场深度解析:技术、厂商与行业生态全景
  • [MySQL] 事务的隔离性与 MVCC - 详解
  • 【实战项目】 springboot作业管理系统
  • 5.IP地址详解
  • 查看SQL server的端口号
  • SQL Server 支持多种网络协议用于客户端与数据库引擎之间的通信
  • Java全栈开发面试实战:从基础到高阶的技术对话
  • 为什么现在人人都在谈 AI Agent?
  • 2026陕西西安灯杆加工厂家推荐:两大实力企业领跑激光切割赛道
  • 2026年全国果蔬粉哪家好?选型实用指南 聚焦功能性与场景适配 品牌差异化对比
  • 线缆拉力试验机供应商推荐:盘点从源头到经销商的核心企业
  • cmake 常用命令解析(工作总结持续更新中)
  • 【实战项目】 粒子群算法在数据挖掘中的应用研究
  • pgsql创建只读账号
  • 安徽地区小红书代运营全解析:芜湖优选三十六行网络科技破局增长
  • 2026年百度竞价广告开户推广代运营评测:昊客网络以核心运营策略脱颖而出。
  • 数字员工与AI销冠系统是什么?主要具备哪些提升商业效率的优势?
  • 【实战项目】 HTTP缓存机制在Web系统中的优化
  • 大模型还在“间歇性失忆“?DeepSeek这波操作直接把记忆焊死在模型里!小白程序员也能轻松上手的革命性技术
  • AI Agent28个高频面试问题与准备策略总结
  • 所谓 RAG,看这一篇就够了!
  • 从“调参侠“到“系统架构师“:这款自我进化的RAG系统正在改写AI应用的底层逻辑
  • 从入门到精通:6步搭建企业级RAG系统,让你的AI应用不再‘胡说八道‘
  • 实战 | 零基础搭建知识库问答机器人:基于SpringAI+RAG的完整实现
  • 打工人真实测评:2026适合办公室吃的健康零食品牌推荐!
  • AI Agent 三件套终章:它居然会“动手”?!——工具使用能力大揭秘
  • 全自动测油仪品牌有哪些?行业TOP2品牌厂家深度推荐
  • 枚举类型 enum:让常量更具语义化