[LeetCode]135. 分发糖果(java实现)动态规划 记忆化搜索
1. 题目
2. 读题(需要重点注意的东西)
思路(动态规划 记忆化搜索):
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public int candy(int[] ratings) {
int n = ratings.length;
int[] f = new int[n];
int res = 0;
Arrays.fill(f,-1);
for(int i = 0;i < n;i++) res += dp(ratings,i,f);
return res;
}
// 记忆化搜索
public int dp(int[] ratings,int x,int[] f){
// 记忆化搜索核心,搜索过直接返回它
if(f[x] != -1) return f[x];
// 初始化每个小朋友有一颗糖
f[x] = 1;
// dp
if(x > 0 && ratings[x - 1] < ratings[x]) f[x] = dp(ratings,x - 1,f)+ 1;
if(x + 1 < ratings.length && ratings[x + 1] < ratings[x]) f[x] = Math.max(f[x],dp(ratings,x+1,f) + 1);
return f[x];
}
}
可能存在的问题:
4. 可能有帮助的前置习题
- 二维版本 —> [AcWing] 901. 滑雪(C++实现)记忆化搜索例题