LeetCode 978: el subarreglo de turbulencia más largo

1. Introducción al tema

        Cuando un sub-arreglo A [i], A [i + 1], ..., A [j] satisface las siguientes condiciones, lo llamamos un sub-arreglo turbulento: si i <= k <j, cuando k es impar Cuando, A [k]> A [k + 1], y cuando k es un número par, A [k] <A [k + 1]; o si i <= k <j, cuando k es un número par , A [k]> A [k + 1], y cuando k es un número impar, A [k] <A [k + 1]. Es decir, si el signo de comparación cambia entre cada par de elementos adyacentes en la submatriz, la submatriz es una submatriz turbulenta. Devuelve la longitud del subarreglo de turbulencia máxima de A.

示例 1:
输入:[9,4,2,10,7,8,8,1,9]
输出:5
解释:(A[1] > A[2] < A[3] > A[4] < A[5])

示例 2:
输入:[4,8,12,16]
输出:2

示例 3:
输入:[100]
输出:1
 
提示:
1 <= A.length <= 40000
0 <= A[i] <= 10^9

Dos ideas para resolver problemas

        La conclusión que se puede obtener al analizar el tema es: si la relación de tamaño entre el elemento actual y los elementos antes y después de este cambia alternativamente, entonces se puede formar el subarreglo de turbulencia. Si la relación de tamaño está representada por 1, 0, -1, la relación de los elementos en la matriz de turbulencia debe ser: 1, -1, 1, -1 ... este cambio periódico. Según este principio, el problema se puede resolver de acuerdo con los siguientes pasos:

(1) Compare la relación entre cualquier elemento y los elementos antes y después de él. Si el contexto se multiplica por -1, la longitud del subarreglo de turbulencia es +1; de lo contrario, registre la longitud máxima del subarreglo de turbulencia actual y utilice el elemento actual como turbulencia El punto de partida del subarreglo, vuelva a registrar la longitud del subarreglo de turbulencia.

(2) Procesando el encabezado del límite, porque la longitud de la matriz es al menos 1 según el título, la longitud de la submatriz turbulenta también es al menos 1, y el recorrido comienza desde el segundo elemento.

(3) Tratar con el final del límite, para el último elemento, solo hay que juzgar que no es igual al elemento anterior.

Tres, código de resolución de problemas

class Solution {
public:
    int maxTurbulenceSize(vector<int>& arr) {
        int n = arr.size();
        int ans = 1; //长度至少为1
        int pos = 0; //记录湍流子数组的起点
        for(int i = 1; i < n; ++i)
        {
            //当前项与前一项之间的关系
            int c = compare(arr[i], arr[i-1]); 
            //处理最后一项以及前后大小关系没有交替变化的情况
            if(i == n-1 || c * compare(arr[i+1], arr[i]) != -1)
            {
                //当前项与前一项不等时
                if(c)
                    ans = max(ans, i - pos + 1);
                //更新湍流子数组的起点
                pos = i;
            }
        }
        return ans;
    }

    int compare(int a, int b)
    {
        if(a - b > 0)
            return 1;
        else if(a - b < 0)
            return -1;
        else
            return 0;
    }

};

Cuatro, resultados de resolución de problemas

Supongo que te gusta

Origin blog.csdn.net/qq_39661206/article/details/109778577
Recomendado
Clasificación