2020-12-24 Deducción de la fuerza de participación de hoy == 135. Distribuir dulces

Fuente: Enlace: https://leetcode-cn.com/problems/candy Declaración: Si violé los derechos de alguien, comuníquese conmigo y lo eliminaré.
Bienvenidos expertos para rociarme

tema

El maestro quiere distribuir dulces a los niños, N niños se paran en línea recta y el maestro calificará a cada niño con anticipación según su desempeño.
Debe ayudar al maestro a distribuir dulces a estos niños de acuerdo con los siguientes requisitos: a
cada niño se le asigna al menos 1 dulce.
Entre los niños adyacentes, el niño con la puntuación más alta debe recibir más dulces.
Entonces, ¿cuántos dulces debería preparar el maestro?

Ejemplo 1:
Entrada: [1,0,2]
Salida: 5
Explicación: Puede distribuir 2, 1 y 2 caramelos a estos tres niños.

Ejemplo 2:
Entrada: [1,2,2]
Salida: 4
Explicación: Puede distribuir 1, 2 y 1 caramelo a los tres niños.
El tercer niño solo recibe 1 caramelo, que ya cumple las dos condiciones anteriores.

Mi código se asigna desde el principio y desde el final hasta el principio

[1,2,87,87,87,2,1] como ejemplo
Distribución de principio a fin: [1,2,87,87,87,2,1]
Primero uno por persona [1,1,1, 1,1, 1,1]
a 2, mayor que 1, [1,2,1,1,1,1,1]
a 87, mayor que 2 [1,2,3,1,1,1,1 ]
a 87, no grande [1,2,3,1,1,1,1]
a 87, no grande [1,2,3,1,1,1,1]
a 2, no grande [1,2 , 3, 1,1,1,1]
a 1, no grande [1,2,3,1,1,1,1]
… La
idea anterior se puede repetir de principio a fin [1,2,3,1 , 3, 2,1】

//135. 分发糖果
class Solution {
    public int candy(int[] ratings) {
        int len = ratings.length;
        int[] cal = new int[len];
        Arrays.fill(cal,1);

        for(int i=1;i<len;++i){
     
     
            if(ratings[i]>ratings[i-1] && cal[i]<=cal[i-1]){
                cal[i] = cal[i-1] +1;
            }
        }

        for(int i=len-2;i>=0;--i){
            if(ratings[i]>ratings[i+1] && cal[i]<=cal[i+1]){
                cal[i] = cal[i+1]+1;
            }
        }
        // System.out.println(Arrays.toString(cal));
        int ret=0;
        for(int c : cal) ret += c;
        return ret;
    }
}
Código del gran Dios: jyd https://leetcode-cn.com/problems/candy/solution/candy-cong-zuo-zhi-you-cong-you-zhi-zuo-qu-zui-da-/

La idea es similar
Inserte la descripción de la imagen aquí

class Solution {
    public int candy(int[] ratings) {
        int[] left = new int[ratings.length];
        int[] right = new int[ratings.length];
        Arrays.fill(left, 1);
        Arrays.fill(right, 1);
        for(int i = 1; i < ratings.length; i++)
            if(ratings[i] > ratings[i - 1]) left[i] = left[i - 1] + 1;
        int count = left[ratings.length - 1];
        for(int i = ratings.length - 2; i >= 0; i--) {
            if(ratings[i] > ratings[i + 1]) right[i] = right[i + 1] + 1;
            count += Math.max(left[i], right[i]);
        }
        return count;
    }
}

作者:jyd
链接:https://leetcode-cn.com/problems/candy/solution/candy-cong-zuo-zhi-you-cong-you-zhi-zuo-qu-zui-da-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Supongo que te gusta

Origin blog.csdn.net/qq_45531729/article/details/111649461
Recomendado
Clasificación