leetcode--分发糖果问题

  老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:
   每个孩子至少分配到1个糖果。
   相邻的孩子中,评分高的孩子必须获得更多的糖果。
  那么这样下来,老师至少需要准备多少颗糖果呢?
leetcode--分发糖果问题_第1张图片
代码如下:

#include
#include
using namespace std;

int fappen(vector<int> &vec)
{
    int n = vec.size();
    if (0 >= n) return 0;
    vector<int> left(n);
    vector<int> right(n);

    for (int i = 1; i <= n - 1; ++i)
    {
       if (vec[i] > vec[i - 1])
       {
          left[i] =left[i-1]+1;
       }
    }
    for (int i = n - 2; i >= 0; --i)
    {
       if (vec[i] > vec[i + 1])
       {
          right[i] =right[i+1]+1;
       }
    }
    int count = 0;
    for (int i = 0; i < n; ++i)
    {
       if (left[i] > right[i])
       {
          count += left[i];
       }
       else
       {
          count += right[i];
       }
     }
     return  count + n;
}
int main()
{
    vector<int> vec;
    int ar[] = { 1,3,2,2,1 };
    int n = sizeof(ar) / sizeof(ar[0]);
    vec.insert(vec.begin(), ar, ar + n);
    int mink = fappen(vec);
    cout << mink << endl;
    return 0;
}

你可能感兴趣的:(算法题)