算法训练营day28--134. 加油站 +135. 分发糖果+860.柠檬水找零+406.根据身高重建队列

一、 134. 加油站

题目链接:https://leetcode.cn/problems/gas-station/
文章讲解:https://programmercarl.com/0134.%E5%8A%A0%E6%B2%B9%E7%AB%99.html
视频讲解:https://www.bilibili.com/video/BV1jA411r7WX

1.1 初见思路

  1. 得模拟分析出,先计算每个加油站的汽油数量和消耗汽油数量的差值,再进行后续的分析

1.2 具体实现

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int curSum = 0;
        int totalSum = 0;
        int index = 0;
        for (int i = 0; i < gas.length; i++) {
            curSum += gas[i] - cost[i];
            totalSum += gas[i] - cost[i];
            if (curSum < 0) {// 当前累加rest[i]和 curSum一旦小于0
                index = (i + 1) % gas.length ; // 起始位置更新为i+1
                curSum = 0; // curSum从0开始
            }
        }
        if (totalSum < 0) return -1; // 说明怎么走都不可能跑一圈了
        return index;
    }
}

1.3 重难点

  • 这个题目不太好模拟

二、 135. 分发糖果

题目链接:https://leetcode.cn/problems/candy/
文章讲解:https://programmercarl.com/0135.%E5%88%86%E5%8F%91%E7%B3%96%E6%9E%9C.html
视频讲解:https://www.bilibili.com/video/BV1ev4y1r7wN

2.1 初见思路

  1. 首先找到评分最低的孩子,从他们开始分一个糖果
  2. 再逐个向两边扩散

2.2 具体实现

class Solution {
/**
         分两个阶段
         1、起点下标1 从左往右,只要 右边 比 左边 大,右边的糖果=左边 + 1
         2、起点下标 ratings.length - 2 从右往左, 只要左边 比 右边 大,此时 左边的糖果应该 取本身的糖果数(符合比它左边大) 和 右边糖果数 + 1 二者的最大值,这样才符合 它比它左边的大,也比它右边大
    */
    public int candy(int[] ratings) {
        int length = ratings.length;
        int[] arr = new int[length];
        int result=0;
        Arrays.fill(arr,1);
        for(int j=0;j<length-1;j++){
            if(ratings[j+1]>ratings[j]){
                arr[j+1]=arr[j]+1;
            }
        }
        for(int j=length-2;j>=0;j--){
            if(ratings[j]>ratings[j+1]){
                arr[j]=Math.max(arr[j+1]+1,arr[j]);
            }
        }
        for(int i=0;i<length;i++){
            result+=arr[i];
        }
        //int result = Arryas.sum(arr);
        return result;
    }
}

2.3 重难点

  • 不能在考虑局部的时候想两边兼顾,这样会顾此失彼;
  • 采用了两次贪心的策略,一次是从左到右遍历,只比较右边孩子评分比左边大的情况、一次是从右到左遍历,只比较左边孩子评分比右边大的情况

三、 860.柠檬水找零

题目链接:https://leetcode.cn/problems/lemonade-change/
文章讲解:https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html
视频讲解:https://www.bilibili.com/video/BV12x4y1j7DD

3.1 初见思路

  1. 目的是找零,设置三个数来统计三种面额的钱的剩余数量
  2. 找零的优先顺序是先找面额大的,也就是10美元,没有10美元再找5美元的

3.2 具体实现

class Solution {
    public boolean lemonadeChange(int[] bills) {
        int fiveNum=0;
        int tenNum=0;
        for(int i=0;i<bills.length;i++){
            if(bills[i]==5){
                fiveNum++;
            }
            if(bills[i]==10){
                if(fiveNum==0){
                    return false;
                }
                fiveNum--;
                tenNum++;
            }
            if(bills[i]==20){
                if(tenNum>0 && fiveNum>0){
                    tenNum--;
                    fiveNum--;
                }
                else if(tenNum==0 && fiveNum>=3){
                    fiveNum-=3;
                }
                else{
                    return false;
                }
            }
        }
        return true;
    }
}

3.3 重难点

四、 406.根据身高重建队列

题目链接:https://leetcode.cn/problems/queue-reconstruction-by-height/
文章讲解:https://programmercarl.com/0406.%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97.html
视频讲解:https://www.bilibili.com/video/BV1EA411675Y

