这里写目录标题
思路一
考虑对数组进行排序,然后利用对撞指针来完成操作.
class Solution {
public:
int numRescueBoats(vector<int>& people, int limit) {
quickSort(people, 0, people.size() - 1);
// 设置对撞指针
int left = 0, right = people.size() - 1 ;
int res = 0;
while(left <= right) {
if(left == right) {
res++;
break;
}
if (people[left] + people[right] > limit) {
res++;
right--;
} else {
res++;
left++;
right--;
}
}
return res;
}
/**
* @name:
* @msg: 利用此方法进行数组的分区,默认以数组的最后一个
* @param {vector<int>} &array
* @param {int} pivot
* @param {int} right
* @return {*}
*/
int partition(vector<int> &array, int left, int right) {
int pivot = array[right], index = left - 1;
// 利用双指针进行交换
for (int j = left; j < right; j++) {
if(array[j] <= pivot) {
index = index + 1;
swap(array[index], array[j]);
}
}
swap(array[index + 1], array[right]);
return index + 1;
}
void quickSort(vector<int> &array, int left, int right) {
if (left < right) {
int middle = partition(array, 0, right);
quickSort(array, 0 , middle - 1);
quickSort(array, middle + 1, right);
}
}
};