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
Directorio de artículos
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
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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。