贪心中的分配问题 | leetcode135. 分发糖果

题目描述

初始化一个全1的数组,用于存放每个孩子得到的糖果数量。先从左到右遍历ratings,如果右边元素的值>左边元素,右边元素对应的索引值=左边元素的索引值+1;再从右到左遍历,如果左边元素的值<右边元素,且右索引不小于左索引 (个人认为这里体现的就是贪心思想,从左到右遍历完只是初步分配的结果,要保证“至少”,就要满足一定的条件),右边对应的索引值=左边+1。

C++:

class Solution {
public:
    int candy(vector& ratings) {
        int n = ratings.size();
       
        int candy[n];
        int sum = 0;
        for(int p=0; p candy(n, 1);

        // 从前往后遍历
        for(int i=0; i0;j--){
            if( ratings[j] < ratings[j-1] && candy[j] >= candy[j-1]){
                candy[j-1] = candy[j]+1;
            }
        }
        for(int k=0; k

你可能感兴趣的:(贪心中的分配问题 | leetcode135. 分发糖果)