派分糖果

派分糖果

题目描述
有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了

posted @ 2020-03-21 11:39  别再闹了  阅读(106)  评论(0)    收藏  举报