分配糖果问题——Leetcode系列(十五)

信息学奥赛一本通|——2069:【例2.12 】糖果游戏 2069:【例2.12 】糖果游戏 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 5774 通过数: 2909 【题目描述】 某幼儿园里,有5个小朋友编号为1、2、3、4、5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别 阅读详情

Candy

 

There are N children standing in a line. Each child is assigned a rating value.

You are giving candies to these children subjected to the following requirements:

  • Each child must have at least one candy.
  • Children with a higher rating get more candies than their neighbors.

What is the minimum candies you must give?


Analysis:

For one child(in the middle of three children), there are four situations of relations with his neighbors.  

  1. lower, higher, highest. 
  2. lower, higher, lower
  3. higher,lower,higher
  4. highest,higher,lower
      First, We iterate from the head to the tail, after doing this, we can calculate the candies for children who are in situation 1 and 3.
      Then, We iterate from the tail to the head, after doing this, we deal with situation 2 and 4.
      Besides, if neighbors's rating are the same, there is no need to ensure their candies are the same.

Solution:

public class Solution {
    public int candy(int[] ratings) {
        int length = ratings.length;
        if(length == 0){
            return 0;
        }else if(length == 1){
            return 1;
        }else if(length == 2){
            if(ratings[0] == ratings[1]){
                return 2;
            }else{
                return 3;
            }
        }
        int[] numbers = new int[length];
        for(int i = 0; i < length; i++){
            numbers[i] = -10000;
        }
        if(ratings[0] <= ratings[1]){
            numbers[0] = 1;
        }
        for(int i = 1; i < length - 1; i++){
            if(ratings[i] < ratings[i -1] && ratings[i] <= ratings[i + 1]){
                numbers[i] = 1;
            }else if(ratings[i] > ratings[i - 1] && ratings[i] <= ratings[i + 1]){
                numbers[i] = numbers[i -1] + 1;
            }else if(ratings[i] == ratings[i - 1] && ratings[i] <= ratings[i + 1]){
                numbers[i] = 1;
            }
        }
        if(ratings[length - 1] <= ratings[length - 2]){
            numbers[length - 1] = 1;
        }else{
            numbers[length - 1] = numbers[length -2] + 1;
        }
        for(int i = length - 2; i > 0; i--){
            if(ratings[i] > ratings[i + 1] && ratings[i] > ratings[i - 1]){
                if(numbers[i - 1] > numbers[i + 1]){
                    numbers[i] = numbers[i - 1] + 1;
                }else{
                    numbers[i] = numbers[i + 1] + 1;
                }
            }else if(ratings[i] > ratings[i + 1] && ratings[i] <= ratings[i - 1]){
                numbers[i] = numbers[i + 1] + 1;
            }else if(ratings[i] == ratings[i + 1] && ratings[i] <= ratings[i - 1]){
                numbers[i] = 1;
            }
        }
        if(ratings[0] > ratings[1]){
            numbers[0] = numbers[1] + 1;
        }
        int total = 0;
        for(int i = 0; i < length; i++){
            total += numbers[i];
        }
        return total;
    }
}

文章来源:https://oj.leetcode.com/problems/candy/




C++解决糖果分配问题(贪心) 使用贪心策略解决分发糖果问题。 阅读详情

相关推荐

Shopee 虾皮API接口:商品详情采集的实践

随着电商行业的蓬勃发展,数据采集和分析在商业决策中扮演着越来越重要的角色。Shopee作为东南亚领先的电商平台,拥有大量的商品数据。通过Shopee的API接口,我们可以方便地获取商品详情,为数据分析和市场研究提供有力支持。本文将介绍如何使用Shopee API接口采集商品详情,并分享一些实践技巧。提供了丰富的数据接口,包括商品详情、店铺信息、订单数据等。通过API接口,开发者可以轻松地获取Shopee平台上的数据,进行进一步的处理和分析。Shopee API接口:商品详情采集的实践与技巧。

An4480的博客 1886

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

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目。

weixin_43553142的博客 1065

SLUB DEBUG 检测slab 内存泄漏

文章介绍如何定位linux 内核中slab 内存泄漏。

一叶知秋的博客 1491

leetcode-135-分发糖果

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢? 示例 1: 输入: [1,0,2] 输出: 5 解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。 示例 2: 输入: [1,2,2] 输出: 4 解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。 第三个

shadowgully的博客 576

基于GPU的GEMM矩阵相乘运算优化

从上图中我们可以看到三种处理方法。第一种是将A和B矩阵分块,第二种方法是将C和B矩阵分块,第三种方法是将C和A矩阵分块。GEMM的子任务是GEPP或GEMP;最小粒度的任务是GEBP或GEPB或点乘。

weixin_55035144的博客 2155

ClearML中文文档实战:从安装到第一个实验的保姆级教程

本文提供ClearML从零开始的实战指南,涵盖核心组件理解、Python SDK安装、服务器配置及首个自动化实验的完整流程。通过改造PyTorch训练脚本的实例,详细演示了如何利用ClearML自动记录实验参数、指标与模型,实现机器学习实验的可复现性与高效管理,并简要介绍了进阶的自动化工作流。

weixin_29216049的博客 398

每日leetcode--分发糖果

每日leetcode--分发糖果

li_peixiansang的博客 955

如何理解S参数的三大特性

提到S参数的时候经常会涉及一些概念,如无源性、因果性、互易性等,本文逐一介绍这些特性的概念、成因以及判断方式。

一只豌豆象的博客 4497

力扣经典150题第十五题:分发糖果

本文介绍了如何使用两次遍历数组来解决分发糖果的问题,保证相邻孩子评分高的孩子获得更多糖果。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

如何做好软件需求分析?

