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

建e网室内设计网 模型长春关键词优化排名

建e网室内设计网 模型,长春关键词优化排名,珠海网站建设方案开发,Apple 手机网站制作优质博文:IT-BLOG-CN 一、题目 n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果: 【1】每个孩子至少分配到1个糖果。 【2】相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩…

优质博文:IT-BLOG-CN

一、题目

n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:
【1】每个孩子至少分配到1个糖果。
【2】相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目。

示例 1:
输入:ratings = [1,0,2]
输出:5
解释:你可以分别给第一个、第二个、第三个孩子分发2、1、2颗糖果。

示例 2:
输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发1、2、1颗糖果。第三个孩子只得到1颗糖果,这满足题面中的两个条件。

n == ratings.length
1 <= n <= 2 * 104
0 <= ratings[i] <= 2 * 104

二、代码

【1】两次遍历: 我们可以将「相邻的孩子中,评分高的孩子必须获得更多的糖果」这句话拆分为两个规则,分别处理。
左规则:ratings[i−1] < ratings[i]时,i号学生的糖果数量将比i−1号孩子的糖果数量多。
右规则:ratings[i] > ratings[i+1]时,i号学生的糖果数量将比i+1号孩子的糖果数量多。
我们遍历该数组两次,处理出每一个学生分别满足左规则或右规则时,最少需要被分得的糖果数量。每个人最终分得的糖果数量即为这两个数量的最大值。

具体地,以左规则为例:我们从左到右遍历该数组,假设当前遍历到位置i,如果有ratings[i−1] < ratings[i]那么i号学生的糖果数量将比i−1号孩子的糖果数量多,我们令left[i]=left[i−1] + 1即可,否则我们令left[i] = 1。在实际代码中,我们先计算出左规则left数组,在计算右规则的时候只需要用单个变量记录当前位置的右规则,同时计算答案即可。

class Solution {public int candy(int[] ratings) {// 1、定义left[]数组,计算每个小朋友符合左侧规则时,能获取到的糖果// 2、定义两个变量,第一个计算前一个小朋友的糖果,第二个计算总的糖果数量,从右侧开始计算if (ratings.length == 0) {return 0;}// 创建数组int[] left = new int[ratings.length];left[0] = 1;for(int i = 1; i < ratings.length; i++) {if (ratings[i] > ratings[i - 1]) {left[i] = left[i - 1] + 1;} else {left[i] = 1;}}// 先初始化最后一个小朋友的糖果int next = 1, count = Math.max(1, left[ratings.length - 1]);for(int i = ratings.length - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1]) {next += 1;} else {next = 1;}count += Math.max(next, left[i]);}return count;}
}

时间复杂度: O(2n)其中n是孩子的数量。我们需要遍历两次数组以分别计算满足左规则或右规则的最少糖果数量。
空间复杂度: O(n)其中n是孩子的数量。我们需要保存所有的左规则对应的糖果数量。

【2】常数空间遍历: 定义两个变量,第一个计算当前小朋友的糖果pre,第一个小朋友默认为1,第二个计算总的糖果数量count,如果时递增的,那么就比较简单,我们给pre+1,如果递减了,我们重置pre = 1即可。下面考虑两个特殊场景:
 ● 当pre=1时,开始递减时,我们需要再创建一个变量decr,来表示递减的次数,然后将其累积到count中,也就达到了将递减转化为递增的效果。
 ● 当递减的队列长度,超过了递减前小朋友的糖果时,我们需要对递减前的小朋友的糖果+n,例如下图: 从左侧遍历时,第三个小朋友应该是3个糖果,所以定义inc记录递减前小朋友的糖果,如果递减的糖果decr等于递减前的糖果inc,就需要对inc + 1

class Solution {public int candy(int[] ratings) {// 1、定义两个变量,第一个计算当前小朋友的糖果pre,第二个计算总的糖果数量count。// 2、左侧遍历时,如果时递减的情况,需要再创建一个变量,计算递减的次数 decr。// 3、特殊处理:递减的时候,如果我拥有的糖果和递减前小朋友的糖果个数相同时,需要++,举例:5321的时候,5有3个糖果,此时的3再递减中也会有5个糖果,所以就需要对5的糖果+1if (ratings.length == 0) {return 0;}// 先初始化最后一个小朋友的糖果int pre = 1, count = 1, decr = 0, inc = 1;for(int i = 1; i < ratings.length; i++) {if (ratings[i] >= ratings[i - 1]) {pre = ratings[i] == ratings[i - 1] ? 1 : pre + 1;;// 如果时递增的,当前递减序列结束decr = 0;count += pre;// pre表示当前小朋友用于的当过inc = pre;} else {// 如果开始了递减序列,我们就开始记录递减序列的长度decr++;// 递减的时候,如果我拥有的糖果和递减的小朋友的个数相同时,需要++,举例:5321的时候,5有3个糖果,此时的3再递减中也会有5个糖果,所以就需要对5+1if (inc == decr) {decr++;}// 重置糖果为1pre = 1;count += decr;}}return count;}
}

时间复杂度: O(n)其中n是孩子的数量。我们需要遍历两次数组以分别计算满足左规则或右规则的最少糖果数量。
空间复杂度: O(1)我们只需要常数的空间保存若干变量。

http://www.tj-hxxt.cn/news/110282.html

相关文章:

  • 2016年网站设计风格推广网站文案
  • 互动科技网站建设谷歌的推广是怎么样的推广
  • 秀洲区住房和城乡建设局网站百度极速版app下载安装挣钱
  • 一家做公司点评网站软文推广营销平台
  • 17网站一起做网店 睡衣批发网站建设方案书 模板
  • 电线电缆做销售哪个网站好培训学校怎么招生
  • 合肥长丰路网站建设石家庄最新消息今天
  • 网站策划的最终体现是什么成都seo优化外包公司
  • 专门做自助游攻略的网站是哪个山东一级造价师
  • 网站开发年收入在百度怎么发广告做宣传
  • 网站建设投标文件站长之家seo信息
  • 在线视频网站开发互联网站
  • 施工企业安全培训西安关键词优化软件
  • 网络科技公司有什么职位seo外链怎么发
  • 产地证哪个网站做快链友情链接平台
  • 设计云网站建设百度发作品入口在哪里
  • 动态网站制作基础建议免费推广广告链接
  • php做网站csdn百度搜索引擎优化方案
  • 新闻聚合网站怎么做外贸企业网站设计公司
  • 做期货都看那些网站湖北搜索引擎优化
  • 网站流量少怎么做网站增加外链的方法有哪些
  • 哪些网站可以上传自己做的视频网络平台推广方案
  • 重庆营销型网站开发价格宁波seo推广服务
  • 网站建设 网址导航2023年7 8月十大新闻
  • wordpress新建模板网站的seo是什么意思
  • 黔南州住房和城乡建设局网站网络营销的概念
  • 高端大气网络设计建设公司网站织梦模板百度渠道开户
  • 广州专业做网站建设有免费做网站的吗
  • 做网站付钱方式上海做网站优化
  • 北京专业网络直播制作成都网站优化及推广