每日两题编程

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12419542.html

1.分糖果(力扣57min)

题目链接:https://leetcode-cn.com/problems/distribute-candies-to-people/submissions/

排排坐,分糖果。

我们买了一些糖果 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

题解:

题意:循环给围成一个圈的小朋友发糖,每发发糖比上次多一个糖,直到手里糖不够,不够的糖也给最后一个小朋友。

方法:

1.定义一个数组,数组内的坐标对小朋友人数取余,这样能循环发糖。

2.用Math库函数取手中剩的糖和每次发糖增加的数目的交小值(这里其实是对于最后一个小朋友得到的糖做判断,只有最后一个小朋友得到的糖是小于等于手中剩的糖的个数)。

3.更新糖果数目,发完一次糖,糖果数组还剩糖果数减去上次已发的糖果数目。

代码如下:

class Solution {
    public int[] distributeCandies(int candies, int num_people) {
        int i=0;
        int[]arr=new int[num_people];
        while(candies>0)
        {
                    arr[i%num_people]+=Math.min(candies,i+1);
                    candies-=i+1;
                    i++;

        }
     return arr;
    }
}

一开始写的代码,对最后一个小朋友得到的糖果数做判断来写的代码,但是超时。

代码如下:

class Solution {
    public int[] distributeCandies(int candies, int num_people) {
        int i;
        int[]arr=new int[num_people];
        int count=0;
        while(candies>0)
        {
             for(i=0;i<num_people;i++)
              {
                    count++;
                    if(candies>=count)
                    {
                        arr[i]+=count;
                        candies=candies-count;
                    }
                    else
                        arr[i]+=candies;
              }

        }
     return arr;
    }
}

原文地址:https://www.cnblogs.com/ping2yingshi/p/12419542.html

时间: 2024-10-05 04:55:52

每日两题编程的相关文章

挑战JavaScript正则表达式每日两题

不少学习JS开发的同学可能对正则表达式抱有不屑一顾的态度,认为用到时再查查不就行了.以前在学习其他语言,例如JAVA和C#时,我就有这么一种观点--反正看了不用就忘. 但是,JS开发中,你无论是自己开发还是观看别人的模块或者第三方库,你会更为频繁地使用到正则表达式.因此,正则表达式一下子变得不再是可有可无. 从本篇开始,我打算使用大致10多天时间,开发二十多个题,都是有关正则表达式的使用问题,权作JAVASCRIPT开发朋友的一种小型讨论聚会,但绝不是什么"擂台"赛.问题给出后,将在下

挑战JavaScript正则表达式每日两题(2)

上一篇    下一篇 上篇中问题参考答案 第一题: 原题要求:略. 答案:正确. 补注:题中提到的是"某些"而不是指全部的这18个字符,请结合下面第二题正确理解. 第二题: 原题要求: 给定字符串"ab dword1=243[ASD\FEDSF-]234ff/sdfsf{dkdkd",如何找出其中所有的正则表达式元字符. 解答如下: 目标串中出现的元字符都没有什么特殊含义而仅作为普通字符存在时可以直接放于正则表达式内部,唯独反斜线字符"\"必须使

老男孩教育每日一题-第84天-两个文件,把第一个文件中的第2、3行内容添加到第二个文件的第3行后面

两个文件如下: [[email protected] ~]# cat 1.txt  111 222 333 [[email protected] ~]# cat 2.txt AAA bbb ccc ddd 要求修改后的文件 [[email protected] ~]# cat 2.txt  AAA bbb ccc 222 333 ddd `` 参考答案: 方法1: [[email protected] ~]# sed -n 2,3p 1.txt |xargs |sed -r 's# #\\n#g

老男孩教育每日一题-2017年5月16日-说说{}与[]这两个符号有什么区别?

1.题目 2.参考答案 这两个看似简单的符号,其实内容还不少.我们一起来看看. 2.1 通配符中 通配符在linux中通常用来匹配/找文件名或目录名.最常用的就是 ls -l *.txt显示出所有以.txt结尾的文件. 2.1.1  {} 花括号,大括号,生产序列 [[email protected] regular]# echo {a..z} {0..9} a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8

C语言每日一题之No.1

鉴于在学校弱弱的接触过C,基本上很少编程,C语言基础太薄弱.刚好目前从事的是软件编程,难度可想而知.严重影响工作效率,已无法再拖下去了.为此,痛下决心恶补C语言.此前只停留在看书,光看好像也记不住,C这东西毕竟是练出来的,所以从今天开始,每日一道C语言题目,从题目入手来补知识漏洞.题目比较基础,如不堪入目,还请见谅. 题目:输入三个整数,输出最大的数 思路:定义三个变量用来存储输入的整数 比较三个变量的大小,找到最大的数 定义一个变量存储来存储最大的数 程序: 1 #include <stdio

老男孩教育每日一题-第126天-通过shell脚本打印乘法口诀表

问题背景: 生成9*9乘法表 [[email protected] ~]# seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}' 1x1=1 1x2=2   2x2=4 1x3=3   2x3=6   3x3=9 1x4=4   2x4=8   3x4=12  4x4=16 1x5=5

老男孩教育每日一题-第110天-find命令-size参数

老男孩教育每日一题-第110天-find命令-size参数1.查找当前目录下以log结尾的大于50k小于2M的普通文件2.查找当前目录下以log结尾的小于50k大于2M的普通文件以上两个问题有什么不同? 参考答案: 测试环境: [[email protected] tmp]# pwd /root/tmp [[email protected] tmp]# ll -h total 7.4M -rw-r--r-- 1 root root   262 Jul 30 15:45 a.log -rw-r--

老男孩教育每日一题-2017年5月17日-使用三剑客进行变化格式

1.题目 原始数据: 17/Apr/2015:09:29:24 +0800 17/Apr/2015:09:30:26 +0800 17/Apr/2015:09:31:56 +0800 18/Apr/2015:09:34:12 +0800 18/Apr/2015:09:35:23 +0800 19/Apr/2015:09:23:34 +0800 19/Apr/2015:09:22:21 +0800 20/Apr/2015:09:45:22 +0800 期望结果: 2015-04-17 09:29:

老男孩教育每日一题-2017年5月2日-Linux系统中,不小心把chmod命令的权限弄没了,怎么解决?

老男孩教育每日一题-2017年5月2日-Linux系统中,chmod命令没有执行权限(x权限)或者chmod命令文件的权限为000,怎么解决? 解决方法有两种: 方法一: [[email protected] bin]# cp cp /oldboy/chmod.new (此时复制cp命令文件命名叫chmod.new,此时chmod.new文件有就x的权限,但chmod.new不具备有chmod命令的共功能) [[email protected] bin]# cd /oldboy/ [[email