Unidos define: dp[i]
representantes designados como i
la oscilación máxima de la final de la secuencia
, así como 0 lo positivo y negativo implicado aquí
por lo que el uso de up[i]
la memoria es, con mucho, el más largo con la primera i
uno hasta el final de la longitud de la secuencia de elementos de oscilación.
Del mismo modo, el down[i]
registro es, de lejos, la más larga en el primer i
extremo longitudinal de la gota ésimo elemento de la secuencia de oscilación.
Cada vez que nos encontramos con el primer i
elemento de una secuencia de cola oscilante tiempo de subida de cambios up[i]
. Ahora consideramos la forma de actualizar up[i]
, debemos tener en cuenta la totalidad de la parte delantera de la oscilación en secuencia descendente, que se va a encontrar down[j]
, se reúnen j < i
y nums[i]>nums[j]
. Del mismo modo, down[i]
se actualizará.
/**
* dp[i] 的意义是以下标i结尾的最长摆动序列
*/
class Solution {
public int wiggleMaxLength(int[] nums) {
if (nums.length <= 1) return nums.length;
int n = nums.length;
int[] up = new int[n];
int[] down = new int[n];
for (int i = 1; i < n; i++) {
for (int j = i - 1; j >= 0; j--) {
if(nums[i] - nums[j] > 0){
up[i] = Math.max(up[i],down[j] + 1);
}else if (nums[i] < nums[j])
down[i] = Math.max(down[i],up[j] + 1);
}
}
return 1 + Math.max(down[nums.length - 1], up[nums.length - 1]);
}
public static void main(String[] args) {
int[] nums = {1,2,3,4,5,6,7,8,9};
System.out.println(new Solution().wiggleMaxLength(nums));//2
}
}