Leetcode brushing record-376. Secuencia de balanceo

Inserte la descripción de la imagen aquí

Intentamos utilizar la complejidad del tiempo O (n) para completar esta tarea
, es decir, para cada elemento, considere solo recorrer una vez

Definimos una variable res para representar la longitud de la secuencia de oscilación más larga

Luego, cuando atravesamos el elemento i + 1, necesitamos considerar la relación entre el i-ésimo y el i-1 °
. Entonces, definimos un estado_cur para representar la relación entre los dos primeros:
primero encontramos el primero y un [0] Números diferentes,
si los valores de los elementos de la lista completa son los mismos, devuelve directamente 1
Si hay un segundo valor posible
cur_state = 1 si a [i]> a [0] más -1 (nota, ingrese aquí un [i] no debe ser igual a un [0])

Si hay un [i-1] <a [i] como se muestra en la figura a continuación, hay tres posibilidades para la relación de tamaño de un [i + 1] y un [i] (tres bolas verdes)
si un [i + 1] <a [i], como el ball, más inferior verde lo haremos res ++, cur_state = -1
si un [i + 1]> = a [i], como en la pelota dos verdes, seguimos atravesar una siguiente
Inserte la descripción de la imagen aquí
con Li, si como se muestra, tiene una [i-1]> a [i], el a [i + 1] y una [i] es el tamaño de las tres relaciones posibles (tres bola verde)
Si a [i + 1]> a [i], como la bola verde superior, res ++, cur_state = 1
Si a [i + 1] <= a [i], como las dos bolas verdes del medio y siguientes, continuamos atravesando la siguiente
Inserte la descripción de la imagen aquí

Finalmente, regrese a res

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        length = len(nums)
        if length == 0:
            return 0
        elif length == 1:
            return 1
        cur_state = None
        index = 1
        while index < length and nums[index] == nums[index-1]:
            index += 1
        if index == length:
            return 1
        res = 2
        cur_state = 1 if nums[index] >nums[0] else -1
        for i in range(index+1,length):
            if cur_state == 1 and nums[i] < nums[i-1]:
                res += 1
                cur_state = -1
            elif cur_state == 1 and nums[i] >= nums[i-1]:
                continue
            elif cur_state == -1 and nums[i] > nums[i-1]:
                res += 1
                cur_state = 1
            elif cur_state == -1 and nums[i] <= nums[i-1]:
                continue 
        return res
Publicado 43 artículos originales · elogiado 14 · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_41545780/article/details/105148138
Recomendado
Clasificación