1. 题目

你现在有n个英雄,每个英雄的战斗力为 atk1,你要用这些英雄去对付n个怪物,每个怪物的战斗力为atk2。
在一场战斗中,你需要安排每个英雄分别与一个怪兽战斗,如果英雄战斗力高于怪兽,那个怪兽就会被击杀,问最多能击杀几个怪兽?

样例 1:
输入: atk1 = [6, 4, 8, 5, 1], atk2 = [2, 3, 4, 5, 6]
Output: 4
解释:
6 > 4
4 > 2
8 > 6
5 > 3
1 < 5样例 2:
输入: atk1 =[43,25,33,17], atk2 = [41,41,17,11]
Output: 3
解释:
42 > 41
33 > 17
25> 11
17 < 41注意事项
2<=n,m<=100000

2. 解题

  • 对怪兽 atk2 进行排序

  • 遍历每个英雄,去二分查找比我小的最后一个怪兽(我能力下,能打败的最强的怪兽)

  • 变形版 二分查找请参考

class Solution {public:int getAns(vector<int> &atk1, vector<int> &atk2) {//sort(atk1.begin(),atk1.end());sort(atk2.begin(),atk2.end());int i = 0, j = 0, count = 0;for(i = 0; i < atk1.size(); ++i){j = bs(atk2,atk1[i],0,atk2.size()-1);if(j == -1)//没找到能打赢的atk2.pop_back();//输给最强的吧,拉低怪兽的实力else{count++;//能打赢,不能打个菜鸟吧,找个最强的atk2.erase(atk2.begin()+j);}}return count;}int bs(vector<int>& a, int &target, int l, int r){    //二分查找小于 target 的最后一个int mid;while(l <= r){mid = l+((r-l)>>1);if(a[mid] >= target)r = mid-1;else{if((mid==a.size()-1) || a[mid+1] >= target)return mid;elsel = mid+1;}}return -1;}
};
  • 数组erase操作,数据搬移,很耗费时间,有更好的解法吗?求指教。

100% 数据通过测试
总耗时 855 ms
您的提交打败了 1.39% 的提交!

LintCode 1692. 组队打怪(田忌赛马,二分查找)相关推荐

  1. LintCode 1753. 写作业(二分查找)

    1. 题目 n个人,他们每个人需要独立做 m 份作业. 第 i 份作业需要花费 cost[i] 的时间.由于每个人的空闲时间不同,第 i 个人有 val[i] 的时间,这代表他做作业的总时间不会超过 ...

  2. LintCode 1816. 使结果不超过阈值的最小除数(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 描述 给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和. 请你找 ...

  3. lintcode刷题 14. 二分查找,迭代和二分法Python实现

    14. 二分查找 描述 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1. ...

  4. LeetCode 870. 优势洗牌(贪心 二分查找)

    1. 题目 给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述. 返回 A 的任意排列,使其相对于 B 的优势最大化. 示例 ...

  5. LeetCode 1231. 分享巧克力(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你有一大块巧克力,它由一些甜度不完全相同的小块组成.我们用数组 sweetness 来表示每一小块的甜度. 你打算和 K 名朋友一起分享这块巧克力,所以你 ...

  6. 二分查找模板及题目汇总

    文章目录 经典二分查找模板 Templete1 Templete2 Templete3 查找第一次出现target的位置 查找最后一次出现target的位置 查找与target最接近的数的位置 第一个 ...

  7. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  8. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  9. 二分查找模板全面总结

    二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...

最新文章

  1. JavaScript对象,方括号和算法
  2. Android10.0 BroadcastCast广播机制原理
  3. python 水位_一种适用于利用图像识别水位的水位尺的制作方法
  4. 缠绕多年的PCIE通道数问题终于完全明白了,欢迎指正
  5. 深入理解.bin文件和.nb0文件的结构
  6. Windows Service Application Overview
  7. Centos7.0 Vmware10.0.3 网络桥接配置
  8. GTID复制异常的解决步骤
  9. 浏览器的UserAgent
  10. apqp过程流程图范本_过程流程图(APQP要求)
  11. 如何把代码写的更优雅,你需要这一份代码精进书单!
  12. 工业智能网关,数据采集网关
  13. 我的春招实习+秋招总结【前端开发】
  14. Anaconda介绍、安装及使用保姆级教程
  15. 创龙Xilinx Zynq-7000系列SoC高性能处理器开发板的SFP+接口、FMC接口
  16. python商业数据分析课程设计_商务数据分析实验室
  17. 看完这个教程,不怕Xshell中修改字体有困难
  18. 【C语言】初识C语言(下篇)
  19. android activity获取dialog对象,Android开发笔记之:Dialog的使用详解
  20. 突发!知识星球官方禁止一切加星球送ChatGPT账号拉新~有人慌了!

热门文章

  1. php redis 队列,Redis 实现队列
  2. 民企信息化建设个人经历(四)
  3. Angular2学习笔记——在子组件中拿到路由参数
  4. Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法
  5. 完整的开发一个ContentProvider步骤
  6. Humble Numbers USCAO chapter 3.1
  7. SQL Server中常用全局变量介绍
  8. 遇到异常:这可能是由某个扩展导致的
  9. #define va_arg(AP, TYPE)
  10. 声明为数组定义为指针,声明为指针定义为数组