leetCode 376. Programación dinámica de secuencia de swing + diagrama + transferencia de estado

376. Secuencia de swing - LeetCode

Si la diferencia entre números consecutivos alterna estrictamente entre números positivos y negativos, la secuencia de números se llama  secuencia oscilante. La primera diferencia (si está presente) puede ser positiva o negativa. Las secuencias con un solo elemento o dos elementos desiguales también se consideran secuencias de oscilación.

  • Por ejemplo,  [1, 7, 4, 9, 2, 5] es una  secuencia de oscilación  porque las diferencias  (6, -3, 5, -7, 3) alternan entre valores positivos y negativos.

  • En cambio, la suma [1, 4, 7, 2, 5] no  es [1, 7, 4, 5, 5] una secuencia oscilante, la primera porque sus dos primeras diferencias son ambas positivas y la segunda porque su última diferencia es cero.

Se puede obtener una subsecuencia  eliminando algunos (o no) elementos de la secuencia original, dejando los elementos restantes en su orden original.

Dada una matriz de números enteros  nums , devuelve  la longitud de la subsecuencia más larganums  en  la  secuencia  de oscilación  .

Ejemplo 1:

Entrada: nums = [1,7,4,9,2,5]
 Salida: 6
 Explicación: La secuencia completa es una secuencia de swing y la diferencia entre cada elemento es (6, -3, 5, -7, 3) .

Ejemplo 2:

Entrada: nums = [1,17,5,10,13,15,10,5,16,8]
 Salida: 7
 Explicación: Esta secuencia contiene varias secuencias de oscilación de longitud 7. 
Uno de ellos es [1, 17, 10, 13, 10, 16, 8] y la diferencia entre los elementos es (16, -7, 3, -3, 6, -8).

Ejemplo 3:

Entrada: números = [1,2,3,4,5,6,7,8,9]
 Salida: 2

>>Ideas y análisis

Solución oficial 376. Secuencia de balanceo - LeetCode y este artículo 376. Secuencia de balanceo - LeetCode

Resumen y resumen de las ideas para resolver el problema dado.

  • Un elemento en una secuencia se denomina "pico" si y sólo si los elementos adyacentes a ambos lados del elemento son más pequeños que él. Por ejemplo, 3 en la secuencia [1,3,2,4] es un "pico"
  • Un elemento en una secuencia se llama "valle" si y sólo si los elementos adyacentes a ambos lados del elemento son más grandes que él. Por ejemplo, 2 en la secuencia [1,3,2,4] es un "valle"
  • En particular, para los elementos ubicados en ambos extremos de la secuencia, solo los elementos adyacentes en un lado son más pequeños o más grandes que ella, lo que también se denomina " pico" o "valle" . Por ejemplo , en la secuencia [1,3,2,4] , 1 también es un "valle" y 4 es un "pico".

Definición de estado:

  • up[i]: La secuencia de oscilación ascendente más larga en la matriz nums[0...i]
  • abajo[i]: la secuencia de oscilación descendente más larga en la matriz nums[0...i]

Transferencia de estado:

  • números[i] > números[i-1]: arriba[i] = abajo[i-1] + 1; abajo[i] = abajo[i-1]
  • números[i] < números[i-1]: arriba[i] = arriba[i-1]; abajo[i] = arriba[i-1] + 1

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        int n = nums.size();
        if (n < 2) {
            return n;
        }
        int up = 1, down = 1;
        for (int i = 1; i < n; i++) {
            if (nums[i] > nums[i - 1]) {
                up = down + 1;
            } else if (nums[i] < nums[i - 1]) {
                down = up + 1;
            }
        }
        return max(up, down);
    }
};

// 作者:力扣官方题解
// 链接:https://leetcode.cn/problems/wiggle-subsequence/solutions/805292/python3-yi-tu-sheng-qian-yan-by-v12de-ao-72b1/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Mis artículos anteriores: leetCode 376. Algoritmo codicioso de secuencia oscilante_Heheda( ̄▽ ̄)"'s blog-CSDN blog

artículo recomendado:

376. Secuencia de swing - LeetCode

376. Secuencia de swing - LeetCode 

Supongo que te gusta

Origin blog.csdn.net/weixin_41987016/article/details/133470576
Recomendado
Clasificación