博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小白学习[leetcode]之135分发糖果 (贪心算法)
阅读量:3897 次
发布时间:2019-05-23

本文共 993 字,大约阅读时间需要 3 分钟。

题目的链接在这里:

目录


题目大意

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

你需要按照以下要求,帮助老师给这些孩子分发糖果:

每个孩子至少分配到 1 个糖果。

相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?


一、示意图

在这里插入图片描述

二、解题思路

java实现(贪心算法)

代码如下:

class Solution {
public int candy(int[] ratings) {
//这里的贪心策略是 只看最近的,也就是只考虑并更新相邻一侧的大小关系 //这种贪心肯定是要找到对应的最小值,如果是找到最小的一个的话,首先是需要有一个方法能在不动 //数组的情况下,找到最小值,感觉这样就很浪费时间了,而且这题正常来说是一个不重复的数组吧 //就刚刚看了一个想到的,因为这个值有个条件是 每个孩子至少有一个,所以他们的起始点都是1个 //然后经过两次变量,首先从左往右,如果左边的比右边大的话,就把右边的那个值,思路出现了错误 //不能单单把res作为总数,还是需要用来设置为每个数组里的值 int res[]=new int[ratings.length]; int count=0; //先初始化全为1 for(int i=0;i
ratings[i]){
res[i+1]=(res[i]+1); } } //再从右往左,也就是比右边的,但这是在前面的先决条件执行,所以需要再由一个条件就是,当前的糖果数小于比他小的数 for(int j=ratings.length-1;j>0;j--){
if(ratings[j-1]>ratings[j]&&res[j-1]<=res[j]){
res[j-1]=(res[j]+1); } } //再统计最后的结果 for(int i=0;i

在这里插入图片描述

转载地址:http://bifen.baihongyu.com/

你可能感兴趣的文章
Linux软件下载源码编程文章资料周立发--之调试
查看>>
GIT分支管理是一门艺术
查看>>
Cscope在emacs中的配置与使用
查看>>
emacs 2.4安装问题 ecb
查看>>
ecb里使用自定义快捷键切换窗口
查看>>
vim(gvim)支持对齐线
查看>>
CentOS编译安装Lighttpd1.4.28
查看>>
实践HTTP206状态:部分内容和范围请求
查看>>
【C++基础】拷贝构造函数的参数必须是引用类型
查看>>
【C++基础】virtual析构函数
查看>>
【Java基础】面向对象
查看>>
【Java.Web】web.xml详解
查看>>
J2EE的技术体系
查看>>
【Java.Web】Java Web应用程序的规范目录结构,*WEB组件的URL/入口*
查看>>
【基础篇】计算机网络
查看>>
OSI 7层详解
查看>>
【C++基础】重载overload、重写(覆盖)override、隐藏hide的区别
查看>>
【算法详解】洗牌算法
查看>>
【设计模式基础】行为模式 - 1 - 观察者(Observer)
查看>>
从关系型数据库到非关系型数据库
查看>>