leetcode-135. Candy
2016-08-29 21:43
375 查看
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?
题意解析:
题目大概就是说有一群小孩,每个小孩有个得分,现在要给小孩子发糖,得分高的小孩应该比他旁边得分低的小孩得到的糖果要多,求问最少需要多少糖果。
最少的情况其实很简单,就是最低的人是1,比他高一点就+1,这道题难度是hard,可是我感觉只有easy,因为思路是直的,完全没拐弯,代码如下:
public class Solution {
public int candy(int[] ratings) {
if(ratings.length == 1){
return 1;
}
int[] candys = new int[ratings.length];
candys[0] = 1;
for(int i = 1; i < ratings.length; i++){
if(ratings[i] > ratings[i - 1]){
candys[i] = candys[i - 1] + 1;
}else{
candys[i] = 1;
}
}
for(int i = ratings.length - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1]){
candys[i] = candys[i + 1] + 1;
}
}
int sum = 0;
for(int x : candys){
sum += x;
}
return sum;
}
}
复杂度O(n),其实就是正向一次,反向一次。正向的时候默认是1,如果右边比左边高,就在原来的基础上+1,否则都是1。反向的时候,如果左边比右边高,而且左边糖果没有右边多,那左边的糖果就在右边的基础上+1。
结果也是在最快的那一组里面。别的算法我也想不到。不知道为什么有的人时间会那么慢。
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?
题意解析:
题目大概就是说有一群小孩,每个小孩有个得分,现在要给小孩子发糖,得分高的小孩应该比他旁边得分低的小孩得到的糖果要多,求问最少需要多少糖果。
最少的情况其实很简单,就是最低的人是1,比他高一点就+1,这道题难度是hard,可是我感觉只有easy,因为思路是直的,完全没拐弯,代码如下:
public class Solution {
public int candy(int[] ratings) {
if(ratings.length == 1){
return 1;
}
int[] candys = new int[ratings.length];
candys[0] = 1;
for(int i = 1; i < ratings.length; i++){
if(ratings[i] > ratings[i - 1]){
candys[i] = candys[i - 1] + 1;
}else{
candys[i] = 1;
}
}
for(int i = ratings.length - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1]){
candys[i] = candys[i + 1] + 1;
}
}
int sum = 0;
for(int x : candys){
sum += x;
}
return sum;
}
}
复杂度O(n),其实就是正向一次,反向一次。正向的时候默认是1,如果右边比左边高,就在原来的基础上+1,否则都是1。反向的时候,如果左边比右边高,而且左边糖果没有右边多,那左边的糖果就在右边的基础上+1。
结果也是在最快的那一组里面。别的算法我也想不到。不知道为什么有的人时间会那么慢。
相关文章推荐
- leetcode No135. Candy
- leetcode 135. Candy
- leetcode 135. Candy 分糖果 + 很经典的贪心算法
- **Leetcode 135. Candy | 思维题
- LeetCode 135. Candy
- LeetCode 135. Candy(糖果)
- Leetcode 135. Candy
- [LeetCode] 135. Candy java
- LeetCode 135. Candy
- leetcode题解-135. Candy
- leetcode-135. Candy
- LeetCode 135. Candy
- [LeetCode]135. Candy
- leetcode 135. Candy
- LeetCode 135. Candy
- [leetcode] 135. Candy
- [leetcode] 135. Candy 解题报告
- [算法分析与设计] leetcode 每周一题: 135. Candy
- [leetcode] 【数组】 135. Candy
- [Leetcode] 135. Candy 解题报告