将钱分给最多的儿童【LC2591】
给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。
你需要按照如下规则分配:
所有的钱都必须被分配。
每个儿童至少获得 1 美元。
没有人获得 4 美元。
请你按照上述规则分配金钱,并返回 最多 有多少个儿童获得 恰好 8 美元。如果没有任何分配方案,返回-1。
- 思路:贪心
- 局部最优:每个小孩至少给一块钱,然后尽可能给某些小孩8块;但是需要注意,不能有分到4块的,钱也不能有剩余
- 全局最优:使尽可能多的小孩获得 恰好
8
美元
- 实现
class Solution { public int distMoney(int money, int children) { // 首先满足每个小孩至少一块,然后尽可能给某些小孩8块,但是需要注意,不能有分到4块的,钱也不能有剩余 if (money < children) return -1; else if (money > children * 8) return children - 1; else if (money == children * 8 - 4) return children - 2; return (money - children) / 7; } }
复杂度
时间复杂度:O ( 1 )
空间复杂度:O ( 1 )