LeetCode:救生艇【881】

LeetCode:救生艇【881】

題目描述

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

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

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

 

示例 1:指針

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

示例 2:code

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

示例 3:blog

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

提示:it

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

題目分析

  咱們用到的方法是雙指針貪心算法io

  若是最重的人能夠與最輕的人共用一艘船,那麼就這樣作。不然,最重的人不能與任何人配對,因此他們獲得本身的船。class

  這樣作的緣由是由於若是最輕的人能夠與任何人配對,他們也能夠與最重的人配對。讓p[i]到目前最輕的人,讓p[j]到最重的人。而後,如上所述, 若是最重的人能夠與最輕的人共享船(若是p[j] +p[i] <=限制),那麼這樣作;不然,最重的人坐在本身的船上
 
 

  

Java題解

class Solution {
    public int numRescueBoats(int[] people, int limit) {
        int ans = 0;
        Arrays.sort(people);
        int left = 0;
        int right =people.length-1;
         while (left<=right)
        {
            ans++;
            if(people[left]+people[right]<=limit)
                left++;
             right--;
         }
        return ans;
    }
}
相關文章
相關標籤/搜索