代码随想录第35天|860.柠檬水找零 , 406.根据身高重建队列(很多细节点注意一下),452. 用最少数量的箭引爆气球

news2024/10/7 2:31:24

860.柠檬水找零 

 思路比较简单

class Solution {
    public boolean lemonadeChange(int[] bills) {
        //然后向你付 5 美元、10 美元或 20 美元
        //如果收到5,直接收下
        //如果收到10,需要付回去5
        //如果收到20,需要付回去10+5或者5+5+5
        //开始时我手上拥有的钱的数量
        int five=0;
        int ten=0;
        int twen=0;
        for(int bill:bills){
            if(bill==5){
                five++;
                
            }
            if(bill==10){
                five--;
                ten++;
            }
            if(bill==20){
                if(ten>0&&five>0){
                    ten--;
                    five--;
                    twen++;
                }
                else if(five>=3){
                    five-=3;
                    twen++;//没有必要加上这句了,因为不会用twen来找零
                }
                else return false;

            }

        }
        return five>=0&&ten>=0;

    }
}

 406.根据身高重建队列(很多细节点注意一下)

出现两个维度一起考虑的情况

其技巧都是确定一边然后贪心另一边,两边一起考虑,就会顾此失彼

如果身高相同,按照k值进行升序;如果身高不同,按照身高进行降序

代码实现

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        //和分发糖果类似,不要两头兼顾,处理好一边再处理另一边。 
        //先按照身高排序,如果身高相同再按ki升序
        Arrays.sort(people,(a,b)->{
            if(a[0]==b[0]) return a[1]-b[1];//a-b是升序排列,故在a[0]==b[0]的状况下,会根据k值升序排列
            return b[0]-a[0];//在a[0]!=b[0]的状况下,降序排列
        });
        //以示例为例子,经过sort后会是:
       // [7,0],[7,1],[6,1],[5,0],[5,2],[4,4]
        LinkedList<int[]> que=new LinkedList<>();
        for(int[] p:people){
            que.add(p[1],p);//LinkedList.add(index,value)会将value插入指定index里
        }
        return que.toArray(new int[people.length][]);

    }
}

对使用某一种语言容器的使用,特性的选择都会不同程度上影响效率

所以很多人都说写算法题用什么语言都可以,主要体现在算法思维上,其实我是同意的但也不同意。

学到的知识点:

1.Arrays.sort()方法底层使用了三种排序方式:

  • 当数据量在 [0 - 47) 时,采用插入排序;
  • 当数据量在 [47, 286) 时,采用双轴快速排序;
  • 当数据量大于等于 286 时,采用归并排序。

2.在Java中,二维数组可以只定义第一维的长度,而第二维的长度可以不指定。在这种情况下,第二个维度的长度将默认为0。

3.在Java中,LinkedList的add(index, value)方法将value插入到指定index位置时,如果该位置已经有元素存在,则新元素的value会覆盖原有元素的value。

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

首先根绝xstart进行升序排序因为我们要让气球尽可能重复

如果两个气球有重复部分,则重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭,这个时候要更新一下这一组被比较气球的右边界,如下图要过呢更新气球2的右边界为6,防止气球2和气球3又需要新增一只弓箭。

如果没有重复部分,则需要一只弓箭

可以看出首先第一组重叠气球,一定是需要一个箭,气球3,的左边界大于了 第一组重叠气球的最小右边界,所以再需要一支箭来射气球3了。

开始的代码

class Solution {
    public int findMinArrowShots(int[][] points) {
        //按xstart升序排序
    
       Arrays.sort(points,(a,b)->{
            return a[0]-b[0];
         });
        int count=0;
        for(int i=0;i<points.length-1;i++){
            if(points[i][1]<points[i+1][0]){//说明两个气球没有重复部分,需要一只箭
            count++;

            }
            else{//说明两个气球有重复部分,更新是为了防止把气球i+1重复计数,如果不更新还有一个思路就是把射掉了的气球移出数组,但是会更麻烦一点
               points[i+1][1]=Math.min(points[i][1],points[i+1][1]);

            }
        }
        return count+1;

    }
}

