[48] (Verbo) Suma máxima de subsecuencias | Longitud de la última palabra | más uno (LC 53 | 58 | 66)

Suma máxima de subsecuencia

Descripción del problema

Dados los números de una matriz entera, busque una submatriz continua con la suma más grande (la submatriz contiene al menos un elemento) y devuelva su suma más grande.

Ideas para resolver problemas

Para obtener la suma máxima continua de los primeros n elementos, se debe relacionar con la suma máxima continua de los primeros n-1 elementos. Se puede ver que este problema se puede resolver mediante programación dinámica. Definir dp [i] al final con nums [i] La suma máxima continua de, si se conoce dp [i-1], entonces dp [i] = Math.max (dp [i-1] + nums [i], nums [i]), el el resultado final es el valor más grande dp [i].

class Solution {
    
    
    public int maxSubArray(int[] nums) {
    
    
        int n = nums.length;
        int dp[] = new int[n];
        dp[0] = nums[0];
        int res = nums[0];
        for(int i=1;i<n;i++){
    
    
            dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);
            res = Math.max(res,dp[i]);
        }
        return res;
    }
}

La longitud de la última palabra

Descripción del problema

Le da una cadena s, que consta de varias palabras, separadas por espacios. Devuelve la longitud de la última palabra de la cadena. Si no hay una última palabra, devuelva 0.

Una palabra se refiere a la subcadena más grande que consta solo de letras y no contiene caracteres de espacio.

Ideas para resolver problemas

Esta es una pregunta relativamente simple. Atraviesa directamente desde el último dígito de la cadena. Cuando se encuentra una letra, la longitud es res + 1. Si es un espacio, el resultado es res. Sin embargo, hay un caso: " a ", que contiene una palabra, pero la cadena termina con un espacio. Así que agregue otra bandera. Cuando la bandera es 0, significa que no se encuentra ninguna palabra, y cuando es 1, significa que se encuentra una palabra. Entonces el resultado res se devuelve solo cuando la bandera == 1 y el carácter actual es un espacio.

class Solution {
    
    
    public int lengthOfLastWord(String s) {
    
    
        int res =0;
        int n = s.length();
        int flag = 0;//flag为0表示没有单词,为1表示有单词
        for(int i=n-1;i>=0;i--){
    
    
            if(s.charAt(i) != ' '){
    
    
                res++;
                flag = 1;
            }
            else if(flag == 1 && s.charAt(i) == ' ')
                return res;
        }
        return res;
    }
}

mas uno

Descripción del problema

Dado un número entero no negativo representado por una matriz de enteros no vacía, agregue uno al número.

El dígito más alto se almacena en la primera posición de la matriz y cada elemento de la matriz solo almacena un número.

Puede suponer que, además del entero 0, este número entero no comienza con cero.

Ideas para resolver problemas

El problema que necesita ser resuelto es el problema de acarreo. Si el dígito no lleva, será directamente +1, si se genera el acarreo, el dígito anterior será +1, si el dígito más alto tiene acarreo, un es necesario abrir el espacio y el dígito más alto se establece en 1, que es El cálculo de la fórmula de la columna cuando se simula la operación manual se puede realizar en el ciclo while.

class Solution {
    
    
    public int[] plusOne(int[] digits) {
    
    
        int n = digits.length;
        int i = n-1;
        while(true){
    
    
            if(digits[i]+1 == 10){
    
    
                digits[i] = 0;
                i--;
                if(i<0){
    
    //最高位需要进位
                    digits = new int[n+1];
                    digits[0] = 1;
                    return digits;
                }
            }else{
    
    
                digits[i]++;
                break;
            }
        }
        return digits;
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_43424037/article/details/114640398
Recomendado
Clasificación