根據身高重建序列

2021-10-01 05:03:59 字數 1605 閱讀 2203

**是好想,但思路不好想,如果用c語言的話,那你的指標還得用的熟練

假設有打亂順序的一群人站成乙個佇列。 每個人由乙個整數對(h, k)表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。

編寫乙個演算法來重建這個佇列。

注意: 總人數少於1100人。

示例輸入: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

輸出: [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

解題思路:先排序再插入

* 1.排序規則:按照先h高度降序,k個數公升序排序

* 2.遍歷排序後的陣列,根據k插入到k的位置上

** 核心思想:高個子先站好位,矮個子插入到k位置上,前面肯定有k個高個子,矮個子再插到前面也滿足k的要求

/**

* return an array of arrays of size *returnsize.

* the sizes of the arrays are returned as *returncolumnsizes array.

* note: both returned array and *columnsizes array must be malloced, assume caller calls free().

*/int

comfunc

(const

void

*p1,

const

void

*p2)

//此函式用於比較身高和次數

else

}int**

reconstructqueue

(int

** people,

int peoplesize,

int* peoplecolsize,

int* returnsize,

int*

* returncolumnsizes)

*returnsize=peoplesize;

//返回的人數,沒個屁用,但題目要求

*returncolumnsizes=

(int*)

malloc

(sizeof

(int

)*peoplesize)

;for

(int i=

0;i)//賦值,明知道是二,題目非要輸入

qsort

(people,peoplesize,

sizeof

(int*)

,comfunc)

;//快排

for(

int i=

0;i) ret[people[i][1

]]=people[i];}

return ret;

}

執行結果: 通過 顯示詳情 執行用時 : 52 ms , 在所有 c 提交中擊敗了

99.14% 的使用者 記憶體消耗 :

12.2 mb , 在所有 c 提交中擊敗了

100.00% 的使用者

根據身高重建佇列

題目 假設有打亂順序的一群人站成乙個佇列。每個人由乙個整數對 h,k 表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。編寫乙個演算法來重建這個佇列。leetcode406 注意 總人數少於1100人。示例輸入 7,0 4,4 7,1 5,0 6,1 5,2 輸出 5,0 7,...

LeetCode 根據身高重建佇列

題目如下 假設有打亂順序的一群人站成乙個佇列。每個人由乙個整數對 h,k 表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。編寫乙個演算法來重建這個佇列。注意 總人數少於1100人。示例輸入 7,0 4,4 7,1 5,0 6,1 5,2 輸出 5,0 7,0 5,2 6,1 ...

leetcode 根據身高重建佇列

這一題,我當時真的沒想到乙個好的思路,比較簡潔,比較work的是思路,於是我看了答案 題目 假設有打亂順序的一群人站成乙個佇列。每個人由乙個整數對 h,k 表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。編寫乙個演算法來重建這個佇列。注意 總人數少於1100人 輸入 7,0 ...