有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫**計算疊羅漢最多能疊幾個人。解題思路:首先根據身高將陣列順序排列,然後將身高相同的根據體重順序排列。這樣就是求乙個二維的最長上公升序列的問題。leetcode
利用乙個dp陣列儲存當前元素結尾的最長子序列值,然後從前往後遍歷陣列,遍歷每個元素的時候,再從這個元素開始往前遍歷dp陣列,尋找身高體重都比自己小的元素,然後取最大值。時間複雜度是n方的。
這樣做在leetcode中會超時。
class
solution
} res = math.
max(f[i]
, res);}
return res;
}}
解題思路:首先將根據將陣列根據身高正序排列,然後將身高相同的根據體重逆序排列。這樣,就將問題轉化為求體重的最長上公升序列的問題了。
利用乙個dp陣列儲存當前最長的上公升的身高佇列,然後也是從後前往後遍歷陣列,每次遍歷到乙個元素後,就將這個dp陣列進行二分,獲取當前元素的最恰當的位置。什麼是恰當的位置呢?如果這個元素的值在dp陣列的範圍中,則替換第乙個大於等於它的值,如果這個元素大於dp陣列的最大值,則直接新增到最後,同時答案加1。這樣是為了保證陣列保持遞增,同時降低元素的值。
時間複雜度是nlogn 的。不會超時。
class
solution
; arrays.
sort
(person,
(a, b)
-> a[0]
== b[0]
? b[1]
- a[1]
: a[0]
- b[0]
);int[
] f =
newint
[person.length]
;int res =0;
for(
int[
] p : person)
f[r]
= p[1]
;if(res == r) res++;}
return res;
}}
python 馬戲團人塔
有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫 計算疊羅漢最多能疊幾個人。示例 輸入 height 65 70,56 75,60 68 weight 100 150,90 190,95 ...
筆試題 馬戲團(搜狐)
輸入描述 首先乙個正整數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上寫幾筆了,最近 乙個欄目的新首頁測試上線,所以也得以稍微喘口氣.晚上和乙個朋友聊天,不知道怎麼把話題引到了職涯上.個人感覺,像我這種工作了幾年,而且又跳過槽的人,大多朦朦朧朧的開始對工作有點感悟了.這半年來,由於單位需要招人,也有機會成為 考官 陸陸續續的面試一些應聘者.有剛畢業...