Leetcode(885)- 救生艇

第 i 我的的体重为 people[i],每艘船能够承载的最大重量为 limit算法

每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limitspa

返回载到每个人所需的最小船数。(保证每一个人都能被船载)。 code

示例 1:blog

输入:people = [1,2], limit = 3
输出:1
解释:1 艘船载 (1, 2)

示例 2:排序

输入:people = [3,2,2,1], limit = 3
输出:3
解释:3 艘船分别载 (1, 2), (2) 和 (3)

示例 3:it

输入:people = [3,5,3,4], limit = 5
输出:4
解释:4 艘船分别载 (3), (3), (4), (5)

提示:class

  • 1 <= people.length <= 50000
  • 1 <= people[i] <= limit <= 30000

思路:利用贪心算法,尽可能先载比较重的,而后尽可能看能不能将小的和重的拼成一个。这样会用到最少的船数。因此应该先对人按重量大小排个序,而后从大的开始,另一头从小的开始,尽可能和大的能拼成一个。im

int numRescueBoats(vector<int>& people, int limit) { sort(people.begin(),people.end());//排序,这样是从小到大排好序
        int left = 0,right = people.size() - 1,result = 0; while(left < right) { if(people[left] + people[right] <= limit)//若是能拼,就用一条船
 { result++; left++; right--; } else //若是不行,就让重的单独用一条船
 { result++; right--; } } if(left == right) {//只剩下一我的的时候,确定仍是要单独用一条
            result++; } return result; } 
相关文章
相关标签/搜索