[Pila monótona] LeetCode-503. El siguiente elemento más grande II

503.

Descripción del Título

Dada una matriz en bucle (el siguiente elemento del último elemento es el primer elemento de la matriz), genera el siguiente elemento más grande de cada elemento. El siguiente elemento más grande del número x está en el orden transversal de la matriz. El primer número después de este número es más grande que él, lo que significa que debe buscar el siguiente número más grande en un bucle. Si no existe, se emite -1.

Ejemplo 1:

Entrada: [1,2,1]
Salida: [2, -1,2]
Explicación: El siguiente número mayor del primer 1 es 2; el
número 2 no puede encontrar el siguiente número mayor; el
segundo El siguiente número mayor de 1 requiere una búsqueda de bucle, y el resultado también es 2.

Ideas para resolver problemas

Pila monotónica

    public static int[] nextGreaterElements(int[] nums) {
    
    
        int length = nums.length;
        int res[] = new int[length];
        Arrays.fill(res,-1); //默认都为1
        Stack<Integer> stack = new Stack<>();
        //相当于把数组遍历两遍
        for (int i = 0; i < length * 2; i++) {
    
    
            //遍历数组的第index(index从0开始)个元素,因为数组会遍历
            //两遍,会导致数组越界异常,所以这里要对数组长度进行求余
            int index = i % length;
            //单调栈,他存储的是元素的下标,不是元素具体值,从栈顶
            //到栈底所对应的值是递增的(栈顶元素在数组中对应的值最小,
            //栈底元素对应的值最大),如果栈顶元素对应的值比nums[index]小,
            //说明栈顶元素对应的值遇到了右边第一个比他大的值,然后栈顶元素出栈,
            //让他对应的位置变为nums[index],也就是他右边第一个比他大的值,
            //然后继续判断……
            while (!stack.isEmpty() && nums[stack.peek()] < nums[index]){
    
    
                res[stack.pop()] = nums[index];
            }
            //当前元素的下标入栈
            stack.push(index);
        }
        return res;
    }

Supongo que te gusta

Origin blog.csdn.net/qq_35655602/article/details/115216646
Recomendado
Clasificación