LeetCode135.分发糖果

LeetCode135.分发糖果(动态规划)

初始每人一个糖果,正向遍历,前后两个分数比较,如果后一个比前一个高则res[i] = res[i -1] + 1,同理反向遍历一次得出结果。

class Solution {
public:
	int candy(vector<int>& ratings) {
		vector<int> tp = ratings;
		std::sort(tp.begin(), tp.end());
		vector<int> res(ratings.size(), 1);
		for (int i = 1; i < ratings.size(); i++) {
			if (ratings[i] > ratings[i - 1] && res[i] <= res[i - 1]) {
				res[i] = res[i - 1] + 1;
			}
		}
		for (int i = ratings.size() - 2; i >= 0; i--) {
			if (ratings[i] > ratings[i + 1] && res[i] <= res[i + 1]) {
				res[i] = res[i + 1] + 1;
			}
		}
		return std::accumulate(res.begin(), res.end(), 0); //头文件<numeric>
	}
};

猜你喜欢

转载自blog.csdn.net/Gentlemanman/article/details/83956165