【每日一题Day334】LC2591将钱分给最多的儿童 | 贪心

将钱分给最多的儿童【LC2591】

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

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

  • 所有的钱都必须被分配。
  • 每个儿童至少获得 1 美元。
  • 没有人获得 4 美元。

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

  • 思路:贪心

    • 局部最优:每个小孩至少给一块钱,然后尽可能给某些小孩8块;但是需要注意,不能有分到4块的,钱也不能有剩余
    • 全局最优:使尽可能多的小孩获得 恰好 8 美元
  • 实现

    java 复制代码
    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 ) \mathcal{O}(1) O(1)
      • 空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
相关推荐
Nil2083 小时前
leetcode 55跳跃游戏
算法·leetcode·游戏
longlongzihan3 小时前
LeetCode 128. 最长连续序列 —— 从排序到哈希集合
数据结构·c++·算法·leetcode·排序算法·哈希表
圣保罗的大教堂5 小时前
leetcode 3302. 字典序最小的合法序列 中等
leetcode
Cccp.1235 小时前
【leetcode】(九)哈希函数与哈希表
数据结构·leetcode·哈希算法
xieliyu.5 小时前
LeetCode 1419 数青蛙:状态模拟求最少青蛙数量|Java 题解
java·算法·leetcode
Nil2086 小时前
leetcode 45跳跃游戏Ⅱ
算法·leetcode·游戏
longlongzihan6 小时前
LeetCode 283. 移动零:从辅助数组到双指针原地算法
c++·算法·leetcode
longlongzihan20 小时前
LeetCode 5. 最长回文子串:从暴力匹配到中心扩展的思维演进
c++·算法·leetcode
苦瓜打怪兽20 小时前
leetcode 热题100(11. 盛最多水的容器)
python·算法·leetcode
All for pursuit.1 天前
【回溯-6】79.单词搜索
数据结构·c++·算法·leetcode