演算法 馬戲團人塔

2022-07-03 11:39:10 字數 1171 閱讀 8169

有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫**計算疊羅漢最多能疊幾個人。

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上寫幾筆了,最近 乙個欄目的新首頁測試上線,所以也得以稍微喘口氣.晚上和乙個朋友聊天,不知道怎麼把話題引到了職涯上.個人感覺,像我這種工作了幾年,而且又跳過槽的人,大多朦朦朧朧的開始對工作有點感悟了.這半年來,由於單位需要招人,也有機會成為 考官 陸陸續續的面試一些應聘者.有剛畢業...