【LeetCode75】第五十四题 咒语和药水的成功对数

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们两个数组,要我们找出第一个数组中每个元素能和另一个数组的元素匹配的数量。匹配的条件是乘积大于特定的值。

那么要乘积大于某个值,就需要乘数越大越好,我们可以把表示药水的数组升序排序,接着我们遍历咒语数组,再套一层for循环遍历药水数组,一旦我们发现乘积大于特定值了,那么结束遍历,因为后面的药水都比当前的药水的值要更大,乘积也就只会更大,也就是会大于特定值,所以该咒语能匹配的药水数量就是药水数组的长度减去当前遍历到的药水下标值。

这么做会超时,那么我们需要进一步优化代码,既然是乘积,那么是有两个乘数,我们只对其中一个乘数进行了排序,那么我们把另一个乘数,也就是咒语数组也进行排序,那么就可以再次减少不必要的重复遍历。

我们把咒语降序排序,然后再遍历咒语,在遍历咒语的时候拿一个指针来遍历升序的药水数组,如果当前咒语和药水的乘积大于特定值了,那么该咒语能匹配的药水数量就是药水数组的长度减去当前遍历到的药水下标值,这个和刚才的没有什么区别,区别在于我们用一个指针保存了药水的遍历情况,轮到下一个咒语时,我们接着刚才的药水位置接着遍历直到乘积再次大于特定值即可。

由于咒语按照从大到小的顺序排序,咒语是越来越小的,要保持乘积大于特定值,那么接着从上一个较大的咒语能第一个匹配到的药水下标开始接着寻找更大的能匹配本次咒语的药水下标即可,而不需要像第一次那样从头开始寻找。

由于答案是和初始咒语数组的下标匹配的,所以我们不能直接对咒语数组进行排序,我们可以拿一个数组来存放下标,对这个存放下标的数组按照咒语数组的值来进行排序,这样存放下标的数组排完序后,元素映射到咒语数组就是排序好的咒语数组了,接着我们用遍历这个下标数组来代替咒语数组即可。

代码:

class Solution {
public:vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long long success) {int n=spells.size();vector<int>temp(n);     //存放spells的索引for(int i=0;i<n;i++) temp[i]=i;sort(temp.begin(),temp.end(),[&](int a,int b){  //将spells的索引按照从小到大排序return spells[a]<spells[b];});sort(potions.begin(),potions.end(),[](int a,int b){return a>b;});//将potions按照从大到小的顺序排序.vector<int>res(n);int index=0;    //存放强度大于success的数目(potions的索引)for(int i=0;i<n;i++){if(index==n) res[temp[i]]=index-1;while(index<potions.size() && success<=static_cast<long long>(spells[temp[i]])*static_cast<long long>(potions[index])){   //由于spells按照从小到大的顺序,而potions按照从大到小的顺序排序,如果较小的spell乘potion能大于success,那么更大的spell也可以,因此不用从0开始遍历,直接存放在index中.index++;}res[temp[i]]=index;}return res;}
};

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

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

相关文章

论文阅读《Robust Monocular Depth Estimation under Challenging Conditions》

论文地址&#xff1a;https://arxiv.org/pdf/2308.09711.pdf 源码地址&#xff1a;https://github.com/md4all/md4all 概述 现有SOTA的单目估计方法在理想的环境下能得到满意的结果&#xff0c;而在一些极端光照与天气的情况下往往会失效。针对模型在极端条件下的表现不佳问题&…

【软件测试】selenium3

自动化测试的概念 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最 后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试就相当于将人工测试手段进行转换&#xff0c;让代码…

flex布局语法以及实操,一文带你吃透flex布局的基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Flex是什么&#xff1f; 二、Flex语法知识 1.轴的使用 1.1flex-direction属性 ​编辑 2.基础知识 2.1justify-content属性 2.1.1justify-content: fl…

