有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫**計算疊羅漢最多能疊幾個人。
示例:輸入:height =[65
,70,56
,75,60
,68] weight =
[100
,150,90
,190,95
,110
]輸出:6
解釋:從上往下數,疊羅漢最多能疊 6 層:(56,
90),(
60,95)
,(65,
100),(
68,110),(
70,150),(
75,190)
height.length == weight.length <=
10000
一、二分法
身高按公升序排序,體重按降序排序。
dp陣列表示乙個體重遞增的序列,對於當前掃瞄元素i來講,如果i的體重比dp序列末尾的體重還大,那麼直接放到序列的末尾(效果就是使序列變長),否則,就用元素i去替換序列中已有的元素。
class
solution
:def
bestseqatindex
(self, height: list[
int]
, weight: list[
int])-
>
int:
llen =
len(height)
person =
for i in
range
(llen)
:[height[i]
, weight[i]])
person.sort(key =
lambda x:
(x[0],
-x[1])
) dp =[0
]* llen
ans =
0for per in person:
i, j =
0, ans
while i != j:
mid =
(i+j)//2
if dp[mid]
< per[1]
: i = mid+
1else
: j = mid
dp[i]
= per[1]
if i == ans:
ans +=
1return ans
使用二分法模組
import bisect
class
solution
:def
bestseqatindex
(self, height: list[
int]
, weight: list[
int])-
>
int:
dp=for a,b in
sorted
(zip
(height,weight)
,key =
lambda x:
[x[0],
-x[1]]
):pos = bisect.bisect_left(dp,b)
dp[pos:pos+1]
=[b]
return
len(dp)
演算法 馬戲團人塔
有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫 計算疊羅漢最多能疊幾個人。leetcode 解題思路 首先根據身高將陣列順序排列,然後將身高相同的根據體重順序排列。這樣就是求乙個二維的最...
筆試題 馬戲團(搜狐)
輸入描述 首先乙個正整數n,表示人員個數。之後n行,每行三個數,分別對應馬戲團員編號,體重和身高。輸出描述 正整數m,表示羅漢塔的高度。輸入例子 6 1 65 100 2 75 80 3 80 100 4 60 95 5 82 101 6 81 70 輸出例子 4 用乙個vector 存放員工資料。...
工作隨筆 關於馬戲團的故事
很久沒有到blog上寫幾筆了,最近 乙個欄目的新首頁測試上線,所以也得以稍微喘口氣.晚上和乙個朋友聊天,不知道怎麼把話題引到了職涯上.個人感覺,像我這種工作了幾年,而且又跳過槽的人,大多朦朦朧朧的開始對工作有點感悟了.這半年來,由於單位需要招人,也有機會成為 考官 陸陸續續的面試一些應聘者.有剛畢業...