1. 题目

2. 思路
(1) 贪心算法
- 先从左往右遍历,若arr[i]>arr[i-1],则sum[i]=sum[i-1]+1,否则sum[i]=1,初始时sum[0]=1。
- 再从右往左遍历,若arr[i]>arr[i+1],则sum[i]=max(sum[i],sum[i+1]+1),否则sum[i]=max(sum[i],1),同时统计所有糖果的数量。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public int candy(int[] arr) {
int n = arr.length;
int[] sum = new int[n];
sum[0] = 1;
for (int i = 1; i < n; i++) {
if (arr[i] > arr[i - 1]) {
sum[i] = sum[i - 1] + 1;
} else {
sum[i] = 1;
}
}
int res = sum[n - 1];
for (int i = n - 2; i >= 0; i--) {
if (arr[i] > arr[i + 1]) {
sum[i] = Math.max(sum[i], sum[i + 1] + 1);
} else {
sum[i] = Math.max(sum[i], 1);
}
res += sum[i];
}
return res;
}
}