【算法】六一·给小朋友们分糖果

QuibblerQuibbler 2024-06-01 约 4 分钟 1704 次阅读

【算法】六一·给小朋友们分糖果

每日一题,今天六一,LeetCode今天出的题很有意思。

给你两个正整数 n 和 limit 。请你将 n 颗糖果分给 3 位小朋友,确保没有任何小朋友得到超过 limit 颗糖果,请你返回满足此条件下的 总方案数 。

示例 1:输入:n = 5, limit = 2输出:3解释:总共有 3 种方法分配 5 颗糖果,且每位小朋友的糖果数不超过 2 :(1, 2, 2) ,(2, 1, 2) 和 (2, 2, 1) 。

示例 2:输入:n = 3, limit = 3输出:10解释:总共有 10 种方法分配 3 颗糖果,且每位小朋友的糖果数不超过 3 :(0, 0, 3) ,(0, 1, 2) ,(0, 2, 1) ,(0, 3, 0) ,(1, 0, 2) ,(1, 1, 1) ,(1, 2, 0) ,(2, 0, 1) ,(2, 1, 0) 和 (3, 0, 0) 。

小技巧,LeetCode上绝大多数题目可以无脑暴力解决,留意一下这题的输入限制1 <= n <= 50和1 <= limit <= 50。先暴力完成任务,拿到今天的积分:

class Solution {
        public int distributeCandies(int n, int limit) {
           int count = 0;
           for (int a = 0; a <= n && a <= limit; ++a) {
               for (int b = 0; b <= n - a && b <= limit; ++b) {
                   if (n - a - b <= limit) {
                       ++count;
                   }
               }
           }
           return count;
       }
    }

解题不是最终目的,暴力解决这题就没有意义了,有个巧妙的方法:枚举中间小朋友获得的糖果数量,O(1)计算左右两边的方案数:

class Solution {
        public int distributeCandies(int n, int limit) {
            int ans = 0;
            int hi = Math.min(limit, n);
            for (int mid = 0; mid <= hi; mid++) {
                int m = n - mid, l = Math.max(0, m - hi), r = Math.min(hi, m);
                ans += Math.max(r - l + 1, 0);
            }
            return ans;
        }
    }

相关推荐

精选
获取系统SDK版本、判断手机ROM
Code

获取系统SDK版本、判断手机ROM

Build获取系统SDK版本Android中部分API的使用,需要在特定的SDK版本之后才能使用,因此在兼容老版本SDK的时候,经常需要判断API的版本。各种Android版本的对应关系参考《Android各版本对应的SDK版本》判断手机ROM有时候需要判断手机系统的ROM,检测ROM是MIUI、EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件(关于build.p

3.7k
精选
AndroidStudio中各种中文乱码问题
Code

AndroidStudio中各种中文乱码问题

AndroidStudio中各种中文乱码问题1、编译Java错误信息乱码在出现这个Annotation processors must be explicitly declared now...问题的时候,正好也发现AndroidStudio Build Output错误信息都乱码。经常遇到各种问题,习惯了,现在遇到的问题,都是以后的答案。 1.1、修改项目build.gradle(无效)在整个p

2.4k
AndroidStudio 报错:has no declaration in the base values folder
Code

AndroidStudio 报错:has no declaration in the base values folder

在资源文件中正常定义的值,也能编译运行。昨天还正常,今天一打开就报错。应该又是AndroidStudio自身的Bug了。原因众说纷纭,参考Stack Overflow 一篇类似的讨论。解决:File => Invalidate Caches / Restart => Invalidate and Restart.

4.4k