Leetcode: Candy

来源:互联网 发布:新华三comware 知乎 编辑:程序博客网 时间:2024/05/16 11:38

There are N children standing in a line. Each child is assigned a rating value.

You are giving candies to these children subjected to the following requirements:

  • Each child must have at least one candy.
  • Children with a higher rating get more candies than their neighbors.

What is the minimum candies you must give?

从左到右扫描一遍,再从右到左扫描一遍。Tricky的地方是相等的rating可以分到的糖果不一样多。

class Solution {public:    int candy(vector<int> &ratings) {        int size = ratings.size();        vector<int> candies(size, 1);        // Scan from left to right        for (int i = 1; i < size; ++i) {            if (ratings[i] > ratings[i-1]) {                candies[i] = candies[i-1] + 1;            }        }        // Scan from right to left        int result = candies[size - 1];        for (int i = size - 2; i >= 0; --i) {            if (ratings[i] > ratings[i+1]) {                candies[i] = max(candies[i], candies[i+1] + 1);            }            result += candies[i];        }                return result;    }};

=====================第二次====================

class Solution {public:    int candy(vector<int> &ratings) {        vector<int> candies(ratings.size(), 1);        for (int i = 1; i < ratings.size(); ++i) {            if (ratings[i] > ratings[i-1]) {                candies[i] = candies[i-1] + 1;            }        }                for (int i = ratings.size() - 2; i >= 0; --i) {            if (ratings[i] > ratings[i+1]) {                candies[i] = max(candies[i], candies[i+1] + 1);            }        }                int result = 0;        for (int i = 0; i < candies.size(); ++i) {            result += candies[i];        }                return result;    }};


0 0