【题目】

The i-th person has weight people[i], and each boat can carry a maximum weight of limit.

Each boat carries at most 2 people at the same time, provided the sum of the weight of those people is at most limit.

Return the minimum number of boats to carry every given person.  (It is guaranteed each person can be carried by a boat.) 

船只能坐两人,有体重限制,找出最少船只数。

【思路】

贪心算法,sort排序数组,头尾指针p、q。

每次取最重的,如果未超过limit,【顺走】最轻的。

所以每次最重的尾指针q和答案ans必变化,轻的头指针p只在没超重时,即limit条件下减少。

【代码】

class Solution {
  public int numRescueBoats(int[] people, int limit) {
    Arrays.sort(people);
    int p=0,q=people.length-1,ans=0;

    while(p<=q){
      ans++;
      if(people[p]+people[q]<=limit){
        p++;
      }
      q--;
    } 
  return ans;
  }
}

【例子】

Example 1:

Input: people = [1,2], limit = 3
Output: 1
Explanation: 1 boat (1, 2)

Example 2:

Input: people = [3,2,2,1], limit = 3
Output: 3
Explanation: 3 boats (1, 2), (2) and (3)

Example 3:

Input: people = [3,5,3,4], limit = 5
Output: 4
Explanation: 4 boats (3), (3), (4), (5)
 posted on 2018-11-07 20:02  alau  阅读(376)  评论(0编辑  收藏  举报