LeetCode 解题报告 Candy

来源:互联网 发布:shadownsocks mac下载 编辑:程序博客网 时间:2024/04/29 09:17

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?

分析:

今年在做4399的笔试题的时候,遇到了这个题,当时没有一点思路。

这次再拿到这个题的时候还是没有什么思路,但感觉应该是动态规划的题,后来在网上看了解题报告之后,证实了我的猜想,虽然对动态规划有所了解 ,但如果真的让自己从头到尾的把题想出来,做出来,真的是有难度

下面就说说这个题的思路吧

要求每人至少一个,但临近的人并且比别人高,所拿到的糖就要多

首先用一个数组来保存每一个位置的大小,从左右两边遍历,如果后一个比前一个大,num[i] = max(inc++,num[i]);

public class Candy {public int candy(int[] ratings) {int [] num = new int[ratings.length];int result =ratings.length;for(int i=1,inc = 1;i<ratings.length;i++){if(ratings[i] > ratings[i-1]){num[i] = Math.max(num[i],inc++);}elseinc = 1;}for(int i = ratings.length-2,inc = 1;i>=0;i--){if(ratings[i] > ratings[i+1])num[i] = Math.max(inc++, num[i]);elseinc = 1;}for(int i=0;i<ratings.length;i++){result += num[i];}return result;    }}


0 0
原创粉丝点击