代码随想录补打卡 135 分发糖果

文章提供了两个Go语言实现的函数,分别解决糖果分配问题和柠檬水找零问题。在糖果问题中,通过两次遍历确保每个孩子至少获得一个糖果,同时满足右侧或左侧孩子评分更高时糖果数更多。在柠檬水找零问题中,根据5元、10元和20元的支付处理找零逻辑,确保每次交易都能正确完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下

func candy(ratings []int) int {

          need := make([]int ,len(ratings)) 

          sum := 0 

          for i := 0 ; i < len(ratings) ; i++ {   //初始化每个孩子的糖果数为1 

              need[i] = 1  

          }

          for i := 0 ; i < len(ratings)-1 ; i++ {  //从左往右遍历,如果右边比左边大,则右边加1 

              if ratings[i] < ratings[i+1] {  //因为开始比较的是rating[0]和rating[1],所以循环结束是倒数第二个元素

                  need[i+1] = need[i] + 1 

              }

          }

          for i := len(ratings)-1 ; i > 0 ; i-- {  //同理从右往左遍历

              if ratings[i-1] > ratings[i] {

                  need[i-1] = max(need[i-1],need[i]+1)

                 

              }

          }

          for i := 0 ; i < len(ratings) ; i++ { //遍历结束求总和 

              sum += need[i]

          }

          return sum 

}

func max(a,b int) int {

    if a > b {

        return a 

    }else {

        return b 

    }

860 柠檬水找零 

代码如下

func lemonadeChange(bills []int) bool {

           money5 := 0 

           money10 := 0 

        一共分为三种情况
 

           for i := 0 ; i < len(bills) ; i++ {

               if bills[i] == 5 {  // 第一种如果是5元则直接5元数量加1

                  money5 ++ 

               }

               if bills[i] == 10 {  //如果是10元

                   money10 ++ 

                   if money5 >= 1 { //则判断5元数量是否大于等于1,如果大于等于1说明可以找零,5元数量减1

                       money5-- 

                   }else {  //如果五元数量不够,直接return false

                       return false 

                   }

                   

               }

               if bills[i] == 20 {  //如果是20元,找零有两种情况

                   if money10 >= 1 && money5 >= 1  { //一种是10元大于等于1 ,5元大于等于1

                       money10--

                       money5--

                   }else if money5 >= 3 { //另外一种是5元数量大于等于3

                       money5 -= 3

                   }else {

                       return false 

                   }

               }

           }

           return true 

}


 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值