派分糖果
派分糖果
题目描述
有N个孩子站成一排,每个孩子有一个分值。给这些孩子派发糖果,需要满足如下需求:
1、每个孩子至少分到一个糖果
2、分值更高的孩子比他相邻位的孩子获得更多的糖果
求至少需要分发多少糖果?
输入描述:
0,1,0
输出描述:
4
示例1
输入
复制
5,4,1,1
输出
复制
7
对于每一个元素,需要考虑的只有其左邻居和右邻居,我们可以初始化各个节点的值为1,先从左到右遍历,考虑其左邻居;再从右到左遍历,考虑其右邻居
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
String temp=sc.next();
String[]nums=temp.split(",");
int count=nums.length;
if(count==0){
System.out.println(0);
return;
}
else if(count==1){
System.out.println(1);
return;
}
int[]scores=new int[count];
int[]list=new int[count];
for(int i=0;i<count;i++){
scores[i]=1;
list[i]=Integer.valueOf(nums[i]);
}
for(int i=1;i<count;i++){
if(list[i-1]<list[i]){
scores[i]=scores[i-1]+1;
}
}
for(int i=count-2;i>=0;i--){
if(list[i]>list[i+1]){
scores[i]=Math.max(scores[i],scores[i+1]+1);
}
}
int ans=0;
for(int i=0;i<count;i++){
ans+=scores[i];
}
System.out.println(ans);
}
}
特别注意,这里不能用:
while(sc.hasNext()){
list.add(sc.nextInt());
count++;
}
这样的用法会让输入流一直不终止,也就是一直阻塞在输入环节,只能选择输入一行然后分裂字符串的办法
况且注意审题,输入之间是有逗号隔开的,更必须用split了