题解 | #分糖果问题#
分糖果问题
https://www.nowcoder.com/practice/76039109dd0b47e994c08d8319faa352
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* pick candy
* @param arr int整型一维数组 the array
* @return int整型
*/
public int candy (int[] arr) {
int n = arr.length ;
int[] sum = new int[n] ;
int preNum = 1 ;
sum[0] = 1 ;
for(int i = 1;i < arr.length;i++){
if(arr[i] > arr[i-1]){
sum[i] = ++preNum ;
}else if(arr[i] <= arr[i-1]){
sum[i] = preNum = 1 ;
}
}
int ans = Math.max(sum[n-1],1) ;
preNum = 1 ;
for(int i = arr.length-2;i >= 0;i--){
if(arr[i] > arr[i+1]){
preNum ++ ;
ans += Math.max(preNum,sum[i]) ;
}else if(arr[i] <= arr[i+1]){
preNum = 1 ;
ans += Math.max(preNum,sum[i]) ;
}
}
return ans;
// write code here
}
}
从前往后遍历,比前面数大当前位置的糖果数就加1,然后从后往前遍历,当前位置的糖果数即为两者大的那个,需要注意相等的情况
