列表

详情


6323. 将钱分给最多的儿童

给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。

你需要按照如下规则分配:

请你按照上述规则分配金钱,并返回 最多 有多少个儿童获得 恰好 8 美元。如果没有任何分配方案,返回 -1 。

 

示例 1:

输入:money = 20, children = 3
输出:1
解释:
最多获得 8 美元的儿童数为 1 。一种分配方案为:
- 给第一个儿童分配 8 美元。
- 给第二个儿童分配 9 美元。
- 给第三个儿童分配 3 美元。
没有分配方案能让获得 8 美元的儿童数超过 1 。

示例 2:

输入:money = 16, children = 2
输出:2
解释:每个儿童都可以获得 8 美元。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int distMoney(int money, int children) { } };

javascript 解法, 执行用时: 96 ms, 内存消耗: 45 MB, 提交时间: 2023-09-22 07:41:21

/**
 * @param {number} money
 * @param {number} children
 * @return {number}
 */
var distMoney = function(money, children) {
    if (money < children) {
        return -1;
    }
    money -= children
    let cnt = Math.min(Math.floor(money / 7), children);
    money -= cnt * 7;
    children -= cnt;
    if ((children == 0 && money > 0) || (children == 1 && money == 3)) {
        cnt -= 1;
    }
    return cnt;
};

golang 解法, 执行用时: 4 ms, 内存消耗: 3 MB, 提交时间: 2023-09-22 07:40:57

func distMoney(money int, children int) int {
    if money < children {
        return -1
    }
    money -= children
    cnt := min(money / 7, children)
    money -= cnt * 7
    children -= cnt
    if (children == 0 && money > 0) || (children == 1 && money == 3) {
        cnt -= 1
    }
    return cnt
}

func min(x int, y int) int {
    if x > y {
        return y
    }
    return x
}

cpp 解法, 执行用时: 4 ms, 内存消耗: 5.7 MB, 提交时间: 2023-03-19 21:52:30

class Solution {
public:
    int distMoney(int money, int children) {
        if(money<children)
            return -1;
        if(money>8*children)
            return children-1;
        if(money==8*children-4)
            return children-2;
        return (money-children)/7;
    }
};

golang 解法, 执行用时: 0 ms, 内存消耗: 3 MB, 提交时间: 2023-03-19 21:51:53

func distMoney(money, children int) int {
	money -= children // 每人至少 1 美元
	if money < 0 {
		return -1
	}
	ans := min(money/7, children) // 初步分配,让尽量多的人分到 8 美元
	money -= ans * 7
	children -= ans
	if children == 0 && money > 0 || // 必须找一个前面分了 8 美元的人,分完剩余的钱
		children == 1 && money == 3 { // 不能有人恰好分到 4 美元
		ans--
	}
	return ans
}

func min(a, b int) int { if a > b { return b }; return a }

java 解法, 执行用时: 2 ms, 内存消耗: 40.6 MB, 提交时间: 2023-03-19 21:51:34

class Solution {
    public int distMoney(int money, int children) {
        money -= children; // 每人至少 1 美元
        if (money < 0) return -1;
        int ans = Math.min(money / 7, children); // 初步分配,让尽量多的人分到 8 美元
        money -= ans * 7;
        children -= ans;
        if (children == 0 && money > 0 || // 必须找一个前面分了 8 美元的人,分完剩余的钱
            children == 1 && money == 3) // 不能有人恰好分到 4 美元
            --ans;
        return ans;
    }
}

python3 解法, 执行用时: 40 ms, 内存消耗: 14.9 MB, 提交时间: 2023-03-19 21:51:21

class Solution:
    def distMoney(self, money: int, children: int) -> int:
        money -= children  # 每人至少 1 美元
        if money < 0: return -1
        ans = min(money // 7, children)  # 初步分配,让尽量多的人分到 8 美元
        money -= ans * 7
        children -= ans
        # children == 0 and money:必须找一个前面分了 8 美元的人,分配完剩余的钱
        # children == 1 and money == 3:不能有人恰好分到 4 美元
        if children == 0 and money or \
           children == 1 and money == 3:
            ans -= 1
        return ans

上一题