当前位置: 首页 > news >正文

[每日一题]170:分糖果 II

文章目录

  • 题目描述
      • 题解思路


题目描述

排排坐,分糖果。

我们买了一些糖果 candies,打算把它们分给排好队的 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]。

提示:

  • 1 <= candies <= 10^9
  • 1 <= num_people <= 1000

题解思路

最直观的方法是不断地遍历数组,如果还有糖就一直分,直到没有糖为止。

代码如下:

class Solution {
public:vector<int> distributeCandies(int candies, int num_people) {vector<int> res(num_people, 0);for (int i = 0, j = 1; i < num_people && j <= candies; i = (++i)%num_people, j++) {res[i] += j;candies -= j;if(j + 1 > candies){res[(i+1)%num_people] += candies;break;}}return res;}
};// 官方题解
class Solution {
public:vector<int> distributeCandies(int candies, int num_people) {vector<int> ans(num_people,0);int i = 0;while (candies != 0) {ans[i % num_people] += min(candies, i + 1);candies -= min(candies, i + 1);++i;}return ans;}
};
// 学习一下 python
class Solution:def distributeCandies(self, candies: int, num_people: int) -> List[int]:ans = [0] * num_peoplei = 0while candies != 0:ans[i % num_people] += min(i + 1, candies)candies -= min(i + 1, candies)i += 1return ans

相关文章:

  • 今日好料推荐(ARM嵌入式)
  • chatgpt4和文心一言的简单对比
  • 某红书旋转滑块验证码分析与协议算法实现(高通过率)
  • C++ B (1124) : 斐波那契数列第n项Plus
  • SpringBoot+百度地图+Mysql实现中国地图可视化
  • RabbitMQ-直连交换机(direct)使用方法
  • Linux--线程的分离、线程库的地址关系的理解、线程的简单封装(二)
  • Kubernetes 之 Secret
  • App开发前端开发语言:深度解析与应用探索
  • MySQL—函数—函数小结
  • 民国漫画杂志《时代漫画》第33期.PDF
  • 必看——怎么让网站实现HTTPS访问?
  • 用java实现客服聊天+网络爬虫下载音乐(java网络编程,io,多线程)
  • 安卓组合控件(底部标签栏、顶部导航栏、增强型列表、升级版翻页)
  • Java 内存模型
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • angular学习第一篇-----环境搭建
  • Java 内存分配及垃圾回收机制初探
  • JAVA并发编程--1.基础概念
  • JS学习笔记——闭包
  • PaddlePaddle-GitHub的正确打开姿势
  • Shell编程
  • Swift 中的尾递归和蹦床
  • 测试开发系类之接口自动化测试
  • 创建一种深思熟虑的文化
  • 经典排序算法及其 Java 实现
  • 前端面试之CSS3新特性
  • 前端相关框架总和
  • 使用Swoole加速Laravel(正式环境中)
  • 学习HTTP相关知识笔记
  • 阿里云服务器购买完整流程
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)Hilt的基本概念和使用
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (二)hibernate配置管理
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (算法)前K大的和
  • (源码分析)springsecurity认证授权
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Framework 3.5安装教程
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net生成的类,跨工程调用显示注释
  • .NET中统一的存储过程调用方法(收藏)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?