LeetCode1103.分发糖果给人们分糖果II【易】【Python】【暴力】问题LeetCodeWe分发一些糖果,给一排n=num_people的人方法如下:然后我们给第一个人1颗糖果,给第二个人2颗糖果,以此类推,直到给最后一个人n颗糖果。然后,我们回到行首,给n+1糖果给第一个人,n+2糖果给第二个人,依此类推,直到我们给最后一个人2*n糖果。这个过程重复(我们每次再给一个糖果,并移动到开始在我们到达终点后排)直到我们用完糖果。最后一个人将收到我们所有剩余的糖果(不一定比之前的礼物多一个)。返回一个数组(长度为num_people和sumcandies),代表糖果的最终分配。示例1:输入: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]。例2:输入: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^91<=num_people<=1000问题是坐在一个排和分发糖果。我们买了一些糖果,打算分发给已经排队的n=num_people小朋友。给第一个孩子1颗糖果,给第二个孩子2颗,以此类推,直到给最后一个孩子n颗糖果。然后,我们回到队伍的起点,给第一个孩子n+1颗糖果,给第二个孩子n+2颗糖果,以此类推,直到给最后一个孩子2*n颗糖果。重复以上过程(每次比上次多给一颗糖果,到达队尾后再次从队伍起点开始),直到我们分发完所有的糖果。注意,即使我们手里剩下的糖果不够多(没有比之前的糖果多的糖果),这些糖果也会全部分发给当前的孩子。返回一个数组,长度为num_people,元素之和为candies,表示最终分配的糖果数(即ans[i]表示分配给第i个孩子的糖果数)。示例1:输入: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颗糖果),最后的数组变成了[1,2,3,1]。示例2:输入: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]。Tips:1<=candies<=10^91<=num_people<=1000ideas暴直接暴。如果有糖,就一直分,直到没有糖为止。时间复杂度:O(max(sqrt(G),N)),其中G是糖果的数量,N是人数。空间复杂度:O(1)Python3代码类解决方案:defdistributeCandies(self,candies:int,num_people:int)->List[int]:res=[0]*num_peoplestep=0whilecandies>0:res[step%num_people]+=min(candies,step+1)step+=1#nextpersoncandies-=step#剩余糖果返回res代码地址github链接
