LeetCode135. 分发糖果(贪心算法)

news/2024/12/23 9:32:58 标签: 贪心算法, 算法, leetcode, 分发糖果, 贪心

1 题目描述

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子评分更高的孩子会获得更多的糖果。

请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

2 算法设计

这道题目最好从一边开始考虑,如果两边同时考虑的话容易出错。
(1)先按照从左到右的顺序遍历数组ratings,确定右边评分大于左边的情况。
局部最优: 只要右边评分比左边评分高,右边就比左边多一个糖果。
全局最优: 相邻的孩子中,评分高的右孩子比左孩子获得更多的糖果。
(2)再按照从右到左的顺序遍历数组ratings,确定左边评分大于右边评分的情况。
局部最优: 只要左边评分比右边评分高,左边的孩子就比右边的孩子多一个糖果。
全局最优: 相邻的孩子中,评分高的左孩子比右孩子获得更多的糖果。

3 代码实现

 public static int candy(int[] ratings) {
        int[] candy = new int[ratings.length];
        Arrays.fill(candy,1); //所有的孩子至少有一个糖果
        //从左向右遍历,使得相邻孩子中,评分高的右孩子获得比左孩子更多的糖果
        for(int i=1;i< ratings.length;i++){
            candy[i] = ratings[i] > ratings[i-1] ? candy[i-1]+1:candy[i];
        }
        //从右向左遍历,确定左边大于右边的情况
        for (int j=ratings.length-2;j>=0;j--){
           if (ratings[j] > ratings[j+1]){
               if (candy[j] <= candy[j+1]){
                   candy[j] = candy[j+1]+1;
               }
           }
        }
        return  Arrays.stream(candy).sum();
    }

4 测试结果

在这里插入图片描述


http://www.niftyadmin.cn/n/11327.html

相关文章

使用kubeadm搭建高可用集群-k8s相关组件及1.16版本的安装部署

本文是向大家分享k8s相关组件及1.16版本的安装部署&#xff0c;它能够让大家初步了解k8s核心组件的原理及k8s的相关优势&#xff0c;有兴趣的同学可以部署安装下。 什么是kubernetes kubernetes是Google 开源的容器集群管理系统&#xff0c;是大规模容器应用编排系统&#xff…

ORB-SLAM3算法学习—Frame构造—基于SAD滑窗的双目特征匹配

文章目录0总述1双目匹配1.1为左目每个特征点建立带状区域搜索表&#xff0c;限定搜索区域。&#xff08;已提前极线校正&#xff09;1.2对左目相机每个特征点&#xff0c;通过描述子在右目带状搜索区域找到匹配点1.3通过SAD滑窗得到匹配修正量bestincR1.4 做抛物线拟合找谷底得…

Qt 利用UDP进行通信

一、UDP的特点 UDP&#xff08;用户数据报协议&#xff09;是一种简单轻量级、不可靠、面向数据报&#xff0c;无连接的传输层协议。而TCP/IP协议却是有连接的 二、UDP适合应用的几种情况 1、网络数据大多为短消息 2、拥有大量客户端 3、对数据安全性无特殊要求 4、网络负…

[附源码]计算机毕业设计JAVA某城市参军和退役军人信息管理系统

[附源码]计算机毕业设计JAVA某城市参军和退役军人信息管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff…

ArrayList,LinkedList和Vector的区别

他们三个都是属于java.util包中的List接口&#xff0c;均为可以伸缩的数组可以动态改变长度 ArrayList和Vector ArrayList和Vector都是基于Object[] array实现的&#xff0c;他们会在内存中开辟连续地址&#xff0c;由于地址连续他们支持用下标搜索数据&#xff0c;同时索引数…

C文件操作

第1关:使用FILE结构操作文本文件 任务描述 本关任务:编写函数,该函数从已有的当前目录下的文件a.txt中读取并解析出其中的数值,并将结果写到当前目录下的文件b.txt中。 相关知识 文件 文件是存储在某种长期储存设备(磁盘、光盘等)上的一段数据流。C 语言中把文件看成一…

Java岗位必备技能SpringBoot的面试题集锦

当下SpringBoot框架真的很火&#xff0c;大多数企业把它作为基础技能&#xff0c;考察求职者的能力。如下截图&#xff0c;是我从Boss直聘中找到的&#xff0c;要求SpringBoot是必备技能。 所以非常有必要为了面试&#xff0c;好好归纳下SpringBoot常被提起来的问题。 题目大纲…

std::c++ 中格式化任意字符串

//std::c 中没有Format 函数&#xff0c;但我们可以写一个&#xff0c;如下: #include <iostream> #include <stdarg.h> #include <vector> using namespace std; /// // 向一块内存区格式化一个字符串&#xff0c;到底应该char[256],char[512],char[1024]…