LintCode 1677. 石头(自定义优先队列)
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. 石头(自定义优先队列)相关推荐
- 二叉堆与自定义优先队列实现删除任意元素
二叉堆与自定义优先队列实现删除任意元素 堆Heap 二叉堆Binary Heap 二叉堆 二叉堆的实现 插入(insert) 取出堆顶(extract / delete max) 优先队列(Prior ...
- LeetCode 373. 查找和最小的K对数字(自定义优先队列BFS)
1. 题目 给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k. 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2. 找到和最小的 k 对数 ...
- Lintcode 1667.石头
题目大意:一条直线上有n个石头,一个人从左往右走,碰到奇数块石头(碰到一块石头数一个数,这里指数的数是奇数),就往右扔,碰到偶数的石头就不管他,如果两块石头在同一个位置,就扔大的那块(能扔的距离小的) ...
- 程序员面试金典 - 面试题 16.10. 生存人数(自定义优先队列)
文章目录 1. 题目 2. 解题 2.1 优先队列 2.2 双指针 1. 题目 给定N个人的出生年份和死亡年份,第i个人的出生年份为 birth[i],死亡年份为 death[i],实现一个方法以计算 ...
- LintCode解题目录
看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...
- C++ STL中的优先队列(priority_queue)使用
原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...
- 浅谈C++ STL中的优先队列(priority_queue)
2019独角兽企业重金招聘Python工程师标准>>> 从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维 ...
- 队列/优先队列的应用问题
最近因为考试耽搁了几天刷题,首先介绍下面这道题,这是有关图的问题: 127. Word Ladder Given two words (beginWord and endWord), and a di ...
- 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E
这次我们通过两道例题来总结一下优先队列的用法和实现: 目录: [BHOJ 1512]女娲加农炮 [BHOJ 1517]女娲加农炮II [BHOJ 1512]女娲加农炮 核心:贪心 + 优先队列 URL ...
最新文章
- SAX解析XML文档——(二)
- python使用imbalanced-learn的TomekLinks方法进行下采样处理数据不平衡问题
- 【深度学习】万字综述:用于深度神经网络加速的Shift操作
- 用python操作mysql数据库(之批量插入数据)
- oracle cluster(簇)的简单使用
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- [C++STL]queue容器用法介绍
- Linux下的Asp.Net配置指南
- 一台电脑两种jdk_jdk和jre有什么区别?
- 6-2 错误与异常处理
- 目前人工智能的主要研究方向是哪些?
- centos一键安装包无法创建vhost
- 复杂UI的组织-创建者模式-uitableview思想
- linux怎么安装Nginx
- matlab d函数,matlab常用函数大集合
- AD20中添加3D封装模型库
- 软件工程毕业设计课题(1)基于python的毕业设计python疫苗预约系统毕设作品
- git提交代码出现 fatal: The remote end hung up unexpectedly-错误处理
- 高等数学基础概念的Python开发实现
- ESXI虚拟机搭建华三vFW2000虚拟防火墙
热门文章
- tbase同步mysql_mysql主从同步
- oracle的env函数用法,env命令_Linux env 命令用法详解:显示系统中已存在的环境变量...
- LeetCode27——Remove Element(移除数组中指定的元素)
- 一篇英文文档中找出频数最多的10个单词
- ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)...
- Web前端学习笔记:Bootstrap
- 系统权限管理设计 (转)
- 思科模拟器:[1]安装及汉化详解
- .net string format
- oracle取差值集合