5
public int wiggleMaxLength(int[] nums) {7
dp = new int[n][1005][2];8
for (int i = 0; i < n; i++) {9
for (int j = 0; j < 1005; j++) {10
Arrays.fill(dp[i][j], -1);13
int pos = f(0, 0, nums, -1);14
for (int i = 0; i < n; i++) {15
for (int j = 0; j < 1005; j++) {16
Arrays.fill(dp[i][j], -1);19
int neg = f(0, 1, nums, 1001);20
return Math.max(pos, neg);23
int f(int i, int posPre, int a[], int prev) {25
if (dp[i][prev + 1][posPre] != -1) return dp[i][prev + 1][posPre];27
int not = f(i + 1, 0, a, prev);29
if (a[i] - prev > 0) {30
take = f(i + 1, 1, a, a[i]) + 1;32
return dp[i][prev + 1][posPre] = Math.max(not, take);34
int not = f(i + 1, 1, a, prev);36
if (a[i] - prev < 0) {37
take = f(i + 1, 0, a, a[i]) + 1;39
return dp[i][prev + 1][posPre] = Math.max(not, take);