力扣刷题记录83.1-----135. 分发糖果

目录

  • 一、题目
  • 二、代码
  • 三、运行结果


一、题目

力扣刷题记录83.1-----135. 分发糖果_第1张图片

二、代码

class Solution 
{
public:
    //版本1.0  :遗憾的是 暴力解法失败了
    //局部最优
    //除了基本逻辑  我觉得 一轮一轮顺着发糖果效率更高  不用去找全局最小值
    // int candy(vector& ratings)
    // {
    //     int i,j;
    //     vector candys;
    //     int operation_flag=1;
    //     int return_num=0;

    //     if(ratings.size()==1) return_num=1;
    //     else
    //     {
    //         for(i=0;i
            
    //         //每一轮补发糖果  直到不再需要补发未知
    //         while(operation_flag)
    //         {
    //             operation_flag=0;   //每一轮开始清零
    //             for(i=0;i
    //             {

    //                 if(i==0)
    //                 {
    //                     if(ratings[0]>ratings[1]&&candys[0]<=candys[1])   //评分高 糖果小于等于
    //                     {
    //                         candys[0]++;
    //                         operation_flag=1;
    //                     }
    //                 }
    //                 else if(i==candys.size()-1)
    //                 {
    //                     if(ratings[candys.size()-1]>ratings[candys.size()-2]&&candys[candys.size()-1]<=candys[candys.size()-2])
    //                     {
    //                         candys[candys.size()-1]++;
    //                         operation_flag=1;
                            
    //                     }
    //                 }
    //                 else
    //                 {
    //                     if( (ratings[i]>ratings[i-1]&&candys[i]<=candys[i-1]) || (ratings[i]>ratings[i+1]&&candys[i]<=candys[i+1])     )
    //                     {
    //                          candys[i]++;
    //                          operation_flag=1;
    //                     }
    //                 }

    //             }
    
    //         }
    //         for(i=0;i

    //     }

        
    //     return return_num;
    // }



    //左边扫一次 右边扫一次  
    //核心:第二轮只是补充关系 不破坏稳定性
    int candy(vector<int>& ratings)
    {
        int i,j;
        int return_num=0;
        vector<int> candys(ratings.size(),1);

        //for(i=0;i
         
        for(i=1;i<candys.size();i++)   //左侧
        {
            if(ratings[i]>ratings[i-1])
            {
              candys[i]=candys[i-1]+1;
            }
        }

        for(i=candys.size()-2;i>=0;i--)  //右侧
        {
            if(ratings[i]>ratings[i+1])
            {
              candys[i]=max(candys[i],candys[i+1]+1);
            }
        }

        //for(i=0;i
        //std::cout<

        for(i=0;i<candys.size();i++) return_num+=candys[i];

        return return_num;
       
    }
};

三、运行结果

力扣刷题记录83.1-----135. 分发糖果_第2张图片

你可能感兴趣的:(#,leetcode,算法,c++)