贪心算法-881. Boats to Save People

881. Boats to Save People

贪心算法,

我的思路:先对people数组从小到大排序,然后依次取出最大的未被乘船的,接着从大到小再找出一个体重加一起小于限制的,这样的话之间复杂度应该是o(n2),提交显示超时。

大神的思路:双指针;先对数组排序,从大往小依次乘船,取一个当前状态中最大的,然后看看最小的是否可以和他一起乘船,如果可以一起,那就两个人一起,人数不可以超过2,;如果不可以那么说明剩下的人中也没有可以一起走的,就一个人走;

难点:选取当前最小的作为和当前最大的一起走的搭档,是否符合要求,答案是符合的,这正是题目的妙处所在;

我们假设,W1,W2,W3,..Wn,设当前最大为Wn,假设W1+Wn<=limit,如果W3+Wn<=limt,会不会造成浪费呢,不会,因为此时

W2+W3<W3+Wn<=limit,同样可以两个人一起走,之所以可以这么做贪心,在于最多只可以乘船为2人。

一点体会:这种算法可能只适用于这种特定的场景,不过,从中学习到的更多的是分析问题、解决问题和优化解法思维方式。

 

class Solution {
    public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        int count=0;
        int left=0,right=people.length-1;
        while(left<=right){
            count++;
            if(people[left]+people[right]<=limit)
                left++;
            right--;
        }
        return count;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值