135. Candy 分糖果

135. Candy 分糖果

int candy(vector<int>& rate) {
    int len=rate.size();
    int res=len;
    if (len<=1) return res;
    vector<int> a(len, 0);
	// 保证右边的邻居一定比中间的大
    for(int i=1;i<len;++i) {
        if (rate[i]>rate[i-1])
            a[i]=a[i-1]+1;
    }

    for(int i=len-1;i>0;--i) {
		// 保证左边的邻居一定比中间的大
        if (rate[i-1]>rate[i])
            a[i-1]=max(a[i-1], a[i]+1);	// 用 max 因为可能会破坏右限制
    }

    for(auto n : a)
        res+=n;
    return res;
}

#greedy