LeetCode-Queue_Reconstruction_by_Height

题目:

Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k), where h is the height of the person and k is the number of people in front of this person who have a height greater than or equal to h. Write an algorithm to reconstruct the queue.

Note:
The number of people is less than 1,100.

Example

Input:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

Output:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

翻译:

假设你有一组人随机站立在一个队列中。每个人都用一组数字对(h,k)来表示,其中h为人的高度,k为排在这个人之前高度比他高或和他一样高的人的数量。写下一个算法来重构这个队列。

注意:

人的数量少于1,100。

例子

输入:

[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

输出:

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

 

思路:

首先将这个数组排序:按数字对中的第一个数字从大到小排序,若两个数字相等,再按后面的数字从小到大排序。排序好后再依次按后面的数字将数字对插入到对应的位置。

 

C++代码(Visual Studio 2017):

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

/*
bool cmp(const pair<int, int> a, const pair<int, int> b) {
	return a.first == b.first ? a.second<b.second : a.first>b.first;
}*/

class Solution {
public:
	vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
		if (people.size() == 0) return {};
		
		//sort(people.begin(), people.end(), cmp);   //若在外部定义cmp,则需要写到class外面,若写在class里面,编译不通过
		
		sort(people.begin(), people.end(), [](const pair<int, int> &a, const pair<int, int> &b) {  //上述sort的另一写法
			return a.first == b.first ? a.second<b.second : a.first>b.first;});
		vector<pair<int, int>> ans;
		for (auto val : people)
			ans.insert(ans.begin() + val.second, val);
		return ans;
	}

};

int main()
{
	Solution s;
	vector<pair<int, int>> people = { {7,0},{4,4},{7,1},{5,0},{6,1},{5,2} };
	vector<pair<int, int>> res = s.reconstructQueue(people);
	for (auto m : res) {
		cout << m.first << "***" << m.second << " ";
	}
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值