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

【教3妹学编程-算法题】给小朋友们分糖果 II

买买买

3妹:1 8得8,2 8=16, 3 8妇女节…
2哥 : 3妹,在干嘛呢
3妹:双11不是过了嘛, 我看看我这个双十一买了多少钱, 省了多少钱。
2哥 : 我可是一分钱没买。
3妹:我买了不少东西, 衣服、包包、化妆器……, 接下来的一个月只能吃土了, 还要2哥救助~
2哥:你没有用花呗或信用卡吗, 把支付方式重新排列一下, 用最晚还款的那种信用卡,这样就可以暂时不用吃土啦。
3妹:可是后面还是要还信用卡啊。哎, 天下要有免费的午餐该有多好啊
2哥 : 傻啊你, 后面就发工资了啊, 不就缓解了
3妹:咦,有道理啊
2哥:说到免费的午餐,我今天看天一个免费的糖果的题目,我们来做一下吧~

买买买

题目:

给你两个正整数 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) 。

提示:

1 <= n <= 10^6
1 <= limit <= 10^6

思路:

思考

双指针,
n个糖果分给3个小朋友,考虑分给第一个小朋友i个糖果,那么i的取值范围是[0, min(limit, range)], 此时还剩下left = n - i 个糖果,分给2个小朋友。
考虑left分成两份,位 j 和 left-j 每份的取值范围都需要满足要求。分三种情况:
left > 2limit, 此时无法满足条件。
left <= limit, 此时 j取[0, limit]均可,有limit+1种方法
left > limit 且 left/2 <= limit, 这个时候因为两个人是对称的,只需考虑第一个人的取值范围,也就是[n-limit, limit],共limit-(n-limit) + 1 = 2
limit - n + 1种
所以枚举i, 然后对left分情况讨论,一次遍历拿到结果。

java代码:

class Solution {public long distributeCandies(int n, int limit) {return c2(n + 2) - 3 * c2(n - limit + 1) + 3 * c2(n - 2 * limit) - c2(n - 3 * limit - 1);}private long c2(int n) {return n > 1 ? (long) n * (n - 1) / 2 : 0;}
}
http://www.lryc.cn/news/228243.html

相关文章:

  • 应急响应练习2
  • JS算法练习 11.13
  • js升序排序
  • 2023亚太杯数学建模C题思路
  • 【ArcGIS Pro微课1000例】0030:ArcGIS Pro中自带晕渲地貌工具的妙用
  • 【原创】java+swing+mysql办公用品管理系统设计与实现
  • sqlalchemy查询数据为空,查询范围对应的数据在数据库真实存在
  • Code Former安装及使用
  • SpringMVC--@RequestMapping注解
  • ARM寄存器及功能介绍/R0-R15寄存器
  • js删除json数据中指定元素
  • 广州华锐互动:VR刑侦现场执法实训助力警察全面提升警务能力
  • 多线程 浏览器渲染引擎 图形用户界面(GUI,Graphical User Interface)应用程序
  • echarts饼图label显示不全原因?
  • 暖手宝上架亚马逊美国站UL499报告测试标准要求
  • 2023数据结构期中测验-2023秋-计算机+未来网络专业
  • 解锁内存之谜:从C到Python、Java和Go的内存管理对比
  • Redirect:301和302不同场景选择问题
  • ChromeDriver谷歌浏览器驱动下载安装与使用最新版118/119/120
  • 研究生做实验找不到数据集咋办?
  • 说说React diff的原理是什么?
  • 链路追踪详解(一):什么是链路追踪?
  • 2024怎么自学软件测试?自动化测试?测试老鸟总结,少走弯路...
  • AI搞钱——工具篇之视频、音频转文字
  • 基于Qt 多线程(继承自QThread篇)
  • oled显示器程序(IIC)从stm32f103移植到stm32f429出现bug不显示-解决移植失败问题
  • 【论文阅读】FreeMatch: Self-adaptive Thresholding for Semi-supervised Learning
  • 工业网关贴牌厂家有哪些?工业网关OEM厂家怎么选?
  • NetSuite 固定资产报表自定义原理及应用
  • 【复杂网络建模】——基于关联矩阵构建超图网络