题目连接:2591. 将钱分给最多的儿童 - 力扣(LeetCode)
题目要求:
时间复杂度:O(n)
空间复杂度:O(1)
思路详见代码
class Solution:
def distMoney(self, money: int, children: int) -> int:
if money < children:return -1
if money == children:return 0
if money / children == 8: return children
# 要让尽量多的孩子获得正好8美元,但是不能有人拥有4美元
# 两种情况:
# 1.money > children * 8 ,那么把多余的钱给其中一个人就行了,获得8的人数是总人数-1
# 2.monry < children * 8,先确保每个人都有钱,
# money - children, 然后每个人发钱,能发到8就发到8(贪心),不能发到8就跳过,剩下的钱如果刚好是3,且最后不是8的人只剩一个,那只能牺牲一个领到8的人和其分摊3块钱不然会出现领取4块钱的人
if money > children * 8 : return children - 1
money = money - children
num = 0
child = 1
while child <= children:
if money - 7 >= 0: # 能让当前孩子拥有8块钱
money -= 7
num += 1
child += 1
if money == 3 and num == children - 1 : return num-1
return num