Leetcode 881 救生艇問題

2021-10-08 01:28:03 字數 1221 閱讀 6350

問題描述:

現在有n

nn位乘客被困在一艘即將墜海的遇難船上,其中第i

ii個乘客的體重記為people[i]. 每艘救生艇能夠承載的最大體重為limit. 注意:每艘船最多只能坐兩個人,並且乘客的體重之和不能超過limit,但保證:體重最大的那位乘客也能坐上救生艇,即people[i] <= limit,對任意的i都成立.

現在要求出: 要救援這n

nn位乘客最少需要多少艘救生艇?

樣例

輸入:people =

[3,2,2,1], limit = 3

輸出:3

解釋:3 艘船分別載 (1, 2), (2) 和 (3)

解題思路

解題思路要用到貪心的思路, 問題的關鍵是在於「在**貪」. 實際上是應該使得每艘救生艇能夠「物盡其用」, 也就是乘客們的體重之和越接近limit越好。 因此, 由於每艘船最多只能坐兩個,並且要求這兩個人的體重之和盡可能limit, 所以正確的做法就是:每次先把剩餘乘客裡最胖的那位放進救生艇裡,然後再觀察一下剩餘乘客中的最輕的那位,看看能不能「見縫插針」。如果能,那麼這艘救生艇就搭載這兩位乘客。反之,如果加上最輕的這個乘客會超重,那這艘救生艇就只能坐這位最胖的乘客了。

c++**

為了更方便地找到當前剩餘乘客裡最重和最輕的乘客,要先對乘客的體重從低到高排個序。然後i,j兩個指標分別指向第乙個和最後乙個元素。當i,j相交之後,while迴圈結束。其中的if判斷語句就是判斷上文中的「當前最重的乘客和最輕的乘客的體重之和有沒有超重」。如果沒超重, 那麼當前i指向的這位最輕的顧客就能夠搭上救生艇了,接著i++表示第i+1位乘客變成了當前剩餘乘客中最輕的那位

class

solution

return ans;}}

;

LeetCode刷題筆記 881 救生艇

第 i 個人的體重為 people i 每艘船可以承載的最大重量為 limit。每艘船最多可同時載兩人,但條件是這些人的重量之和最多為 limit。返回載到每乙個人所需的最小船數。保證每個人都能被船載 示例 輸入 people 3,2,2,1 limit 3 輸出 3 解釋 3 艘船分別載 1,2 ...

8 8 1 過濾查詢

實現sql中的where功能,包括 對於過濾條件的使用,上述三個方法相同,故僅以filter進行講解。過濾條件的表達語法如下 屬性名稱 比較運算子 值 屬性名稱和比較運算子間使用兩個下劃線,所以屬性名不能包括多個下劃線1 相等 exact 表示判等。例 查詢編號為1的圖書。bookinfo.obje...

看電影881有感

一直生活在東北,所了解的風土人情都是關東文化。對於中華其它文化元素了解的並不多。看881後,才感受到,原來福建歌也這樣好聽。一首首動聽的歌竄插在劇情之中,隨著劇情的發展撥動你的心弦,讓人為之感動。一人一半 感情不散 一人一素故 感情才會久 時光累計 安靜的淚滴 一心去追 愛那麼可貴 這樣的人 這樣地...