题目:
想法:
排序+双指针
选择两个不超过limit,最小组合
选择两个考虑双指针
排序后,选取双指针
情况: 12345 limit=6 奇书对
1,5 成了 第一对;2,4 成了 第二对,left==right 退出; 三队
情况: 123456 limit=7;
1,6; 2,5;3.4一队;left>right退出
情况:12345 limit=5;
1,5不行,那么5单独;1,4成功;2,3成功
情况:1234 limit=6;
与上述一致
具体代码:
class Solution {
public int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
int number=0;
int left=0,right=people.length-1;
while(left<right){
if(people[left]+people[right]<=limit){
left++;
right--;
number++;
}else {
right--;
number++;
}
}
if(left==right) number++;
return number;
}
}
力扣代码:
力扣想法:排序后,最轻的和最重的进行匹配,如果匹配成功,则最轻的上船,不论匹配是否成功,最轻的都需要上船。
class Solution {
public int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
int number=0;
int left=0,right=people.length-1;
while(left<=right){
if(people[left]+people[right]<=limit){
left++;
}
right--;
number++;
}
return number;
}
}