代码随想录算法训练营第三十五天| 860 柠檬水找零 406 根据身高重建队列 452 用最少数量的箭引爆气球

目录

860 柠檬水找零

406 根据身高重建队列

452 用最少数量的箭引爆气球


860 柠檬水找零

class Solution {
    public boolean lemonadeChange(int[] bills) {
        int five = 0;
        int ten = 0;
        for(int bill : bills){
            if(bill == 5)five++;
            else if(bill == 10){
                ten++;
                five--;
            }else{
                if(ten > 0){
                    ten--;
                    five--;
                }else{
                    five -= 3;
                }
            }
            if(ten < 0 || five < 0)return false;
        }
        return true;
    }
}

时间复杂度O(n)

空间复杂度O(1)

406 根据身高重建队列

people[i] = {h,k};

按照h对people数组进行降序排序,如果身高相同则按照k进行升序排序。

创建链表res来存储重建后的顺序。

遍历people数组并加入到res的正确位置下。

将res转化为数组并返回。

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(a,b) -> {
            if(a[0] == b[0])return a[1] - b[1];
            return b[0] - a[0];
        });
        List<int[]>res = new LinkedList<>();
        for(int[] o : people){
            res.add(o[1],o);
        }
        return res.toArray(new int[people.length][]);
    }
}

时间复杂度O(n^2)

空间复杂度O(logn)

452 用最少数量的箭引爆气球

使points从小到大排序,设置变量res记录箭的个数,len记录此时区间的右端点并将初始值设置为第一个区间的右端点。遍历points,有如下两种情况:

  1. 如果len大于或者等于新区间的左端点,说明箭可以一同引爆新气球,不需要新加入箭,使len取得len与此区间右端点之间的最小值。
  2. 如果len小于新区间的左端点,说明需要新加入箭,将res++,并且len赋值为新区间的右端点。

最后返回res

class Solution {
    public int findMinArrowShots(int[][] points) {
        Arrays.sort(points,(o1, o2) -> Integer.compare(o1[0],o2[0]));//使用Integer内置比较方法,否则会溢出
        int res = 1;
        int len = points[0][1];
        for(int i = 1;i < points.length;i++){
            if(len >= points[i][0]){
                len = Math.min(len,points[i][1]);
            }else{
                len = points[i][1];
                res++;
            }
        }
        return res;
    }
}

时间复杂度O(nlogn)

空间复杂度O(logn)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值