算法编程题-分糖果

题目:

有N个小朋友站在一排,每个小朋友都有一个评分

你现在要按以下的规则给孩子们分糖果:

每个小朋友至少要分得一颗糖果

分数高的小朋友要他比旁边得分低的小朋友分得的糖果多

你最少要分发多少颗糖果?

分析:

首先初始化每个人一个糖果,然后这个算法需要遍历两遍,第一遍从左向右遍历,如果右边的小盆友的等级高,等加一个糖果,这样保证了一个方向上高等级的糖果多。然后再从右向左遍历一遍,如果相邻两个左边的等级高,而左边的糖果又少的话,则左边糖果数为右边糖果数加一。最后再把所有小盆友的糖果数都加起来返回即可。

答案:

import java.util.*;

public class Solution {

    /**

    *

    * @param ratings int整型一维数组

    * @return int整型

    */

    public int candy (int[] ratings) {

        int[] nums = new int[ratings.length];

        for (int i = 0; i < ratings.length; i++) {

            nums[i] = 1;

        }

        for (int i = 0; i < ratings.length - 1; i++) {

            if (ratings[i + 1] > ratings[i]) {

                nums[i + 1] = nums[i] + 1;

            }

        }

        for (int i = ratings.length - 1; i > 0; i--) {

            if (ratings[i - 1] > ratings[i]) {

                nums[i - 1] = Math.max(nums[i] + 1, nums[i - 1]);

            }

        }

        int res = 0;

        for (int i = 0; i < ratings.length; i++) {

            res = res + nums[i];

        }

        return res;

    }

}

参考链接:https://www.cnblogs.com/shixiangwan/p/6734426.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容