【HTML5高级第二篇】WebWorker多线程、EventSource事件推送、History历史操作

文章目录 一、多线程1.1 概述1.2 体会多线程1.3 多线程中数据传递和接收 二、事件推送2.1 概述2.2 onmessage 事件 三、history 一、多线程 1.1 概述 前端JS默认按照单线程去执行&#xff0c;一段时间内只能执行一件事情。举个栗子&#xff1a;比方说古代攻城游戏&#xff0c…

CRM软件系统排名靠前的相关推荐

CRM软件是企业管理客户关系的重要工具&#xff0c;它可以帮助企业提高销售效率、增强客户满意度、提升市场竞争力。在众多的CRM软件中&#xff0c;排名靠前的CRM软件有哪些&#xff1f;推荐您一款领先的CRM软件——Zoho CRM。 Zoho CRM是一款全球知名的CRM软件&#xff0c;累计…

Ubuntu18.04系统下通过moveit控制kinova真实机械臂,并用python脚本到达固定点

测试工作空间&#xff1a;test_ws Kinova机械臂型号&#xff1a;m1n6s300 双臂模型中的左臂 测试功能包为kinova-ros官方包 一、读取kinova机械臂末端执行器位姿及tf小知识 1. tf小知识之获取两个连杆坐标系的位姿关系&#xff0c;非常有用&#xff0c;非常有用&#xff0c;非…

Linux tcpdump抓包命令

1.tcpdump抓包命令 -c 指定抓取包的数量&#xff0c;即最后显示的数量 -i 指定tcpdump监听的端口。未指定&#xff0c;选择系统中最小的以配置端口。-i any:监听所有网络端口 -i lo:监听lookback接口。-nn 对监听地址以数字方式呈现&#xff0c;且对端口也以数字方式呈现。…

Ubuntu 22.04安装过程

iso下载地址 Ubuntu Releases 1.进入引导菜单 选择Try or Install Ubuntu Server安装 2.选择安装语言 默认选择English 3.选择键盘布局 默认即可 4.选择安装服务器版本 最小化安装 5.配置网络 选择ipv4 选择自定义 DHCP也可 6.配置代理 有需要可以配置 这里跳过 7.软件源 …

LeetCode518. 零钱兑换 II 以及 动态规划相关的排列组合问题

文章目录 一、题目二、题解方法一&#xff1a;完全背包问题的变体&#xff08;版本1&#xff09;方法二&#xff1a;完全背包问题变体&#xff08;版本2&#xff09; 三、拓展&#xff1a;先遍历物品后遍历背包vs先遍历背包后遍历物品先遍历物品后遍历背包&#xff08;组合问题…

高性能数据JS网格 Bryntum Grid 5.5.2 Crack

高性能数据网格 Bryntum Grid 是一个高性能的网络表格组件。它是用纯 JavaScript 构建的&#xff0c;并且可以轻松地与所有主要 JS 框架集成。 功能丰富 Bryntum Grid 具有您期望从专业网格组件获得的所有功能&#xff0c;包括&#xff1a; 很好的表现;很好的绩效 没有人喜欢缓…

记录我在cmd里使用pip命令下载Python的包时碰见的两个错误

1、pip时报错&#xff1a;Defaulting to user installation because normal site-packages is not writeable 解决方法&#xff1a;在 pip install 后面加上 --user 即可&#xff0c;这个是权限不足引发的问题。如果还是不行则用镜像源&#xff0c;然后别忘了在镜像源的“inst…

机器学习——支持向量机(SVM)

机器学习——支持向量机&#xff08;SVM&#xff09; 文章目录 前言一、SVM算法原理1.1. SVM介绍1.2. 核函数&#xff08;Kernel&#xff09;介绍1.3. 算法和核函数的选择1.4. 算法步骤1.5. 分类和回归的选择 二、代码实现&#xff08;SVM&#xff09;1. SVR&#xff08;回归&a…