题解 | #分糖果问题#
分糖果问题
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[] num = new int[n];
for(int i=0;i<n;i++){
num[i] = 1;
}
// 首先从左往右遍历,因为默认为1,所以左边的数不会大于右边的数,我们做判断然后不断更新数据
for(int i=1;i<n;i++){
if(arr[i] > arr[i-1]){
num[i] = num[i-1] + 1;
}
}
// 记录res返回结果,就是总糖果数(先统计上最后一个,然后从后往前遍历依次获得)
int res = num[n-1];
// 然后我们还需要从右往左遍历,因为可能出现左侧的值比右侧大,但是糖果数没有右侧多的情况
for(int i=n-2;i>=0;i--){
if(arr[i] > arr[i+1] && num[i] <= num[i+1]){
num[i] = num[i+1] + 1;
}
res += num[i];
}
return res;
}
}
滴滴公司福利 1784人发布
