zoukankan      html  css  js  c++  java
  • LeetCode之小孩分糖果

    给定一群站好队的小孩而且按某项分值排名(姑且如果为年龄吧),年龄大的要比他身边年龄小的拿的糖要多。求怎么分配糖果使得分配的糖果数最少。

    用一个数组从左到右再从右到左的遍历,向前遍历时若右边的比左边的大则其值为前一个糖果数+1,向后遍历时则推断假设比后面的小孩的年龄要大且糖果数比其还少则更改其糖果数为后面小孩分的糖果数+1.

    详细描写叙述代码:

    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    int candy(vector<int> &a){
         int len=a.size();
       if(len==0||len==1)
       return len;
       
       int sum=0;
       int *candys = new int[len];
       candys[0]=1;
       for(int i=1;i<len;i++)
       {
         if(a[i]>a[i-1])
          candys[i]=candys[i-1]+1;
         else 
          candys[i]=1;
       }
       sum=candys[len-1];
       for(int i=len-2;i>=0;i--)
       {
          if( a[i]>a[i+1] && ( candys[i+1]+1 > candys[i] ))
          candys[i]=candys[i+1]+1;
          sum+=candys[i];
       }
       return sum;
    }
    
    int main()
    {
      int Array[]={4,2,3,4,1};
      vector<int> c(Array,Array+5);  
      cout<<candy(c)<<endl;
    
    }


  • 相关阅读:
    C++链式队列基本操作
    C++链栈基本操作
    C++顺序栈基本操作
    C++链表基本操作
    C/C++/JAVA
    C++操作链表
    How Many Maos Does the Guanxi Worth
    Heavy Transportation
    Frogger
    Til the Cows Come Home(Dijkstra)
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6786036.html
Copyright © 2011-2022 走看看