LeetCode.1103-向人们分发糖果(Distribute Candies to People)

LeetCode --- 1103. Distribute Candies to People 解题思路 We distribute somenumber ofcandies, to a row ofn =num_peoplepeople in the following way: We then give 1 candy to the first person, 2 candies to the second person, and so on until we givencandies to the last person. Then, we go back to the start of... 阅读详情

这是小川的第393次更新,第425篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第256题(顺位题号是1103)。我们通过以下方式向一排n = num_people个人分发一些糖果:

给第一个人送1个糖果,给第二个人送2个糖果,依此类推,直到我们给最后一个人送糖果。然后,我们回到行的开头,向第一个人提供n + 1个糖果,向第二个人提供n + 2个糖果,依此类推,直到我们向最后一个人提供2 * n个糖果。

这个过程重复进行,直到我们用完糖果。最后一个人将得到所有剩余的糖果(不一定比之前收到的多)。

返回一个数组(长度为num_people,元素总和为candies),代表糖果的最终分配结果。

例如:

输入:candies = 7,num_people = 4
输出:[1,2,3,1]
说明:
第一次,ans [0] + = 1,数组为[1,0,0,0]。
第二次,ans [1] + = 2,数组是[1,2,0,0]。
第三次,ans [2] + = 3,数组是[1,2,3,0]。
第四次,ans [3] + = 1(因为只剩下一个糖果)。
最后数组是[1,2,3,1]。

输入:candies = 10,num_people = 3
输出:[5,2,3]
说明:
第一次,ans [0] + = 1,数组为[1,0,0]。
第二次,ans [1] + = 2,数组为[1,2,0]。
第三次,ans [2] + = 3,数组为[1,2,3]。
第四次,ans [0] + = 4,最后数组是[5,2,3]。

注意:

  • 1 <= candies <= 10^9

  • 1 <= num_people <= 1000

02 第一种解法

暴力解法。

直接使用两层循环,外层控制candies的剩余量,内层循环n次,定义一个变量sum,从1开始自增,代表每次要分出去的糖果数量,内层循环中,每遍历一次,sum加1,同时candies要减去sum,如果最后剩余的糖果小于了本次预计要分配的数量,就将剩余的糖果全给当前这个人,candies为0,循环结束。

public int[] distributeCandies(int candies, int num_people) {
    int[] result = new int[num_people];
    int sum = 1;
    while (candies > 0) {
        for (int i=0; i<result.length; i++) {
            if (candies - sum> 0) {
                result[i] += sum;
                candies -= sum;
                sum++;
            } else {
                result[i] += candies;
                candies = 0;
                break;
            }
        }
    }
    return result;
}

03 第二种解法

我们还可以对第一种解法再优化下,变成一层循环,借助取余来实现。

因为每执行一次从头到尾的分配,都是从第一个人到第n个人,可以利用数组的下标对n取余来替代,其他处理逻辑不变。

public int[] distributeCandies2(int candies, int num_people) {
    int[] result = new int[num_people];
    int sum = 1;
    for (int i=0; candies > 0; i++) {
        if (candies - sum> 0) {
            result[i%num_people] += sum;
            candies -= sum;
            sum++;
        } else {
            result[i%num_people] += candies;
            break;
        }
    }
    return result;
}

04 第三种解法

我们还可以对第二种解法再优化下,省掉循环方法体里面的if判断。

结果数组的索引是从0开始的,代表第一个人,那他被分配的糖果数量是索引值加1,在前面两种解法中,都使用了if判断candies是不是比当前需要分配出去的糖果大,其实就是取两者之间的较小值。

如果candies剩余的数量比当前需要分配出去的糖果数量大,就可以继续分配;如果candies剩余的数量比当前需要分配出去的糖果数量小,说明当前这次分配时最后一次分配,只能将剩余的糖果数量全部分给当前此人了。

public int[] distributeCandies3(int candies, int num_people) {
    int[] result = new int[num_people];
    for (int i=0; candies > 0; i++) {
        result[i%num_people] += Math.min(candies, i+1);
        candies -= i+1;
    }
    return result;
}

05 小结

算法专题目前已连续日更超过八个月,算法题文章262+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

别再被骚扰了!手把手教你彻底卸载阿里云盾(安骑士)并封禁其IP段 本文详细指导如何彻底卸载阿里云盾(安骑士)并封禁其IP段,帮助用户夺回服务器控制权。从识别监控组件到执行官方卸载脚本,再到手动清理残留文件和配置iptables规则,确保完全阻断云盾通信。适用于追求极致性能或需要完全自主控制的环境。 阅读详情