溢出问题

由于Integer类型的最大值为2^31-1,因此使用Integer.compare()方法进行比较不会发生溢出。 

修改后的代码

class Solution {
    public int findMinArrowShots(int[][] points) {
        //按xstart升序排序
      //  int num=0;
        // 使用Integer内置比较方法,不会溢出
        Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
        int count=1;// points 不为空至少需要一支箭
        for(int i=0;i<points.length-1;i++){
            if(points[i][1]<points[i+1][0]){//说明两个气球没有重复部分,需要一只箭
            count++;

            }
            else{//说明两个气球有重复部分,更新是为了防止把气球i+1重复计数
               points[i+1][1]=Math.min(points[i][1],points[i+1][1]);

            }
        }
        return count;

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/963489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基础-----第八篇

系列文章目录 文章目录 系列文章目录一、Java类加载器二、双亲委托模型 一、Java类加载器 JDK自带有三个类加载器&#xff1a;bootstrap ClassLoader、ExtClassLoader、AppClassLoader。 BootStrapClassLoader是ExtClassLoader的父类加载器&#xff0c;默认负责加载%JAVA_HOME…

Ops实践 | 国产化KylinOS系统中快速部署企业内部高性能DNS服务器、时间同步服务器 (精选)...

各位看友&#xff0c;由于微信公众号推送机制改变&#xff0c;现在需要设置为星标才能收到的本公众号推送消息哟。关注回复【学习交流群】加入【安全开发运维】答疑交流群 请朋友们【多多点击文中的广告】&#xff0c;支持作者更新更多文章。 目录: 本文为作者原创文章&#xf…

c++数据结构之 队列

c数据结构 --- 队列 队列的特点队列的相关概念&#xff1a;队列的操作&#xff1a;队列的分类&#xff1a;演示例子简单的例子例子2、循环队列的C实现 队列的特点 队列&#xff08;Queue&#xff09;与栈一样&#xff0c;是一种线性存储结构&#xff0c;它具有如下特点&#x…

学习振弦采集模块的开发基本原理

飞讯教学篇&#xff1a;学习振弦采集模块的开发基本原理 振弦采集模块是一种用于测量物体振动、形变、压力等物理量的电子设备。它通过测量物体的振动变化&#xff0c;可以得出物体在不同条件下的动态特性&#xff0c;对于工程设计、科学研究、医学检测等领域都有广泛应用。本…

代码随想录笔记--二叉树篇

1--递归遍历 1-1--前序遍历 前序遍历&#xff1a;根→左→右&#xff1b; #include <iostream> #include <vector>struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), le…

6400万美元:苹果与SpaceX达成合作协议,推进苹果 SOS 卫星服务

根据最新披露的文件&#xff0c;苹果卫星服务提供商Globalstar近期与马斯克旗下的SpaceX达成一项重要合作协议&#xff0c;向SpaceX支付了6400万美元&#xff0c;用于在2023-2025年期间发射卫星&#xff0c;以进一步扩展苹果iPhone系列的SOS卫星服务。 这项卫星服务的主要目的是…

Citespace、vosviewer、R语言的文献计量学 、SCI

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

中国太保首席数据库专家林春:先难后易,核心系统数据库升级复盘

P17 是中国太平洋保险&#xff08;以下简称太保&#xff09;关联关系最为复杂、商业数据库绑定程度最深、业务影响最多的核心系统之一。但就是这样一个对太保业务至关重要的系统却被选为数据库升级的“实验品”。当然&#xff0c;说是“实验品”只是因为这是太保第一次对关键的…

怎样来实现流量削峰方案

削峰从本质上来说就是更多地延缓用户请求&#xff0c;以及层层过滤用户的访问需求&#xff0c;遵从“最后落地到数据库的请求数要尽量少”的原则。 1.消息队列解决削峰 要对流量进行削峰&#xff0c;最容易想到的解决方案就是用消息队列来缓冲瞬时流量&#xff0c;把同步的直…

ArcGIS地块面积分割调整工具插件

地块分割调整工具可以实现将选定的图斑按照面积比例或者指定的面积&#xff0c;分割成多个图斑。 各个图斑的面积用逗号分隔&#xff0c;比例分割设置时&#xff0c;用整数表示。 面积分割时&#xff0c;最后一个图斑的面积可以不写&#xff0c;插件可以自动计算图斑的面积&a…

1448. 统计二叉树中好节点的数目(javascript)1448. Count Good Nodes in Binary Tree

给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 解释…

unity面试题(性能优化篇)

CPU 预处理、缓存数据 注释空的unity函数 运算cpu->gpu 减少昂贵计算(开方) 限制帧数 加载(预加载、分帧加载、异步加载、对象池) 慎用可空类型比较 避免频繁计算(分帧、隔帧) 算法优化 变体收集预热 使用clear操作代替容器的new操作 unity spine使用二进制格式…

mac有些软件卸载不了怎么办?正确的Mac软件卸载方法

很多用户Mac用户在整理磁盘空间时发现有很多不常用的软件想要卸载&#xff0c;一顿卸载操作之后发现有些第三方软件是无法完成卸载或成功卸载之后桌面仍保留该软件的图标&#xff0c;在使用Mac过程中遇到有些软件卸载不了怎么办&#xff1f;别着急&#xff0c;小编这就给你支招…

基于指数分布算法优化的BP神经网络(预测应用) - 附代码

基于指数分布算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于指数分布算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.指数分布优化BP神经网络2.1 BP神经网络参数设置2.2 指数分布算法应用 4.测试结果&#xff1a;5…

2023年淘宝商家成长层级与利好规则

淘宝店铺成长层级越高&#xff0c;对店铺的经营会越好&#xff0c;但有些小伙伴对成长层级和商家利好规则内容的更新变化不太清楚&#xff0c;下面我们就来一起了解一下吧。 一、店铺成长层级 1、入口&#xff1a;店铺层级与权益 2、晋升路径 V1-V2&#xff1a;基础运营&#…

flutter plugins插件【二】【FlutterAssetsGenerator】

2、FlutterAssetsGenerator 介绍地址&#xff1a;https://juejin.cn/post/6898542896274735117 配置assets目录 ​ 插件会从pubspec.yaml文件下读取assets目录&#xff0c;因此要使用本插件&#xff0c;你需要在pubspec.yaml下配置资源目录 flutter:# The following line ens…

A. Increasing and Decreasing

题目&#xff1a;样例&#xff1a; 输入 3 1 4 3 1 3 3 100 200 4输出 1 3 4 -1 100 150 180 200 思路&#xff1a; 思维题&#xff0c;这里我们看一下规律&#xff0c;我们已知a(1)&#xff0c;a(n) &#xff0c;又因为 数列b 应该是递减的&#xff0c;而观察规律可知 &#x…

【云计算•云原生】5.云原生之初识DevOps

文章目录 1.DevOps背景2.DevOps概念3.DevOps工具链 1.DevOps背景 软件开发必须包含两个团队&#xff1a;开发团队和运维团队 开发团队负责开发项目&#xff0c;系统迭代更新运维团队负责项目测试以及部署上线&#xff0c;维持系统稳定运行 一个软件周期中是由这两个团队相互…

【python】—— 函数详解

前言&#xff1a; 本期&#xff0c;我们将要讲解的是有关python中函数的相关知识&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;函数是什么 &#xff08;二&#xff09;语法格式 &#xff08;三&#xff09;函数参数 &#xff08;四&#xff09;函…

Python项目编译与部署(1):模块与包的概念与关系

当实际构建1个 Python 项目时&#xff0c;模块与包是我们面临的基础概念。 1、模块、包的概念 Python中的模块(Module), 就是一个单独的.py文件&#xff0c;其中包含变量定义&#xff0c;函数定义、类定义、以及其它可执行语句。模块是一个独立的代码单元&#xff0c;可以用解…