LeetCode 1103.分糖果 II(C语言)

1103.分糖果 II

Description


排排坐,分糖果。

我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。

给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。

然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。

重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖果数不够(不比前一次发出的糖果多),这些糖果也会全部发给当前的小朋友。

返回一个长度为 num_people、元素之和为 candies 的数组,以表示糖果的最终分发情况(即 ans[i] 表示第 i 个小朋友分到的糖果数)。

Analyze


这题题目没有歧义,就是给一个数组的长度 num_people 和总数 candies,要求将 candies 按1,2,3...这样循环发给数组中的每一个元素直到 candies 为0。
下面是题目给的函数:

结合题意应该不难理解

  • @param candies 糖果总数
  • @param num_people 总人数
  • @param returnSize 返回的数组长度

根据题意知道 returnSize 里表示的长度应该和 num_people 一样, 这道题唯一难点就是(其实算不上难点)当到了数组最后时怎么倒回开头,这里有两个办法:

  • 一个是加一个判断,若到了最后,把下标重新赋值为0
  • 第二种是用取余符号

Realization


  • 程序开头有提示返回的数组必须要自己申请空间


  • 申请完空间应该先初始化为0


  • 主要算法
  • 这里利用的是取余来保证数组不会越界
  • 最后返回数组就可以了
  • 提交


Dictionary


这题相对来说其实算很简单的题目了,基本不涉及什么算法,也实在没什么好说的,关于主要算法的实现,也可以用 while 循环来实现,用 index 来表示数组的下标,用另一个变量 n 来表示当前需要分配的糖果数,最后的跳出循环条件改为 candies <= nbreak 出循环就行了,这样写会比上面的简洁许多。

附源代码


/*
 * @lc app=leetcode.cn id=1103 lang=c
 *
 * [1103] ??? II
 */

// @lc code=start

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* distributeCandies(int candies, int num_people, int* returnSize){
    *returnSize = num_people;
    int* a = (int*)malloc(sizeof(int) * num_people);
    for(int i = 0; i < num_people; ++i)
    {
        a[i] = 0;
    }
    for(int i = 0; candies>0; ++i)
    {
        if(candies - 1 - i <= 0)
        {
            a[i%num_people] += candies;
        }
        else
        {
            a[i%num_people] = a[i%num_people] + 1 + i;
        }
        candies = candies - 1 - i;
    }
    return a;
}



// @lc code=end


    

    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 994.腐烂的橘子 Description 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格...
    狂吃不胖温同学阅读 9,892评论 0 1
  • Vue总结# 渐进式js框架 组成 模板 指令:将控制和·html联系在一起html内容 样式 控制 data:数...
    一只小丫丫阅读 741评论 0 0
  • ——献给WAC 我和她坐了下来,准备吃点什么。有些话我总是说不出口,而现在我才开始思考,和她面对面吃饭...
    Older漫阅读 1,417评论 0 0
  • 1.不要总是被动地等待别人问你的意见,在一个扁平化的团队中,你有什么想法,你想帮到团队,一定要第一时间积极踊跃说出...
    蟋蟀王阅读 3,973评论 0 1
  • 作为创业者,必须有一个特质,就是无论面临什么情况,无论受伤多大,面前有多么严峻的问题, 你必须学会自愈,超强的自愈...
    胖胖环球好货阅读 988评论 0 3