每日一题 | 如何快速过河 | 桶排序与双指针

Posted 数据0101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题 | 如何快速过河 | 桶排序与双指针相关的知识,希望对你有一定的参考价值。


    

点击上方蓝色字体,关注我们,支持我们

       历史最初的记载大禹治水,到如今庚子年的各地暴雨,各地水库告急并且超过预警线,自然灾害问题一直在困扰着人们的生活。假设在某地已经连日暴雨,村民如今急需去山顶高地处避难,路过一条河,河流上张三有一条船可以供给村民过,现已知船一次可以载2位乘客,并且一次不可以载客的重量不可以超过N,问:如何利用最少的次数将村民载过河?

    提示: 编写程序入参: 

 

 public int numRescueBoats(int[] people, int limit) { } 提示:编写程序入参:数组 people 为每个村民体重的数组, limit为船的最大载重量.


答案分割线  ==================================


    解题思路:按题要求,一次2个乘客,且载客量最大limit,则优先考虑最轻的和最重的进行组合,如果满足则继续下一组匹配,如果不匹配,则优先考虑最重的剔除并取下一个重位乘客。

    则有代码:

    

class Solution { public int numRescueBoats(int[] people, int limit) { Arrays.sort(people); int i = 0, j = people.length - 1; int ans = 0;
while (i <= j) { ans++; if (people[i] + people[j] <= limit) i++; j--; }
return ans; }}复杂度分析 时间复杂度:O(N \log N)O(NlogN),其中 NN 是 people 的长度。 空间复杂度:O(N)O(N)。

思考:桶排序和Arrays.sort() 对比 场景优势,此题考虑桶排序+双指针又如何得出最优解呢?

以上是关于每日一题 | 如何快速过河 | 桶排序与双指针的主要内容,如果未能解决你的问题,请参考以下文章

区赛第一题讲解+基础算法——桶排序与快速排序

每日一题LeetCode 403 青蛙过河 dp 哈希

利用桶排序进行过河处理

每日一题快速排序

leetcode 每日一题 80. 删除排序数组中的重复项 II

力扣 每日一题 870. 优势洗牌难度:中等(贪心+双指针)