[Leetcode 881]船救人 Boats to Save People 贪心

【题目】

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)

猜你喜欢

转载自www.cnblogs.com/inku/p/9925273.html