【每日一题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)
相关推荐
evans在进步7 小时前
LeetCode 64:最小路径和——Java 原地动态规划详解
java·leetcode·动态规划
Tisfy7 小时前
LeetCode 1386.安排电影院座位:哈希表+位运算
算法·leetcode·散列表·题解·哈希表
Nil2088 小时前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
土司大王12 小时前
LeetCode hot100——两两交换链表中的节点
算法·leetcode·职场和发展
zander25814 小时前
LeetCode 300. 最长递增子序列
算法·leetcode·深度优先
欧叶冲冲冲14 小时前
Python常见数据结构的CRUD(LeetCode高频版速查)
数据结构·python·leetcode
圣保罗的大教堂15 小时前
leetcode 3622. 判断整除性 简单
leetcode
Lyyaoo.15 小时前
【普通数组】【中等】除了自身以外数组的乘积
数据结构·算法·leetcode
圣保罗的大教堂17 小时前
leetcode 2996. 大于等于顺序前缀和的最小缺失整数 简单
leetcode
圣保罗的大教堂17 小时前
leetcode 3702. 按位异或非零的最长子序列 中等
leetcode