【随想录】Day35—第八章 贪心算法 part04

目录

  • [题目1: 柠檬水找零](#题目1: 柠檬水找零)
    • [1- 思路](#1- 思路)
    • [2- 题解](#2- 题解)
      • [⭐ 柠檬水找零 ------题解思路](#⭐ 柠檬水找零 ——题解思路)
  • [题目2: 406. 根据身高重建队列](#题目2: 406. 根据身高重建队列)
    • [1- 思路](#1- 思路)
    • [2- 题解](#2- 题解)
      • [⭐ 根据身高重建队列 ------题解思路](#⭐ 根据身高重建队列 ——题解思路)
  • [题目3: 用最少数量的箭引爆气球](#题目3: 用最少数量的箭引爆气球)
    • [1- 思路](#1- 思路)
    • [2- 题解](#2- 题解)
      • [⭐ 用最少数量的箭引爆气球 ------题解思路](#⭐ 用最少数量的箭引爆气球 ——题解思路)

题目1: 柠檬水找零


1- 思路

贪心思路

  • 正向遍历数组,利用哈希表存储三个面额的钱的个数

2- 题解

⭐ 柠檬水找零 ------题解思路

java 复制代码
class Solution {
    public boolean lemonadeChange(int[] bills) {
        int[] moneyCount = new int[3];
        for(int i = 0 ; i < bills.length;i++){
            if(bills[i]==5){
                moneyCount[0]++;
            }else if (bills[i]==10){
                moneyCount[1]++;
                moneyCount[0]--;
            }else if(bills[i]==20){
                if(moneyCount[1] > 0){
                    moneyCount[1]--;
                    moneyCount[0]--;
                }else{
                    moneyCount[0]-=3;
                }
            }
            if(moneyCount[0]<0 || moneyCount[1]<0){
                return false;
            }
        }
        return true;
    }
}

题目2: 406. 根据身高重建队列


1- 思路

贪心思路

  • 1. 身高降序排:先根据身高进行降序排序,若身高相同,则 根据 前面有多少人升序排。
  • 2. 按照排序位置插入 :构建 LinkedList ,根据排序位置,即 p[1] 进行插入

2- 题解

⭐ 根据身高重建队列 ------题解思路

java 复制代码
class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(o1,o2)->{
            if(o1[0]==o2[0]) return o1[1]-o2[1];
            return o2[0]-o1[0];
        }
        );

        List<int[]> res = new LinkedList<>();
        for(int[] n:people){
            res.add(n[1],n);
        }

        return res.toArray(new int[res.size()][]);
    }
}

题目3: 用最少数量的箭引爆气球


1- 思路

贪心思路

  • 先对数组根据左边界进行排序
  • for 循环遍历数组
    • ① 不重叠情况
    • ② 重叠情况
      • 将当前区间的右边界赋值为 当前遍历二者中最小的那个

遍历区间:

  • 1. 当前左边界大于前一个元素的右边界 (区间不重叠)
    • 需要对结果 res 加加
  • 2. 重叠判断
    • 若重叠,更新当前区间的右边界,使得当前区间的右边界为当前两个区间的最小值

2- 题解

⭐ 用最少数量的箭引爆气球 ------题解思路

java 复制代码
class Solution {
    public int findMinArrowShots(int[][] points) {
        Arrays.sort(points,(o1,o2) -> Integer.compare(o1[0],o2[0]));
        int res = 1;
        for(int i = 1 ; i < points.length;i++){
            if(points[i-1][1] < points[i][0]){
                res++;
            }else{
                points[i][1] = Math.min(points[i-1][1],points[i][1]);
            }
        }
        return res;
    }
}

相关推荐
m0_547486661 小时前
《数据结构与算法》全套PPT课件2026(中国海洋大学)
数据结构·算法
旖旎夜光1 小时前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
怪奇云呼军2 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
乐观勇敢坚强的老彭3 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
高洁013 小时前
工信部教考中心证书
人工智能·深度学习·算法·机器学习·知识图谱
我变成萤火虫3 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
Dr.kangder3 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
Herbert_hwt4 小时前
【C语言基础】常量、选择结构与运算符全解析
c语言·开发语言·算法
Suxing94 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
LuminousCPP5 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表