【leetcode】Candy

5658 단어 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?
    원래 물문제를 찾아서 닦는 태도로 이 문제를 선택했는데 여러 가지 잘못이 답답해...(시작하는 태도 때문에 그런가 봐요.)쓸데없는 소리 하지 말고 문제를 봐라.
    이 문제의 뜻은 정말 잘 모르겠어요. 처음에 제 이해는 n개의 번호마다 적어도 설탕을 하나씩 나누고, 순위가 높은 것은 순위보다 낮은 것이 많아서 위의 순서대로 하면 된다고 생각했어요. nlogn의 복잡도는 받아들일 수 있을 거예요.그래서 WA에 미치기 시작했다. 다음과 같은 두 가지 이유가 있다. 첫째, rating에 대한 이해가 잘못된 것이다. 사실 rating은 숫자가 작을수록 높아야 한다. 그리고 더욱 은밀한 것이 하나 있다. 바로 그 위에 있는 두 개의 requirement는 우리를 오도하기 쉽다. 둘째, 사실은 모든 rating이 높은 사람은 이웃보다 높아야 한다는 것이다.즉, 양쪽과 같은 우리에게 하나를 분배하면 된다는 것이다.
    그러나 나중에 제목을 이해하고 시간이 초과되었는데 nlogn의 알고리즘이 아직 우수하지 않은 것 같아서 정렬을 버렸다.문제의 뜻을 정확히 이해하는 경우 바로 두 번 훑어보고 기록하면 된다.
    여기에 몇 조의 테스트 데이터를 제시하고 이곳에 함께 걸려 있는 사람들도 도와준다.
    case1:input:[2,3,2]
        output:4
    case2:input:[1,2,2,2,3,2,1]
               output:11
    코드는 다음과 같습니다.
     1 class Solution {
    
     2 public:
    
     3     int candy(vector<int> &ratings) {
    
     4         if(ratings.empty()){
    
     5             return 0;
    
     6         }
    
     7         if(ratings.size()==1){
    
     8             return 1;
    
     9         }
    
    10         int l=ratings.size();
    
    11         int* temp=new int[l];
    
    12         temp[0]=1;
    
    13         for(int i=1;i<l;i++){
    
    14             if(ratings[i]>ratings[i-1]){
    
    15                 temp[i]=temp[i-1]+1;
    
    16             }
    
    17             else{
    
    18                 temp[i]=1;
    
    19             }
    
    20         }
    
    21 
    
    22         int ans=temp[l-1];
    
    23         for(int i=l-2;i>=0;i--){
    
    24             if(ratings[i]>ratings[i+1]&&temp[i+1]+1>temp[i]){
    
    25                 temp[i]=temp[i+1]+1;
    
    26             }
    
    27             ans+=temp[i];
    
    28         }
    
    29         return ans;
    
    30     }
    
    31 };

    좋은 웹페이지 즐겨찾기