当前位置: 首页 > news >正文

力扣135-分发糖果(java详细题解)

题目链接:135. 分发糖果 - 力扣(LeetCode)

前情提要:

因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。

贪心方法:局部最优推出全局最优。

如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。

题目思路:

本题主要就是难在,有俩个维度,当前的孩子不仅要跟左边比,还要跟右边比。

可能我们一开始就想遍历孩子,让当前孩子先跟左边比,然后再跟右边比。

其实这样同时比的话,肯定会顾此失彼。要么左边比右边大,但是糖果数量没有增加,不论怎样都有点问题。

所以对于这样有俩个维度上的问题,我们应该先统一处理好一个维度,再去处理另一个维度。

那本题该怎么处理呢?

所以本题 我们首先让当前孩子与左孩子对比 如果当前孩子比左孩子评分高 则糖果加一。

此时局部最优:只要当前孩子评分比左边大,当前的孩子就多一个糖果,

全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果。

然后我们再让当前孩子与右孩子比较 如果当前孩子比右孩子大 则糖果加一。

具体代码有不少细节,我们放在代码中讲。

最终代码:

class Solution {public int candy(int[] ratings) {//定义一个糖果数量的数组int [] candySum = new int [ratings.length];Arrays.fill(candySum,1);//首先让当前孩子与左孩子对比 如果比左孩子的评分高,那么就比左孩子多一个糖果for(int i = 1;i < ratings.length;i ++){if(ratings[i] > ratings[i - 1]){candySum[i] = candySum[i - 1] + 1;}}//然后让当前孩子与右孩子对比//注意这里是倒序的 为什么是倒序呢 因为当前孩子与右孩子作对比时 是先需要我右孩子的结果//因为一旦我当前孩子比右孩子大一 我是要在我右孩子的基础上加1嘛 所以这里是从后往前遍历for(int i = ratings.length - 2;i >= 0;i --){if(ratings[i] > ratings[i + 1]){//这里为什么取最大值 //第一种情况 当前孩子只比右大 没有比左大 那么当前孩子的糖果就是取右边孩子糖果加1//第二种情况 当前孩子比左右都大 那么此时就要取最大值 来保证当前孩子的糖果是最多的//那么又要贪心了,局部最优:取candyVec[i + 1] + 1 和 candyVec[i] 最大的糖果数量,保证第i个小孩的糖果数量既大于左边的也大于右边                   的。全局最优:相邻的孩子中,评分高的孩子获得更多的糖果。candySum[i] = Math.max(candySum[i + 1] + 1,candySum[i]);}}int result = 0;//最终遍历一遍糖果数量数组 求和for(int i = 0;i < candySum.length;i ++){result += candySum[i];}return result;}
}

贪心的题目就是这样巧妙,如果第一次做很难想到这样的思路,所以我们要多做多练。

好啦。这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《黑神话:悟空》:30%抽成真相
  • 使用ffmpeg+node-media-server实现从rtsp服务器拉流再推送至rtmp服务器,实现http+flv进行web播放
  • 线性查找表的应用:用户登录注册程序
  • 分页查询--条件查询
  • 可以根据手机的折叠状态改变播放音效:nova Flip 的妙趣音效
  • iOS 收集打印日志
  • 进程程序替换
  • 亚马逊云(AWS)技术深度解析及代码使用案例
  • 华为od全面介绍!!!
  • Redis/ElaticSearch/kafka入门
  • 每日OJ_牛客_mkdir(排序+模拟)
  • android 离线的方式使用下载到本地的gradle
  • 【云原生系列之SkyWalking的部署】
  • 【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态
  • C++系列-STL容器之list
  • 《Java编程思想》读书笔记-对象导论
  • Angularjs之国际化
  • CSS3 变换
  • css布局,左右固定中间自适应实现
  • gops —— Go 程序诊断分析工具
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • mysql_config not found
  • mysql外键的使用
  • PV统计优化设计
  • Twitter赢在开放,三年创造奇迹
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 初探 Vue 生命周期和钩子函数
  • 代理模式
  • 对象管理器(defineProperty)学习笔记
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 记一次用 NodeJs 实现模拟登录的思路
  • 理解在java “”i=i++;”所发生的事情
  • 码农张的Bug人生 - 见面之礼
  • 爬虫模拟登陆 SegmentFault
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端临床手札——文件上传
  • 巧用 TypeScript (一)
  • 温故知新之javascript面向对象
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 湖北分布式智能数据采集方法有哪些?
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​【已解决】npm install​卡主不动的情况
  • ​2021半年盘点,不想你错过的重磅新书
  • ​ArcGIS Pro 如何批量删除字段
  • ​iOS实时查看App运行日志
  • ​如何防止网络攻击?
  • (13)DroneCAN 适配器节点(一)
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)MFC+openGL单文档框架glFrame
  • (30)数组元素和与数字和的绝对差
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (C语言)二分查找 超详细
  • (Git) gitignore基础使用
  • (补充)IDEA项目结构
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统