算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

简介: 算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

LeetCode:860.柠檬水找零

860. 柠檬水找零 - 力扣(LeetCode)

1.思路

通过map做映射,记录5,10出现的次数,然后罗列5、10、20出现时对map中元素数量的影响,排除所有不符合条件的,最后符合条件的返回true.

2.代码实现

 1class Solution {
 2    public boolean lemonadeChange(int[] bills) {
 3        // 映射
 4        Map<Integer, Integer> map = new HashMap<>(); 
 5        map.put(5, 0);
 6        map.put(10, 0);
 7        for (int i = 0; i < bills.length; i++) {
 8            if (bills[i] == 5) {
 9                map.put(5, map.get(5) + 1);
10            } else if (bills[i] == 10) {
11                if (map.get(5) > 0) {
12                    map.put(5, map.get(5) - 1);
13                    map.put(10, map.get(10) + 1);
14                } else {
15                    return false;
16                }
17            } else if (bills[i] == 20){
18                if (map.get(5) > 0 && map.get(10) > 0) {
19                    map.put(5, map.get(5) - 1);
20                    map.put(10, map.get(10) - 1);
21                } else if (map.get(5) >= 3){
22                    map.put(5, map.get(5) - 3);
23                } else {
24                    return false;
25                }
26            }
27        }
28        return true;
29    }
30}

3.复杂度分析

时间复杂度:O(n).

空间复杂度:O(1).


LeetCode:406.根据身高重建队列

406. 根据身高重建队列 - 力扣(LeetCode)


1.思路

先判断身高,从高到低排列,对于相同身高按照k值从低到高排列。

方法不熟悉,调用还挺难的…


2.代码实现

 1class Solution {
 2    public int[][] reconstructQueue(int[][] people) {
 3        Arrays.sort(people, (a, b) -> a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]);
 4
 5        List<int[]> list = new ArrayList<>();
 6
 7        for (int i = 0; i < people.length; i++) {
 8            int[] person = people[i];
 9            list.add(person[1], person);
10        }
11        return list.toArray(new int[people.length][]);
12    }
13}

3.复杂度分析

时间复杂度:O(n^2).

空间复杂度:O(n).

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

452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

1.思路

对齐左边界,更新右边界,思路清晰,方法调用较弱

2.代码实现

 1class Solution {
 2    public int findMinArrowShots(int[][] points) {
 3        Arrays.sort(points, (a, b) -> Integer.compare(a[0] , b[0]));
 4
 5        int count = 1;
 6        for (int i = 1; i < points.length; i++) {
 7            if (points[i][0] > points[i - 1][1]) {
 8                count++;
 9            } else {
10                points[i][1] = Math.min(points[i - 1][1], points[i][1]);
11            }
12        }
13        return count;
14    }
15}

3.复杂度分析

时间复杂度:O(logn).

空间复杂度:O(1).

4.视频解析

贪心算法,判断重叠区间问题 | LeetCode:452.用最少数量的箭引爆气球_哔哩哔哩_bilibili

相关文章
|
6天前
|
算法
【优选算法专栏】专题十三:队列+宽搜(一)
【优选算法专栏】专题十三:队列+宽搜(一)
30 0
|
6天前
|
存储 算法
数据结构与算法:队列
在上篇文章讲解了栈之后,本篇也对这一章进行收尾,来到队列!
数据结构与算法:队列
|
6天前
|
机器学习/深度学习 算法 测试技术
【动态规划】C++算法312 戳气球
【动态规划】C++算法312 戳气球
|
6天前
|
存储 算法 索引
【算法与数据结构】队列的实现详解
【算法与数据结构】队列的实现详解
160 0
|
6天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
12 0
数据结构与算法 栈与队列
|
6天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
6天前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解
|
6天前
|
消息中间件 算法 调度
数据结构与算法——单向循环列表、栈和队列(附代码)
数据结构与算法——单向循环列表、栈和队列(附代码)
16 2
|
6天前
|
存储 缓存 算法
【数据结构与算法-初学者指南】【附带力扣原题】队列
【数据结构与算法-初学者指南】【附带力扣原题】队列
|
6天前
|
存储 算法 Java
【数据结构与算法】7、队列(Queue)的实现【用栈实现队列】
【数据结构与算法】7、队列(Queue)的实现【用栈实现队列】
38 0