软件需求分析也称为系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。软件开发一般包括:可行性分析、需求分析、软件设计、软件开发、软件测试、软件实施、软件服务等步骤,需求分时软件开发的第一步骤。用户需求分析是指在系统设计之前和设计、开发过程中对用户需求所作的调查与分析,是系统设计、系统完善和系统维护的依据。

qq_41854911的博客 1415

beegfs读取文件完整流程分析

读取小于512KB文件数据,小于1s 读取15MB文件数据,花费7秒。

wfzy的博客 835

代码随想录算法训练营第二十五天 | LeetCode134.加油站、LeetCode135.分发糖果、LeetCode860.柠檬水找零、LeetCode406.根据身高重建队列

我的贪心策略是当前给的糖果数从1开始递增,如果下一个孩子评分等于或者低于上一个孩子评分,则给的数目减一(减一就变成0了的话,前面每个孩子都多拿一个糖果),如果下一个孩子评分等于或者低于上一个孩子评分,则给的数目加一。:用例ratings = [1,3,2,2,1],我的策略当遇到2的时候是 3,4,3,2,1,明显不合理,1,2,1,2,1。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。

zhuabazhuabahuo的博客 782

机器学习实战7-基于机器学习算法预测相亲成功率

大家好,我是微学AI,今天给大家介绍一下机器学习实战7-基于机器学习算法预测相亲成功率,随着社会的发展,大家都忙于事业,对自己的终身大事就耽搁了,相亲是一种传统的寻找伴侣的方式,随着时代的发展,相亲的方式也在不断地改变。在这个过程中,了解相亲双方的信息以及预测相亲是否成功变得越来越重要。本文将介绍如何使用随机森林算法对相亲成功进行预测,通过分析男女双方的房子、车子、长相、家庭条件、父母情况、生活习惯、学历、性格、兴趣等因素,来预测相亲是否成功。

微学AI的博客 3033

力扣面试经典150题(第十五题)

n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。1请你给每个孩子分发糖果,计算并返回需要准备的。5你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。4你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

adabobo123的博客 562

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

代码随想录算法训练营二十五天|贪心part03

134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列

欢迎光临花开富贵的博客 1478

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

代码随想录算法训练营第三十五天| 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

题目链接:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/文章链接:https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.html。

qq_44388663的博客 1105

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

leetcode解题思路分析(一百六十五)1431 - 1437 题

【代码】leetcode解题思路分析(一百六十五)1431 - 1437 题。

ty的博客 1056

代码随想录算法训练营第三十五天| 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

贪心,昨天没有打卡,因为去看牙了😔

qq_52149213的博客 1144

代码随想录训练营第三十五期|第33天|贪心算法 part03|1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

一直没弄清楚错哪里,最后求和是要用tmp里的数字。

2301_78266314的博客 383

算法训练营第二十五天 | 贪心算法(三)

原文链接: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://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html。这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,

Nayut_的博客 125

python练习(十五)

题目 思路与解答 答案 题目 思路与解答 答案 题目 思路与解答 答案 题目 思路与解答 答案 题目 思路与解答 答案 注意,答案只是代表是他人写的代码,正确,但不一定能通过测试(比如超时),列举出来只是它们拥有着独到之处,虽然大部分确实比我的好 # 题目 思路与解答 答案 # 题目 思路与解答 答案 # 题目 思路与解答 答

Misaka_S的博客 1066

代码随想录算法训练营第三十五天| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果、860. 柠檬水找零、406. 根据身高重建队列

给你一个整数数组nums和一个整数kinums[i]-nums[i]重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数组。5选择下标 1 ,nums 变为 [4,-2,3]。6选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2]。13选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4]。

974

【LeetCode】-贪心算法

文章目录前言一、组合二、摆动序列 前言 初识LeetCode与算法,将在此系列文章里面,记录自己的算法学习经历,前期主要是监督自己学习打卡,后期我会将自己对知识的理解,慢慢补充到文章当中,希望大家能在阅读我的文章中,有所收获。该系列文章的刷题顺序以代码随想录为线索。 一、组合 题目: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j

银尘博客 6193

代码随想录算法训练营第三十五天|1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

踩坑:没有思路:数组里有正有负,肯定先对负数进行取反,且从小开始。如果所有负数都为正后还可以取反,则如果此时次数为奇数,将最小整数取反,如果为偶数,可以直接求和。

滋滋牛排味的博客 402

100-200 Leetcode 题目总结(下)

8.Breadth - first depth 50)第一百九十九题 Binary Tree Side View 类似层序遍历一百零二题,返回最右边的值 52)第一百零二题 Binary Tree Level Order Traversal level 表示层数 53)第一百零三题 Binary Tree Zigzag Level Order Traversal 不能left righ...

maryhaocoolcool的博客 285

京东技术通用岗位笔试攻略:考点拆解与答题策略

在线技术笔试是校招中常见的初筛环节,其核心在于考察候选人对数据结构、算法、操作系统、计算机网络、数据库等计算机基础知识的掌握程度,以及运用这些知识解决实际问题的工程能力。技术笔试不仅评估单一知识点的记忆,更侧重检验候选人的逻辑思维、边界处理意识和代码实践素养。这一筛选机制在互联网公司技术类岗位招聘中被广泛采用,尤其在春招、秋招等集中招聘季节,成为求职者必须跨越的门槛。针对京东技术通用岗位的笔试特点,梳理了从岗位画像、题型结构到高频考点、时间分配的全流程准备思路,并总结了笔试中容易忽略的细节与常踩的坑,帮助求

weixin_32899685的博客 236
上一篇: 查找数组中只出现一次的数(一)——Leetcode系列(十四)
下一篇: Gas Station——Leetcode系列(十六)
Hooting
博客等级 码龄17年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值