Leetcode406

链接:力扣 。

题目:

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

提示:

  • 1 <= people.length <= 2000
  • 0 <= hi <= 10^6
  • 0 <= ki < people.length

题目数据确保队列可以被重建

示例1:

输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
解释:
    编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。
    编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。
    编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。
    编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
    编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。
    编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
    因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。

示例2:

输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]

思路:

首先对整个数组按身高从大到小排序。如此排序之后,我们可以确定一个维度了,就是身高,前面的节点一定都比本节点高!那么只需要按照k为下标重新插入队列就可以了。

例如:


按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。
以在按照身高从大到小排序后:
局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性
全局最优:最后都做完插入操作,整个队列满足题目队列属性

参考代码:

class Solution {
public:static bool cmp (vector<int> a, vector<int> b) {if (a[0] != b[0]) {return a[0] > b[0];}else {return a[1] < b[1];}}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), cmp);list<vector<int> > que;for (int i = 0; i < people.size(); i++) {int pos = people[i][1];std::list<vector<int> >::iterator it = que.begin();while (pos--) {it++;}que.insert(it, people[i]);}return vector<vector<int> >(que.begin(), que.end());}
};

力扣刷题 DAY_85 贪心相关推荐

  1. LeetCode力扣刷题——简单易懂的贪心算法

    贪心 一.算法解释 采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 贪心算法问题需要满足的条件: (1)最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较 ...

  2. 力扣刷题pdf(java版本,内含暗黑版和光明版),都在这里了

    BAT大佬力扣刷题pdf,都在这里了! ​相信很多小伙伴刷题的时候面对力扣上近两千道题目,感觉无从下手! 我找了很久,今天终于让找到了Java版leetcode算法题解笔记,强烈建议先按照本篇介绍pd ...

  3. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  4. 《剑指Offer》力扣刷题笔记(03-10)

    <剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...

  5. 力扣刷题之二叉树的层序遍历

                                                      Welcome to you, 每日一刷系列 二叉树的层序遍历 二叉树的层序遍历II 二叉树的右视图 ...

  6. 『力扣刷题』5275_找出井字棋的获胜者 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...

  7. 『力扣刷题』5276_不浪费原料的汉堡制作方案 解题代码

    LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5276_不浪费原料的汉堡制作方案 * 5276. 不浪费原料的汉堡制作方案 显示英文描述* 用户通过次数212* 用 ...

  8. 『力扣刷题』5238_找出给定方程的正整数解 解题代码

    html: embed_local_images: true embed_svg: true offline: true toc: undefined print_background: false ...

  9. 力扣刷题全局变量WA,局部变量AC的问题

    力扣刷题全局变量WA,局部变量AC问题 题目 原因 题目 golang力扣leetcode 1219.黄金矿工 原因 今天在刷题的时候,遇到一个现象,本地跑测试全部通过,一提交就错错错,非常离谱 然后 ...

  10. 力扣刷题-前k个高频元素

    力扣刷题-前k个高频元素 题目: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素.你可以按 任意顺序 返回答案. 示例 1: 输入: nums = [1,1,1,2 ...

最新文章

  1. Axel之 -axel_do剖析
  2. 北京智源人工智能研究院2020年博士后招收简章
  3. 用BFS(广度优先搜索queuelist)算法解决农夫过河问题
  4. 长沙网络推广浅析新站怎么做会对排名提升更有帮助?
  5. Strom的trident单词计数代码
  6. java socket 线程池_java socket编程的一个例子(线程池)
  7. 吴恩达深度学习——2.3 logistic回归损失函数
  8. bzoj1013 [JSOI2008]球形空间产生器sphere
  9. 阶段3 2.Spring_02.程序间耦合_1 编写jdbc的工程代码用于分析程序的耦合
  10. DataNucleus之JDO操作演示样例
  11. C语言程序设计C语言之父,C程序设计语言-美-里奇-C语言之父-机械工业出版社
  12. Oracle 11g下载及安装
  13. 高等数学张宇18讲 第二讲 极限与连续
  14. PayPal个人账户不能提现了吗?怎么解决?
  15. mysql 检查配置_MYSQL 配置检查脚本
  16. 小额批量支付系统可以完成跨行资金清算吗_今天,你转账了吗?带你看懂央行小额批量支付系统...
  17. 明翰经验系列之面试篇V1.1(持续更新)
  18. 百度 html 3d,百度地图实现3D棱柱
  19. Android APP启动时出现白屏或者黑屏怎么办?
  20. 浅谈研究生对科研工作的那些认知误区

热门文章

  1. 用U盘安装Windows server 2012 R2
  2. SAP ABAP MOVE-CORRESPONDING ... TO ...的使用
  3. 自编一个从指定位置开始查找字符串的Python代码
  4. MySQL的锁到底有多少内容?和腾讯大佬的技术面谈,我真菜
  5. cityengine笔记
  6. 小米、百度、bigo 、滴滴 、快手等iOS 面试后的一次阶段性总结
  7. android exchange同步日程,OPPO手机的日历怎么同步Exchange邮箱日程的方法
  8. java 生成二维码图片
  9. (转载)消息队列详解
  10. html时区时间显示,JS显示多个国家时区当前时间代码