原题
https://leetcode-cn.com/problems/boats-to-save-people/
思路
贪心策略
先排序,再双指针
要使需要的船数尽可能地少,应当使载两人的船尽可能地多。
也就是最重的和最轻的放一起,定义left
和right
如果超过了限制,则最胖的需要单独占一个船,right--
如果没有超过限制,则放一个船,left++
left++
题解
package com.leetcode.code;
import java.util.Arrays;
public class Code881 {
public static void main(String[] args) {
}
public static int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
int res = 0;
int left = 0;
int right = people.length-1;
while (left <= right) {
if (people[left] + people[right] > limit) {
right--;
} else {
left++;
right--;
}
res++;
}
return res;
}
// if条件进行优化
public static int numRescueBoats1(int[] people, int limit) {
Arrays.sort(people);
int res = 0;
int left = 0;
int right = people.length-1;
while (left <= right) {
if (people[left] + people[right] <= limit) {
left++;
}
right--;
res++;
}
return res;
}
}