4.1 初见思路

  1. 需要考虑两个因素,身高和k,所以需要 控制变量,先按照身高排序

4.2 具体实现

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        // 身高从大到小排(身高相同k小的站前面)
        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];   //b - a 是降序排列,在a[0] != b[0],的状况会根据h值降序排列
        });

        LinkedList<int[]> que = new LinkedList<>();

        for (int[] p : people) {
            //按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点
            que.add(p[1],p);   //Linkedlist.add(index, value),会将value插入到指定index裡。
        }

        return que.toArray(new int[people.length][]);
    }
}

4.3 重难点

  • 为什么按照k为下标重新插入队列就可以了?
    因为按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。
  • 使用LinkedList的效率更高,因为这里频繁使用插入操作,LinkedList的底层是链表,所以插入操作的性能远高于ArrayList
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

php快速入门

前言 php是一门脚本语言&#xff0c;可以访问服务器&#xff0c;对数据库增删查改&#xff08;后台/后端语言&#xff09; 后台语言&#xff1a;php&#xff0c;java&#xff0c;c&#xff0c;c&#xff0c;python等等 注意&#xff1a;php是操作服务器&#xff0c;不能直接在…

教学神器大比拼:SmartEDA、Multisim、Proteus,谁是你的最佳选择?

随着科技的飞速发展&#xff0c;教学工具也在不断升级。在电子设计自动化&#xff08;EDA&#xff09;和电路仿真领域&#xff0c;SmartEDA、Multisim和Proteus三款软件备受关注。那么&#xff0c;对于广大教育工作者和学生们来说&#xff0c;这三者之间该如何选择呢&#xff1…

goaccess分析json格式日志

一.安装使用yum安装&#xff0c;yum install goaccess 二.主要介绍格式问题 1.nginx日志格式如下&#xff1a; log_format main escapejson {"time_local":"$time_local", "remote_addr":"$remote_addr", "r…

解决鸿蒙开发中克隆项目无法签名问题

文章目录 问题描述问题分析解决方案 问题描述 在一个风和日丽的早晨&#xff0c;这是我学习鸿蒙开发的第四天&#xff0c;把文档过了一遍的我准备看看别人的项目学习一下&#xff0c;于是就用git去clone了一个大佬的开源项目&#xff0c;在签名的时候遇到了问题&#xff1a; h…

docker 上传镜像到hub仓库

要将 Docker 镜像上传到 Docker Hub&#xff0c;你需要按照以下步骤操作&#xff1a; 登录 Docker Hub 首先&#xff0c;你需要登录到 Docker Hub。打开终端并运行以下命令&#xff1a;docker login系统会提示你输入 Docker Hub 的用户名和密码。 如果密码忘记可以token登录&a…

SAP S4 销售组的定义和分配

spro-企业结构-定义-销售与分销-维护销售组 新增一个记录 spro-企业结构-分配-销售与分销-给销售办公室分配销售组

