当前位置: 首页 > news >正文

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

文章目录

      • 860.柠檬水找零
      • 406.根据身高重建队列
      • 452. 用最少数量的箭引爆气球:star:

860.柠檬水找零

  • 链接:代码随想录

5美元相当滴珍贵

  • 解题思路:
    情况一:账单是5,直接收下。
    情况二:账单是10,消耗一个5,增加一个10
    情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5
    所以对于前两种情况消耗都是固定的,贪心贪在第三步
public boolean lemonadeChange(int[] bills) {int five = 0,ten = 0,twenty = 0;for(int bill : bills){//情况一if(bill == 5){five++;}//情况二if(bill == 10){if(five <= 0){return false;}five--;ten++;}//情况三if(bill == 20){//贪心:优先花10元if(ten > 0 && five > 0){ten--;five--;twenty++;}else if(five >= 3){five-=3;twenty++;}else{return false;}}}return true;
}

406.根据身高重建队列

  • 链接:代码随想录

  • 解题思路:
    两个维度:1. 身高;2.前面有几个人比自己大于等于高
    ①如果按照k来从小到大排序,排完之后,会发现k的排列并不符合条件,身高也不符合条件,两个维度哪一个都没确定下来。
    因为如果按照k排序完之后,还需要修改k的值,就是k和h都没确定下来
    ②那么按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。
    只要身高确定下来之后,后边的元素随便向前边插入,都不会影响前面的k的排序,即确定了身高之后,在移动也不会改变k,只是调整符合k

  • 图像理解

2023-04-18T17_30_43

按身高来做
2023-04-18T17_32_42

public int[][] reconstructQueue(int[][] people) {//λ表达式,传入的是数组// Comparator<Integer[]> comparator = (a,b) -> {//     if(a[0] == b[0]){//         return a[1] - b[1];//     }//     return b[0] - a[0];// };//根据身高排好序,身高高的在前面//大于0就交换Arrays.sort(people,(a, b) -> {if (a[0] == b[0]) return a[1] - b[1];//相等,k按从小到大拍return b[0] - a[0];//身高按从大到小拍});//调整位置LinkedList<int[]> que = new LinkedList<>();for (int[] p : people) {que.add(p[1],p);//按位置加入}return que.toArray(new int[people.length][]);}

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

  • 题目链接:代码随想录

重叠问题

  • 解题思路:
    贪心:局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。
    ①先对数组进行排序,初始值置为1,因为最少有一次射箭
    ②判断边界是否重叠,如果重叠的话,那么跳过这次射箭,并且更新重叠的最小右边界,便于下一次判重叠区域
    如果没有重叠的话,那么直接射箭次数加+1

  • 图像理解:

    2023-04-18T19_02_112023-04-18T19_02_11

public int findMinArrowShots(int[][] points) {//从小到大排序Arrays.sort(points, (a, b) -> {return Integer.compare(a[0], b[0]);});int count = 1;//射箭的话直射一箭for (int i = 1; i < points.length; i++) {if(points[i][0] > points[i - 1][1]){count++;}else{//气球i和i-1是相邻的情况,更新最小重叠有边界points[i][1] = Math.min(points[i][1], points[i - 1][1]);//更新重叠气球的最小边界}}return count;
}
http://www.lryc.cn/news/61422.html

相关文章:

  • 爬虫为什么需要多线程
  • 下一代智能座舱风口下,“超级”Tier 1强势崛起
  • 第 三 章 UML 类图
  • java版工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单
  • 内网穿透实现在外远程连接RabbitMQ服务
  • 抖音数字人主播app
  • 亚马逊平台使用API接口通过关键字搜索商品
  • 《花雕学AI》用ChatGPT创造猫娘角色:人工智能角色扮演聊天对话的风险与对策
  • 软件测试常规测试过程模型——V模型与X模型
  • feign-starter
  • FVM初启,Filecoin生态爆发着力点在哪?
  • 对比度亮度调整与通道分离合并
  • Java终止线程
  • Qt的Qss用法
  • 数塔dp -A
  • Spring MVC 接收 json 和返回 json (14)
  • 注释和关键字
  • 第一次参加CSDN周赛,这体验很难说···
  • 8.DRF组件之认证、权限
  • 初识Tkinter弹窗
  • 设计模式之责任链模式(C++)
  • 音游判定原理详解——从触摸屏幕到判定音符【Project SEKAI攻略】
  • 【论文阅读】Self-Paced Boost Learning for Classification
  • 通过CSIG—走进合合信息探讨生成式AI及文档图像处理的前景和价值
  • 流程图拖拽视觉编程--概述
  • 深度学习中的卷积神经网络
  • vue3的介绍和两种创建方式(cli和vite)
  • camunda工作流user task如何使用
  • 三元运算符
  • Vue3 Element-plus el-menu无限级菜单组件封装