LeetCode-665. Código y análisis de matriz no decreciente (Java)

LeetCode-665. Matriz no decreciente [Matriz no decreciente] -Análisis y código [Java]

1. Tema

Aquí hay una matriz de enteros de longitud n. Por favor, juzgue si la matriz se puede convertir en una secuencia no decreciente cuando se cambia un elemento como máximo.
Definimos una secuencia numérica no decreciente como esta: Para todo i (0 <= i <= n-2) en la matriz, nums [i] <= nums [i + 1] siempre se satisface.

Ejemplo 1:

输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。

Ejemplo 2:

输入: nums = [4,2,1]
输出: false
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

Descripción:

  • 1 <= n <= 10 ^ 4
  • -10 ^ 5 <= nums [i] <= 10 ^ 5

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/non-decreasing-array Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Dos, análisis y código

1. Modificación directa

(1) Pensando

Debido a que solo se puede cambiar un elemento, se puede diseñar una marca para registrar si se ha utilizado la oportunidad de cambio. Al realizar cambios, haga que los elementos modificados sean lo más pequeños posible.
Cuando nums [i-1]> nums [i], cuando el elemento necesita ser cambiado, se puede dividir en dos casos:

  • Si i <2 o nums [i]> = nums [i-2], simplemente cambie nums [i-1] a un número menor o igual a nums [i], porque la sentencia ya alcanzó nums [i] en esta vez, por lo que en realidad no hay necesidad de operar;
  • Si i> = 2 y nums [i] <nums [i-2], solo puede cambiar nums [i] por num [i-1] y luego hacer juicios posteriores.

(2) Código

class Solution {
    
    
    public boolean checkPossibility(int[] nums) {
    
    
        boolean changed = false;
        for (int i = 1; i < nums.length; i++) {
    
    
            if (nums[i - 1] > nums[i])
                if (changed == false) {
    
    
                    if (i > 1 && nums[i] < nums[i - 2])
                        nums[i] = nums[i - 1];                    
                    changed = true;
                }
                else
                    return false;
        }
        return true;
    }
}

(3) Resultados

Tiempo de ejecución: 1 ms, superando al 99,54% de los usuarios
en todas las presentaciones de Java ; consumo de memoria: 40,1 MB, superando al 16,91% de los usuarios en todas las presentaciones de Java.

Tres, otro

Nada.

Supongo que te gusta

Origin blog.csdn.net/zml66666/article/details/113829361
Recomendado
Clasificación