leetcode每日一题 2023/9/22
题目链接:https://leetcode.cn/problems/distribute-money-to-maximum-children/description/
虽然标签是简单题,但是中间还是有一点点的绕
1. 计算最分配方案的上限
对于总的金额money
,我们可以先计算出该金额尽可能按照8美元分配,最多可以分配 n8
个人,而剩余的金额分为三种情况{0, 4, else}
,假设剩余金额可以分配 ne
个人,ne 的取值就是 0 和 1;
2. 分情况讨论
先对 ne 的取值做一个判断,如果剩余金额为0, 那么 ne 的取值也为0,否则为1;
- 如果n8+ne==children,那么说明份数刚好是够的,但如果剩余金额是4美元,那么 n8 中的某一个人,就不可以分配到8美元
- 如果n8+ne大于children,那么说明children中有一个人会拿到大于8美元的数目,其余还是8美元
- 如果n8+ne < children,那么说明有部分没有被分配,此时就要考虑拆,先拆多出的余额,如果还是不够,那么少分配一个8美元,拆开8美元,判断是否大于children人数,不够继续拆8美元
class Solution {
public:
int distMoney(int money, int children) {
// 分8元的人数
int n8 = money / 8;
// 剩余的钱
int e = money % 8;
int ne = 0;
if (e != 0)
ne = 1;
if (n8 + ne == children) {
if (e != 4)
return n8;
else
return n8 - 1;
}
else if (n8 + ne > children) {
return children-1;
}
// n8 + 1 < children
else {
if (n8 + ne < children) {
if (n8 + e >= children)
return n8;
else
for (int i = 1; i <= n8; i++) {
// 拆开后可以分配的人数
if (i * 8 + e + (n8 - i) >= children)
return n8 - i;
}
}
}
return -1;
}
};