Leetcode(885)- 救生艇

第 i 我的的體重爲 people[i],每艘船能夠承載的最大重量爲 limit算法

每艘船最多可同時載兩人,但條件是這些人的重量之和最多爲 limitspa

返回載到每個人所需的最小船數。(保證每一個人都能被船載)。 code

示例 1:blog

輸入:people = [1,2], limit = 3
輸出:1
解釋:1 艘船載 (1, 2)

示例 2:排序

輸入:people = [3,2,2,1], limit = 3
輸出:3
解釋:3 艘船分別載 (1, 2), (2) 和 (3)

示例 3:it

輸入:people = [3,5,3,4], limit = 5
輸出:4
解釋:4 艘船分別載 (3), (3), (4), (5)

提示:class

  • 1 <= people.length <= 50000
  • 1 <= people[i] <= limit <= 30000

思路:利用貪心算法,儘可能先載比較重的,而後儘可能看能不能將小的和重的拼成一個。這樣會用到最少的船數。因此應該先對人按重量大小排個序,而後從大的開始,另一頭從小的開始,儘可能和大的能拼成一個。im

int numRescueBoats(vector<int>& people, int limit) { sort(people.begin(),people.end());//排序,這樣是從小到大排好序
        int left = 0,right = people.size() - 1,result = 0; while(left < right) { if(people[left] + people[right] <= limit)//若是能拼,就用一條船
 { result++; left++; right--; } else //若是不行,就讓重的單獨用一條船
 { result++; right--; } } if(left == right) {//只剩下一我的的時候,確定仍是要單獨用一條
            result++; } return result; } 
相關文章
相關標籤/搜索