1. 题目

给定数组 p 代表 n 个石头的位置和数组 d 代表这 n 块石头能够扔的距离。

从左(0位置)往右走。当你第 k 次碰到一个石头时,
如果 k 是奇数, 把这个石头往右扔;
如果 k 是偶数,跳过这个石头。

返回不再会碰到石头时,最右边的石头的位置。

样例 1:
输入: p = [1, 2], d = [5, 4]
输出: 11
解释: 一开始,位置1上的石头扔到位置6。然后跳过位置2的石头。接着位置6的时候被扔到位置11。最后跳过位置11的石头。样例 2:
输入: p = [1, 6], d = [5, 6]
输出: 12
解释: 一开始,位置1上的石头扔到位置6。然后跳过位置6的石头(更大的石头)。接着位置6的时候被扔到位置12。最后跳过位置12的石头。注意事项
n <= 10^4
p[i] <= 10^5
d[i] <= 10^3
如果两个或多个石头停留在相同位置,
你先碰到的是最大的石头(即 **d[i] 最小**的石头)。
意味着首先扔或跳过较大的石头。

2. 解题

unordered_map<int,int> m;// 序号idx,石头能扔的dis距离
struct cmp
{bool operator()(const auto& a,const auto& b){if(a.second == b.second)//距离一样,小的先出队return m[a.first] > m[b.first];return a.second > b.second;//距离近的先出队}
};class Solution {public:int getDistance(vector<int> &p, vector<int> &d) {if(p.size() == 0)return 0;bool flag = true;priority_queue<pair<int,int>,vector<pair<int,int>>,cmp> q;// pair :序号 idx, 石头位置for(int i = 0; i < p.size(); ++i){m[i] = d[i];// idx,能扔的disq.push(make_pair(i, p[i]));//初始位置}pair<int,int> tp;while(!q.empty()){tp = q.top();q.pop();if(flag){q.push(make_pair(tp.first, tp.second+m[tp.first]));}flag = !flag;//奇偶交替}return tp.second;}
};

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

LintCode 1677. 石头(自定义优先队列)相关推荐

  1. 二叉堆与自定义优先队列实现删除任意元素

    二叉堆与自定义优先队列实现删除任意元素 堆Heap 二叉堆Binary Heap 二叉堆 二叉堆的实现 插入(insert) 取出堆顶(extract / delete max) 优先队列(Prior ...

  2. LeetCode 373. 查找和最小的K对数字(自定义优先队列BFS)

    1. 题目 给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k. 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2. 找到和最小的 k 对数 ...

  3. Lintcode 1667.石头

    题目大意:一条直线上有n个石头,一个人从左往右走,碰到奇数块石头(碰到一块石头数一个数,这里指数的数是奇数),就往右扔,碰到偶数的石头就不管他,如果两块石头在同一个位置,就扔大的那块(能扔的距离小的) ...

  4. 程序员面试金典 - 面试题 16.10. 生存人数(自定义优先队列)

    文章目录 1. 题目 2. 解题 2.1 优先队列 2.2 双指针 1. 题目 给定N个人的出生年份和死亡年份,第i个人的出生年份为 birth[i],死亡年份为 death[i],实现一个方法以计算 ...

  5. LintCode解题目录

    看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...

  6. C++ STL中的优先队列(priority_queue)使用

    原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...

  7. 浅谈C++ STL中的优先队列(priority_queue)

    2019独角兽企业重金招聘Python工程师标准>>> 从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维 ...

  8. 队列/优先队列的应用问题

    最近因为考试耽搁了几天刷题,首先介绍下面这道题,这是有关图的问题: 127. Word Ladder Given two words (beginWord and endWord), and a di ...

  9. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E

    这次我们通过两道例题来总结一下优先队列的用法和实现: 目录: [BHOJ 1512]女娲加农炮 [BHOJ 1517]女娲加农炮II [BHOJ 1512]女娲加农炮 核心:贪心 + 优先队列 URL ...

最新文章

  1. SAX解析XML文档——(二)
  2. python使用imbalanced-learn的TomekLinks方法进行下采样处理数据不平衡问题
  3. 【深度学习】万字综述:用于深度神经网络加速的Shift操作
  4. 用python操作mysql数据库(之批量插入数据)
  5. oracle cluster(簇)的简单使用
  6. [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
  7. [C++STL]queue容器用法介绍
  8. Linux下的Asp.Net配置指南
  9. 一台电脑两种jdk_jdk和jre有什么区别?
  10. 6-2 错误与异常处理
  11. 目前人工智能的主要研究方向是哪些?
  12. centos一键安装包无法创建vhost
  13. 复杂UI的组织-创建者模式-uitableview思想
  14. linux怎么安装Nginx
  15. matlab d函数,matlab常用函数大集合
  16. AD20中添加3D封装模型库
  17. 软件工程毕业设计课题(1)基于python的毕业设计python疫苗预约系统毕设作品
  18. git提交代码出现 fatal: The remote end hung up unexpectedly-错误处理
  19. 高等数学基础概念的Python开发实现
  20. ESXI虚拟机搭建华三vFW2000虚拟防火墙

热门文章

  1. tbase同步mysql_mysql主从同步
  2. oracle的env函数用法,env命令_Linux env 命令用法详解:显示系统中已存在的环境变量...
  3. LeetCode27——Remove Element(移除数组中指定的元素)
  4. 一篇英文文档中找出频数最多的10个单词
  5. ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)...
  6. Web前端学习笔记:Bootstrap
  7. 系统权限管理设计 (转)
  8. 思科模拟器:[1]安装及汉化详解
  9. .net string format
  10. oracle取差值集合