LeetCode题目-135

首页 编程分享 LEET_CODE 正文

leetCode 转载 编程分享 2024-01-13 19:16:07

简介 LeetCode题目-135


✏Leetcode基础刷题之(135. Candy)


✏描述

一个经典的发🍬问题,一排小朋友,每一个小朋友都有一个权重值,你需要给这些小孩发糖果,首先至少每一个小孩都会分到一个糖果,并且权重大的小朋友糖果会多余相邻小朋友拥有的糖果(也就是至少多一个),求最少需要几个糖果


✏题目实例

✏题目分析

每一种解法就是,首先每个人手上都至少有一个糖果,相邻意味着左右两边,所以我们可以先出左边遍历到右边对比,只要右边的比左边的大,那么右边的糖果就是左边的加1,然后再从右边历到左边,只要左边的比右边权重大,那么当前位置上的小孩的糖果数就是(取右边的加1和之前左边遍历到右边位置的最大值。),不好理解的话举一个场景。

随便举个例子 比如当前三个小朋友的权重是   10  5 15
从左往右遍历的话糖果数    单位个         1  1  2
从右往左遍历的话糖果数    单位个         2  1  1
最终至少需要糖果                       2+1+2 =5

    /**
     * @param Integer[] $ratings
     * @return Integer
     */
    function candy($ratings) {
        $sum=0;
        
        for($i=0;$i < count($ratings);$i++){
            $nums[$i]=1;
        }
        
        for($i=0;$i < count($ratings);$i++){
            if($ratings[$i+1]>$ratings[$i]){
                $nums[$i+1]=$nums[$i]+1;
            }
        }
        
        for($i=count($ratings)-1;$i>=0;$i--){
            if($ratings[$i-1]>$ratings[$i]){
                $nums[$i-1]=max($nums[$i-1],$nums[$i]+1);
            }
        }
        
        for($i=0;$i < count($nums);$i++){
            $sum +=$nums[$i];
        }
        return $sum;
    }



转载链接:https://leetcode.cn/


Tags:


本篇评论 —— 揽流光,涤眉霜,清露烈酒一口话苍茫。


    声明:参照站内规则,不文明言论将会删除,谢谢合作。


      最新评论




ABOUT ME

Blogger:袅袅牧童 | Arkin

Ido:PHP攻城狮

WeChat:nnmutong

Email:nnmutong@icloud.com

标签云