Oferta de Jianzhi 14- I. Cortar la cuerda

Oferta de Jianzhi 14- I. Cortar la cuerda

Descripción del Título

Inserte la descripción de la imagen aquí

Ideas para resolver problemas

dp

Solución de referencia: programación dinámica, matemáticas

Esta pregunta es una variante de 343. Integer Split , la pregunta oficial se explica claramente.

Tiempo o (n²), espacio o (n)

class Solution {
    
    
    public int cuttingRope(int n) {
    
    
        //定义:dp[i]表示对于长度为i的绳子,剪成至少两段后可能的最大乘积
        int[] dp = new int[n + 1];
        //base case
        dp[1] = 1;

        for (int i = 2; i <= n; i++) {
    
    
            for (int j = 1; j < i; j++) {
    
    
                //两种选择:每次将 i - j 剪出来后,剩下的 j 的部分选择不剪或继续剪
                dp[i] = Math.max(dp[i], Math.max(j * (i - j), dp[j] * (i - j)));
            }
        }
        return dp[n];
    }
}

matemáticas

Conclusión: cuanto más cerca esté el entero dividido de e, mayor será el producto.

Inserte la descripción de la imagen aquí
Categorice la discusión de acuerdo con los resultados de n% 3: (suponga que m = n / 3)

  • Si n% 3 == 0, divídalo en m 3
  • Si n% 3 == 1, divídalo en m-1 3 y 2 2
  • Si n% 3 == 2, divida en m 3 y 1 2

La discusión anterior es cuando n ≥ 4, y no es aplicable cuando n ≤ 3, por lo que debe discutirse por separado:

  • Si n = 2, hay 2 = 1 + 1 y el producto máximo es 1.
  • Si n = 3, hay 3 = 1 + 1 + 1 = 1 + 2 dos casos, el producto máximo es 2,
    por lo tanto, se puede combinar en el producto máximo = n-1

Tiempo o (1), espacio o (1)

consejos: para operaciones con números enteros y restantes, los números enteros que no superen el número de máquinas se pueden considerar como O (1);

class Solution {
    
    
    public int cuttingRope(int n) {
    
    
        if (n <= 3) {
    
    
            return n - 1;
        }
        int quotient = n / 3;
        int remainder = n % 3;
        if (remainder == 0) {
    
    
            return (int)Math.pow(3, quotient);
        } else if (remainder == 1) {
    
    
            return (int)Math.pow(3, quotient - 1) * 4;
        } else {
    
    
            return (int)Math.pow(3, quotient) * 2;
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/cys975900334/article/details/114788138
Recomendado
Clasificación