[Leetcode] Candy

4806 단어 LeetCode
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?
     
    먼저 왼쪽에서 오른쪽으로 한 번 스캔하고 만약에 현재 소분우가 왼쪽의 소분우보다 평점이 높으면 그에게 사탕을 한 알 더 준 다음에 오른쪽에서 왼쪽으로 한 번 스캔한다.
     
     1 class Solution {
    
     2 public:
    
     3     int candy(vector<int> &ratings) {
    
     4         int res = 0;
    
     5         int n = ratings.size();
    
     6         if (n == 0) {
    
     7             return res;
    
     8         }
    
     9         int *t = new int[n];
    
    10         for (int i = 0; i < n; ++i) {
    
    11             t[i] = 1;
    
    12         }
    
    13         for (int i = 1; i < n; ++i) {
    
    14             if (ratings[i] > ratings[i-1]) {
    
    15                 t[i] = t[i-1] + 1;
    
    16             }
    
    17         }
    
    18         for (int i = n - 1; i >= 1; --i) {
    
    19             if (ratings[i] < ratings[i-1]) {
    
    20                 t[i-1] = (t[i] + 1) > t[i-1] ? (t[i] + 1) : t[i-1];
    
    21             }
    
    22         }
    
    23         for (int i = 0; i < n; ++i) {
    
    24             res += t[i];
    
    25         }
    
    26         return res;
    
    27     }
    
    28 };

    좋은 웹페이지 즐겨찾기