相关推荐

【大模型】一图看懂3D因果卷积!

本文将系统性地介绍从1D到3D的因果卷积原理,通过直观的动图演示帮助读者理解其工作机制,并重点探讨3D因果卷积在大规模视频生成中的独特价值和应用前景。

xian0710830114的专栏 2201

有N个孩子站在一条线上。 每个孩子都被分配一个评分值。你给这些孩子,每个孩子必须至少有一个糖果具有较高评级的儿童比邻居获得更多的糖果。 你必须给予的最低

本题源自LeetCode -------------------------------------------------------------------- 贪心算法 1 初始化给每个孩纸一个糖果  2 从左向右扫描如果评分比前面的高 就比前面的糖果加1 3 从右向左扫描与 如果比前面的评分低,糖果比前面的多,就把前面的糖果变为后面的加1 int candy(vec

i_am_bird的博客 2760

【深度强化学习】(2) Double DQN 模型解析,附Pytorch完整代码

Double DQN 算法是 DQN 算法的改进版本,解决了 DQN 算法过估计行为价值的问题。Double DQN 算法不直接通过最大化的方式选取目标网络计算的所有可能 Q 值,而是首先通过估计网络选取最大 Q 值对应的动作。在 Double DQN 框架中存在两个神经网络模型,分别是训练网络与目标网络。这两个神经网络模型的结构完全相同,但是权重参数不同;每训练一段之间后,训练网络的权重参数才会复制给目标网络。

博观而约取,厚积而薄发 1万+

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

#include <stdio.h> int main() { int a[3][4]={{1,2,3,4},{5,6,1,8},{9,1,11,12}}; int i,j,t=0; for(i=1;i<2;i++) for(j=1;j<3;j++) { if(a[i][j]>a[i][j-1]&&a[i][j]>a[i][j+1]&&a...

weixin_43912065的博客 2万+

[数字电路]用与非门实现BCD译码器驱动数码管

Hello,大家好。这里是xdd_core,好久不见。今天来和大家聊聊大一数字电路课程的一个课设。# Key word:BCD Decoder,Proteus8.x,NAND Gate,Digital Circuit# 流程:Proteus8.x仿真电路并绘制PCB导出Gerber文件打样,最终实物验证。# 以下为我对这个课设的report(里面对整个设计做了详细介绍,并设计了完整的验证电路) 感谢观看,仅供参考,未经作者允许,禁止转载/抄袭,本文已上传至数据库,查重必挂QAQ BCD to 7-Segme

xddcore的博客 6013

FreeRTOS笔记(十五)FreeRTOS总结

文章目录01 - 裸机和FreeRTOS区别1.1 - 裸机1.2 - FreeRTOS1.3 - 区别02 - 对FreeRTOS的感受03 - 推荐 上一文链接:FreeRTOS笔记(十四)[简] 软件定时器、事件组、任务通知 01 - 裸机和FreeRTOS区别   学完FreeRTOS,应该要自己总结一下FreeRTOS和裸机的区别,宏观上说,FreeRTOS是一个运行在裸机上的微内核,...

单眼皮根号三的博客 4115

Bombing HDU, 4022(QQ糖的消法)

题目大意: 给你n个敌人的坐标,再给你m个炸弹和爆炸方向,每个炸弹可以炸横排或竖排的敌人,问你每个炸弹能炸死多少个人。 解题思路: 用map里面嵌套multiset , 1000多ms,还是有点长的,老师说要用list ,不知是否要快点。

Menglei Min 1510

基于YOLO的智能视频监控异常行为检测研究:从算法原理到落地部署的全栈实践

本文深入探讨如何利用 YOLO(You Only Look Once)系列算法构建一套端到端的异常行为检测系统。文章首先回顾 YOLOv8 在时空建模上的局限,然后提出“YOLO-STA(Spatio-Temporal Aggregation)”轻量级改进框架,在公开数据集 UCF-Crime 上将异常行为检测的 mAP@0.5 从 72.4 提升到 80.1;接着给出完整训练、推理、部署的 Python 代码(PyTorch + TensorRT),并介绍如何仅用 4 GB 显存的 Jetson Xavi

博客 1349

2291 糖果堆

题目描述 Description 【Shadow 1】第一题 WJMZBMR买了很多糖果,分成了N堆,排成一列。WJMZBMR说,如果Shadow能迅速求出第L堆到第R堆一共有多少糖果,就把这些糖果都给他。 现在给出每堆糖果的数量,以及每次询问的L和R,你需要帮助Shadow,把每次询问的结果求出来。注意,你不需要考虑糖果被Shadow取走的情况。 输入描述 Input

css 480

网络系统管理专栏-配套练习+知识点详解

网络系统管理专栏-配套练习+知识点详解

bfq05234214的博客 684

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 471

(LeetCode 135) Candy N个孩子站成一排,给每个人设定一个权重

原文:http://www.cnblogs.com/AndyJee/p/4483043.html There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following r...

weixin_34413802的博客 869

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode 1103. Distribute Candies to People (Java版; Easy)

welcome to my blog LeetCode 1103. Distribute Candies to People (Java版; Easy) 题目描述 We distribute some number of candies, to a row of n = num_people people in the following way: We then ...

littlehaes的博客 372

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode | 1103. Distribute Candies to People分糖果 II【Python】

LeetCode 1103. Distribute Candies to People分糖果 II【Easy】【Python】【暴力】 Problem LeetCode We distribute some number of candies, to a row of n = num_people people in the following way: We then give 1 cand...

Wonz 779

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Leetcode【1103】 Distribute Candies to People(Python版)

返回的是一个固定长度的列表,在python中,无法通过像java的初始化数组来实现,那么就必须赋值 ans = [0] * num_people 然后定义一个变量give表示每次给的糖果数,这个数每次都会+1 把give和总人数取余,就是索引,因为要不停的遍历每个孩子,假设4个孩子,索引就是0,1,2,3,0,1,2,3,...... class Solution: def d...

ssjdoudou的博客 4673

Leetcode 1103.分糖果 II(Distribute Candies to People)

Leetcode 1103.分糖果 II 1 题目描述(Leetcode题目链接)   排排坐,分糖果。   我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此...

qq_39378221的博客 298

【Leetcode_easy】1103. Distribute Candies to People

problem 1103.Distribute Candies to People solution:没看明白代码。。。 class Solution { public: vector<int> distributeCandies(int candies, int num_people) { vector<int> res(num...

weixin_30786617的博客 177

LeetCode 1103. 分糖果 II Distribute Candies to People

Table of Contents 一、中文版 二、英文版 三、My answer 四、解题报告 一、中文版 排排坐,分糖果。 我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n颗糖果。 然后,我们再回到队伍的起点,给第一个小朋友 n+ ...

三妹的博客 455

leetcode 1103. Distribute Candies to People 分糖果 II

leetcode 1103. Distribute Candies to People 分糖果 II leetcode 2020年3月 每日一题打卡 题目: 排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一...

weixin_43973433的博客 174

leetcode 1103. Distribute Candies to People 解法 python

一.问题描述 We distribute somenumber ofcandies, to a row ofn =num_peoplepeople in the following way: We then give 1 candy to the first person, 2 candies to the second person, and so on until we give...

CSerwangjun的博客 568

LeetCode 1103. Distribute Candies to People

1103. Distribute Candies to People(分糖果||) 链接:https://leetcode-cn.com/problems/distribute-candies-to-people/ 题目:   排排坐,分糖果。   我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。   给第一个...

weixin_30666753的博客 165

LeetCode 1103. Distribute Candies to People (分糖果 II)

题目标签:Math   题目让我们分发糖果,分的糖果从1 开始依次增加,直到分完。   for loop可以计数糖果的数量,直到糖果发完。但是还是要遍历array 给people 发糖,这里要用到 index = (本轮分糖果的量 % people 的人数)糖果的数量从0 开始计数,这样的话,index 就会一直重复遍历 array,具体看code。 Java Solutio...

weixin_30823001的博客 164

[Swift]LeetCode1103. 分糖果 II | Distribute Candies to People

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30498921的博客 154

leetcode 1103. Distribute Candies to People(python)

描述 We distribute some number of candies, to a row of n = num_people people in the following way: We then give 1 candy to the first person, 2 candies to the second person, and so on until we give n candies to the last person. Then, we go back to the start o

王大呀呀的博客 312

【leetcode】1103. Distribute Candies to People

题目如下: We distribute somenumber ofcandies, to a row ofn =num_peoplepeople in the following way: We then give 1 candy to the first person, 2 candies to the second person, and so on until w...

weixin_30254435的博客 115
上一篇: LeetCode.1089-重复的0(Duplicate Zeros)
下一篇: LeetCode.1108-使IP地址无效(Defanging an IP Address)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值