力扣135
(1)计算每一个元素的左坡度:
比左边相邻的元素大,左坡度就等于左边相邻元素的坡度+1
不比左边相邻的元素大,左坡度就等于0
(2)同理计算每一个元素的右坡度:
比右边相邻的元素大,右坡度就等于右边相邻元素的坡度+1
不比右边相邻的元素大,右坡度就等于0
(3)每个位置除了固定得到的1块糖果,额外应该分得的糖果数就等于这个位置左右坡度的更大值
最后返回sum+nums.length,要加上nums.length就是每个位置一定会获得一块糖果
class Solution
{
public int candy(int[] nums)
{
//1.求左坡度
int[] left=new int[nums.length];
for(int i=1;i<nums.length;i++)
{
if(nums[i]>nums[i-1])//左边相邻位置小于这个位置,这个位置左坡度就等于左边位置的坡度+1
{
left[i]=left[i-1]+1;
}
}
//2.求右坡度
int[] right=new int[nums.length];
for(int i=nums.length-2;i>=0;i--)
{
if(nums[i]>nums[i+1])//右边相邻位置小于这个位置,这个位置左坡度就等于左边位置的坡度+1
{
right[i]=right[i+1]+1;
}
}
int[] result=new int[nums.length];
for(int i=0;i<nums.length;i++)
{
result[i]=Math.max(left[i],right[i]);
}
int sum=0;
for(int i=0;i<nums.length;i++)
{
sum=sum+result[i];
}
return sum+nums.length;
}
}