candy(litecode动态规划)
来源:互联网 发布:pc手机淘宝链接转换 编辑:程序博客网 时间:2024/05/16 05:06
题目描述
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?
public class Solution {
public int candy(int[] ratings) { int[] candies=new int[ratings.length]; for(int i=0;i<ratings.length;i++){ candies[i]=1; } candies=order(ratings,candies); candies=reverse(ratings,candies); return sum(candies);}public int[] order(int[] ratings,int[] candies){ int count=0; for(int i=1;i<ratings.length;i++){ if(ratings[i]>ratings[i-1]) { count++; candies[i]+=count; } else if(ratings[i]<=ratings[i-1]){ count=0;} } return candies;}public int[] reverse(int[] ratings,int[] candies){ int count=0; for(int i=ratings.length-1;i>0;i--){ if(ratings[i-1]>ratings[i]) { count++; if(candies[i-1]>count) continue; candies[i-1]=count+1; } else if(ratings[i-1]<=ratings[i]){ count=0;} } return candies;}public int sum(int[] candies){ int count=0; for(int i=0;i<candies.length;i++){ count+=candies[i]; } return count;}
}
/*
从前往后遍历的过程中,如果后面一个元素比前面的大,则在前面的基础上加1,如果后面的元素比前面的小,则让其等于1.
从后往前遍历和从前往后遍历的过程一样。
*/
注意的问题:
1、当出现两个数相等的时候,可以让后面一个数变为1,根据前面给的条件。
2、当两头遍历到中间某个最大值时,选择遍历结果的最大值。
0 0
- candy(litecode动态规划)
- Leetcode 动态规划 Candy
- 动态规划——candy
- 【LeetCode从零单排】No.135Candy(双向动态规划)
- 【动态规划(一)】动态规划基础
- 动态规划(1)
- 动态规划(2)
- 动态规划(3)
- 动态规划(4)
- HDOJ2046(动态规划)
- 动态规划(one)
- 动态规划(读书笔记)
- Pearls(动态规划)
- skiing(动态规划)
- HDU4001(动态规划)
- 作业题 (动态规划)
- Zipper(动态规划)
- 滑雪(动态规划)
- Android系统驱动开发琐碎——解决spidev读写过程没有时钟信号的问题
- 浅析 SSH 下的 表现层,业务层,持久层
- jpa使用in传递list参数
- CSS3 动画实现方法大全
- Camera2 打开相机预览界面
- candy(litecode动态规划)
- what for ? 为什么?有何目的?
- wildfly8的安装-创建基于EJB3.1无状态回话bean并部署-java客户端程序调用ejb
- Android下led控制(中)--Linux部分
- jquery省地市三级联动
- 在eclipse中使用Lombok
- Next-Key Locks
- LuaEclipse配置
- JAVA多线程实现方式