博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] Candy
阅读量:4500 次
发布时间:2019-06-08

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

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?

 

Solution:

基本思路就是进行两次扫描,一次从左往右,一次从右往左。第一次扫描的时候维护对于每一个小孩左边所需要最少的糖果数量,存入数组对应元素中,第二次扫描的时候维护右边所需的最少糖果数,并且比较将左边和右边大的糖果数量存入结果数组对应元素中。这样两遍扫描之后就可以得到每一个所需要的最最少糖果量,从而累加得出结果。方法只需要两次扫描,所以时间复杂度是O(2*n)=O(n)。空间上需要一个长度为n的数组,复杂度是O(n)。

1 public class Solution { 2     public int candy(int[] ratings) { 3         if(ratings.length==0) 4             return 0; 5         int N=ratings.length; 6         int[] candies=new int[N]; 7         candies[0]=1; 8         for(int i=1;i
ratings[i-1]){10 candies[i]=candies[i-1]+1;11 }else{12 candies[i]=1;13 }14 }15 for(int i=N-2;i>=0;--i){16 if(ratings[i]>ratings[i+1]&&candies[i]<=candies[i+1])17 candies[i]=candies[i+1]+1;18 }19 int result=0;20 for(int iCandy:candies){21 result+=iCandy;22 }23 return result;24 }25 }

 

转载于:https://www.cnblogs.com/Phoebe815/p/4118683.html

你可能感兴趣的文章
filter IE滤镜(Internet Explorer)CSS
查看>>
idea 错误: -source 1.6 中不支持 diamond 运算符的解决办法
查看>>
11个让你吃惊的linux命令
查看>>
Python API
查看>>
混凝土数学第四章之数论学习笔记
查看>>
今天学了下REST相关概念,写个随笔作为记录
查看>>
毕设用到的工具
查看>>
C++学习笔记-STL
查看>>
UVA 11552 Fewest Flops(区间dp)
查看>>
Supervisor安装与配置问题一站式解决
查看>>
jfinal视频目录
查看>>
软件设计师考试历年试题汇总
查看>>
小div在大div中垂直居中,以及div在页面垂直居中
查看>>
有用的导航栏代码
查看>>
语法错误 : 缺少“;”(在“*”的前面) 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int...
查看>>
2015Web前端攻城之路
查看>>
推荐一个算法网站
查看>>
Python操作MySQL+Redis+MongoDB
查看>>
2017.6.30 Note replace innerHTML split() join()
查看>>
过滤关键词(中间有空格一样过滤)
查看>>