LeetCode每日一题:分糖果II | 数组+简单模拟

嗨!👋 今天我们来聊聊LeetCode上的一个编程问题:分糖果II。这个问题虽小,但涉及到数组的基本操作和循环控制,非常适合新手和中级编程者练手。接下来让我们一起深入探讨解题思路和背后的逻辑!🚀

问题概述📝

在这个问题中,我们需要将指定数量的糖果分配给一队人,每个人按顺序接收糖果,每轮分配的糖果数量依次递增,直到所有糖果分完。函数原型是:distributeCandies(candies: Int, num_people: Int): Array[Int]

解题思路💡
  1. 初始化数组 :我们定义一个数组 distribution 来记录每个人获得的糖果数。数组的初始化是基于人数的,每个元素初始值为0。

  2. 分配糖果 :通过 while 循环控制糖果的分配过程,只要还有剩余糖果,就继续分配。每个人按顺序接收糖果,数量从1开始逐个递增。

  3. 确保糖果正确分配:在每一轮的分配中,如果剩余的糖果足够,则按递增顺序分配;如果不足,将剩余的所有糖果分给当前的人,并结束分配。

为什么这样做?🤔
  • 数组的使用:数组是解决这类问题的理想结构,因为它允许我们以O(1)的时间复杂度访问和更新每个人的糖果数。
  • 循环控制:通过循环我们能精确控制每个人应得的糖果数,同时保证糖果分配的公平性和程序的效率。
  • 条件判断:精确的条件判断确保了即使在糖果数不足时,也能正确地分配剩余糖果,避免了程序错误。
Scala代码实现🖥️
Scala 复制代码
object Solution {
  def distributeCandies(candies: Int, num_people: Int): Array[Int] = {
    val distribution = Array.fill(num_people)(0)
    var remainingCandies = candies
    var give = 0

    while (remainingCandies > 0) {
      for (i <- 0 until num_people if remainingCandies > 0) {
        give += 1
        if (give < remainingCandies) {
          distribution(i) += give
          remainingCandies -= give
        } else {
          distribution(i) += remainingCandies
          remainingCandies = 0
        }
      }
    }

    distribution
  }
}
标签🏷️

#LeetCode #编程挑战 #数组操作 #循环控制 #条件判断 #Scala编程 #算法

相关推荐
CM莫问2 小时前
<论文>(微软)避免推荐域外物品:基于LLM的受限生成式推荐
人工智能·算法·大模型·推荐算法·受限生成
康谋自动驾驶3 小时前
康谋分享 | 自动驾驶仿真进入“标准时代”:aiSim全面对接ASAM OpenX
人工智能·科技·算法·机器学习·自动驾驶·汽车
C++ 老炮儿的技术栈4 小时前
什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
c语言·开发语言·c++·qt·算法
yychen_java5 小时前
R-tree详解
java·算法·r-tree
MarkHard1235 小时前
Leetcode (力扣)做题记录 hot100(62,64,287,108)
算法·leetcode·职场和发展
一只鱼^_6 小时前
牛客练习赛138(首篇万字题解???)
数据结构·c++·算法·贪心算法·动态规划·广度优先·图搜索算法
一只码代码的章鱼6 小时前
Spring的 @Validate注解详细分析
前端·spring boot·算法
邹诗钰-电子信息工程6 小时前
嵌入式自学第二十一天(5.14)
java·开发语言·算法
↣life♚7 小时前
从SAM看交互式分割与可提示分割的区别与联系:Interactive Segmentation & Promptable Segmentation
人工智能·深度学习·算法·sam·分割·交互式分割
zqh176736464697 小时前
2025年阿里云ACP人工智能高级工程师认证模拟试题(附答案解析)
人工智能·算法·阿里云·人工智能工程师·阿里云acp·阿里云认证·acp人工智能