[leetcode]kth-smallest-element-in-a-sorted-matrix 有序矩阵中第k小元素

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i n - 1;int j 0;int num 0;while (i > 0 && j < n) {if (matrix[i][j] < mid) {num i 1;j;…

OTA与OTA升级

目录 一、OTA简介 二、OTA升级 三、操作方式 一、OTA简介 在嵌入式领域当中&#xff0c;OTA&#xff08;Over-The-Air&#xff09;指的是通过无线通信技术对嵌入式设备的软件进行远程更新和管理。这种技术广泛应用于物联网设备、智能家电、汽车电子、智能手机等领域。通过OTA…

自定义json序列化和反序列化

一、LocalDateTime反序列化异常 首先我们定义一个java POJO实体类&#xff0c;其中关键的成员变量时birthDate,我们没有采用Date数据类型&#xff0c;而是采用了Java8 新的日期类型LocalDateTime,使用LocalDateTime的好处我就不多说了&#xff0c;有很多的文章解释说明。我们把…

图鸟UI框架在uni-app多端应用开发中的实践与应用

摘要&#xff1a; 随着移动互联网的蓬勃发展&#xff0c;跨平台应用开发已成为行业趋势。本文将探讨图鸟UI框架如何在uni-app开发环境下助力开发者高效构建多端应用&#xff0c;并通过具体案例展示其在实际项目中的应用效果。 一、引言 在移动应用开发领域&#xff0c;跨平台…

高职软件测试实训室

一、高职软件测试实训室建设背景 随着《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的深入实施&#xff0c;我国正在以不可阻挡的势头迈进数字化新时代。在这个波澜壮阔的时代背景下&#xff0c;软件作为数字经济的核心驱动力&#xff0c;其质量…

变量和常量(局部变量和全局变量)

常变的值叫变量&#xff0c;不变的值叫常量 变量分为局部变量和全局变量 在同一范围内&#xff0c;变量只能定义一次&#xff0c;否则就会报错 全部变量和局部变量是可以同时存在的&#xff0c;不过使用的时候是局部优先 变量如果你不给他初始化&#xff0c;那么他放得就是一…

【UML用户指南】-33-对体系结构建模-系统和模型

目录 1、系统和子系统 2、模型和视图 3、跟踪 4、常用建模技术 4.1、对系统的体系结构建模 4.2、对系统的系统建模 模型是对现实世界的简化——即对系统的抽象&#xff0c;建立模型的目的是为了更好地理解系统。 1、系统和子系统 一个系统可能被分解成一组子系统&#…

SAP ABAP ME21N 采购订单行项目屏幕增强

一、事务代码&#xff1a;SMOD 增强点&#xff1a;MM06E005 1.在CI_EKPODB 组建中添加自定义字段 2.事务码&#xff1a;SE11 进入CI_EKPODB 二、事务码&#xff1a;SE38 ZXM06TOP 定义结构 创建子屏幕 1.代码如下&#xff1a; TABLES:ci_ekpodb. DATA:EDIT_MODE TYPE cha…

Cocos如何跟iOS通信?

点击上方亿元程序员+关注和★星标 引言 Cocos如何跟iOS通信 大家好,相信小伙伴们通过阅读笔者前几期的文章**《你那么牛,怎么不教我打iOS包?安排!》,对Cocos如何打iOS**包有了一定的了解。 但是,除了把iOS包打出来,另外还有一个重要的就是要能够调用iOS提供的OC方法以…

2024数据挖掘实战

1、项目案例描述 沃尔玛全年都会举办几次促销减价活动。这些减价活动都是在重要节假日之前进行的&#xff0c;其中最大的四个节假日是超级碗、劳动节、感恩节和圣诞节。包括这些节假日在内的几周在评估中的权重是非节假日周的五倍。在缺乏完整/理想历史数据的情况下&#xff0…

《低碳世界》知网收录吗?如何投稿?

《低碳世界》知网收录吗&#xff1f;如何投稿&#xff1f; 《低碳世界》第一批学术期刊&#xff0c;月刊&#xff0c;知网、万方、维普、超星收录&#xff0c;要求&#xff1a;三版约5300字符 《低碳世界》是中国学术期刊&#xff08;光盘版&#xff09;全文收录期刊&#xf…

《A++ 敏捷开发》- 10 二八原则

团队成员协作&#xff0c;利用项目数据&#xff0c;分析根本原因&#xff0c;制定纠正措施&#xff0c;并立马尝试&#xff0c;判断是否有效&#xff0c;是改善的“基本功”。10-12章会探索里面的注意事项&#xff0c;13章会看两家公司的实施情况和常见问题。 如果已经获得高层…

CSS技巧专栏:一日一例 3.纯CSS实现炫酷多彩按钮特效

大家好,今天是 CSS技巧专栏:一日一例 第三篇《纯CSS实现炫酷多彩按钮特效》 先看图: 开工前的准备工作 正如昨日所讲,为了案例的表现,也处于书写的习惯,在今天的案例开工前,先把昨天的准备工作重做一遍。 清除浏览器的默认样式定义页面基本颜色设定body的样式清除butt…

AI普及时代即将来临,我们如何提升自我竞争力?

自ChatGPT发布以来&#xff0c;形形色色的AI工具形同雨后春笋&#xff0c;令人眼花缭乱&#xff0c;不知所措。 许多听说过AI的人&#xff0c;或者使用过AI工具&#xff0c;如 文心一言&#xff0c;通义千问&#xff0c;ChatGPT等等也只会提一些简单的问题。那么&#xff0c;面…