算法第十三周作业01
来源:互联网 发布:linux安装jdk1.7 64位 编辑:程序博客网 时间:2024/05/29 17:29
Description
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
- 首先理解题意:如果该孩子的权值比傍边孩子的大,那么他的糖果数比傍边孩子的要多,对于权值为[1,2,2]情况,第一个孩子糖果数为1;第二个孩子权值比第一个孩子权值大,故为2;第三个孩子糖果树不比前面孩子(只有前面邻居)多,故糖果树为1
- 分别考虑权值的正向上升和反向上升。上升过程,如果对应糖果数arr[i]比待比较糖果数arr[i-1]大,则arr[i]保持不变,arr[i]=arr[i-1]+1。
- 对于权值序列[1,2,3,6,5,2,3,3,4],首先输出化糖果树序列[0,0,0,0,0,0,0,0,0] (PS:题目中要求每个孩子至少1个糖果,为避免初始化序列浪费O(n)复杂度,此处不进行手动初始化,有后面统一加上序列长度来弥补),对于正向上升,糖果树序列为[0,1,2,3,0,0,1,0,1],对于反向上升,糖果序列变换为[0,1,2,3,1,0,1,0,1]
Code
public class Solution { public int candy(int[] ratings) { int result = 0; int[] arr = new int[ratings.length]; // 正向上升 for (int i = 1; i < ratings.length; i++) { // 相邻对比 if(ratings[i] > ratings[i-1]){ arr[i] = arr[i-1] + 1; } } // 反向上升 for (int i = ratings.length - 1; i > 0; i--) { // 相邻对比,如果权值递增时,糖果数也是递增的,则忽略操作 if(ratings[i-1] > ratings[i] && arr[i-1] <= arr[i]){ arr[i-1] = arr[i] + 1; } // 叠加结果 result += arr[i]; } return result + arr[0] + ratings.length; }}
0 0
- 算法第十三周作业01
- 算法第十三周作业02
- 算法作业_22(2017.5.18第十三周)
- 算法课第十三周作业 | Counting Bits
- 第十三周作业 2
- 第十三周作业 1
- 第十三周作业 3.0
- 第十三周作业 1.0
- 第十三周作业 2.0
- 第十三周作业 3.0
- 第十三周作业1
- 第十三周作业2
- 第十三周作业3
- 第十三周作业1
- 第十三周作业2
- 第十三周作业3
- 第十三周作业 2
- 第十三周作业 3
- Python-pip 安装失败问题解决
- [序言]写在前面
- 线程资源的回收
- 51Nod 1001 数组中和等于K的数对
- Gym
- 算法第十三周作业01
- Python操作MySQL数据库小记
- 表的维护和改造
- CNN常见问题总结
- 上传应用到Google Play
- JS设计模式二:工厂模式
- JVM 内存模型
- 有用的文章链接
- Gym_101350I_Mirrored String II_回文字符串(马拉车Manacher)