【2591. 将钱分给最多的儿童】

2023-09-22 10:11:13

来源:力扣(LeetCode)

描述:

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

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= money <= 200
  • 2 <= children <= 30

方法:贪心

思路与算法

首先,若 money < children,则无解,返回 −1。

然后,给每个人先分配 111 美元,令 money 减去 children。

接着,给尽可能多的人分配 7 美元(加上前面分配的 1 美元就是 8 美元),这样最多分给 cnt = min⁡(⌊ m o n e y 7 \frac{money}{7} 7money ⌋,children) 个人。

令 money 减去 7 × cnt,children 减去 cnt。此时还剩余 money 美元和 children 个人,进行分类讨论:

  1. 若剩余 0 个人,并且 money > 0,那么将所有的美元分配给一个已经分到 8 美元的人,令 cnt 减去 1。
  2. 若剩余 1 个人,并且 money = 3,为了避免分到 4 美元,并注意到题目输入中的 children >= 2,因此将这 3 美元拆成两部分,将其中的一部分分配给已经分到 8 美元的人,令 cnt 减去 1。
  3. 对于其他情况,若 money > 0,可以将所有美元分配给一个人,cnt 不变。

代码:

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

时间 8ms 击败 34.59%使用 C++ 的用户
内存 5.95MB 击败 7.30%使用 C++ 的用户
复杂度分析

更多推荐

深入理解Linux网络笔记(一):内核是如何接收网络包的

本文为《深入理解Linux网络》学习笔记,使用的Linux源码版本是3.10,网卡驱动是Intel的igb网卡驱动Linux源码在线阅读:https://elixir.bootlin.com/linux/v3.10/source1、内核是如何接收网络包的1)、Linux网络收包总览在TCP/IP网络分层模型里,整个协议

vue3学习源码笔记(小白入门系列)------ 重点!响应式原理 代码逐行分析

目录备注响应式数据创建ref和reactive核心作用第一轮的依赖收集发生时机setup阶段去更改了响应式数据会发生依赖收集吗派发更新派发更新是什么时候触发的?扩展:setup阶段响应式数据被修改会触发组件更新吗vue是如何根据派发更新来触发组件的更新渲染的?组件副作用函数执行时有多个响应式数据更新是如何保证组件只会触

一个手机ip从这个城市去到另一个城市多久会变

随着现代社会的互联网和移动通信的普及,手机IP地址的变化成为了一个备受关注的话题。当我们从一个城市移动到另一个城市时,我们可能会好奇手机IP地址会在多长时间内发生变化。下面虎观代理小二二将详细介绍一下。手机IP地址会随着其所连接的网络的变化而发生改变。当您从一个城市移动到另一个城市,手机可能会重新连接到新的基站或使用不

基于YOLOv5开发构建农林作物害虫检测识别分析系统

智慧农业现在在很多试点区域已经推广开来了,这个借助各种助力政策的利好对于农业的发展是不错的机会,比如:激光自动除草、自动灭虫等等,结合AI的检测识别技术整合相关的硬件设备,比如:无人机、机械、喷淋等等可以实现大农田块的自动化工作,还是有蛮不错的前景的。这里本文的主要目的就是想要收集构建农林作物中常见的害虫数据来开发构建

淘天集团联合爱橙科技开源大模型训练框架Megatron-LLaMA

9月12日,淘天集团联合爱橙科技正式对外开源大模型训练框架——Megatron-LLaMA,旨在让技术开发者们能够更方便地提升大语言模型训练性能,降低训练成本,并保持和LLaMA社区的兼容性。测试显示,在32卡训练上,相比HuggingFace上直接获得的代码版本,Megatron-LLaMA能够取得176%的加速;在

QUIC协议报文解析(三)

在前面的两篇文字里我们简单介绍了QUIC的发展历史,优点以及QUIC协议的连接原理。本篇文章将会以具体的QUIC报文为例,详细介绍QUIC报文的结构以及各个字段的含义。早期QUIC版本众多,主要有谷歌家的gQUIC,以及IETF致力于将QUIC标准化,即IETFQUIC(iQUIC),还有Facebook家的mvfst

【C刷题训练营】第四讲(打好基础很重要)

前言:大家好,这是c语言刷题训练营的第四讲,打好基础便于对c语言语法与算法思维的提高,感谢你的来访与支持!💥🎈个人主页:​​​​​​Dream_Chaser~🎈💥✨✨刷题专栏:http://t.csdn.cn/baIPx⛳⛳本篇内容:c语言刷题训练营第四讲(牛客网)目录BC23-时间转换解题思路:BC24-总成

魔众文库系统 v5.3.0 小程序激励视频广告、下载收藏喜欢虚拟数量、用户注册站内信和欢迎邮件

魔众文库系统基于文档系统知识,建立平台与领域,打造流量、用户、付费和变现的闭环,帮助您更好的搭建文库系统。魔众文库系统发布v5.3.0版本,新功能和Bug修复累计13项,小程序激励视频广告、下载收藏喜欢虚拟数量、用户注册站内信和欢迎邮件。2023年09月18日魔众文库系统发布v5.3.0版本,增加了以下13个特性:·[

开箱即⽤!HashData 云数仓上线华为蓝鲸应⽤商城

近⽇,经过华为对企业技术、产品和服务能⼒的综合评估,酷克数据企业级云原⽣数据仓库HashData通过与华为OceanStorPacific分布式存储的适配与优化,形成⼀体化解决⽅案,成功上线华为蓝鲸应⽤商城。图1:华为蓝鲸商城HashData产品⻚⾯华为蓝鲸应⽤商城是华为数据存储产品线与合作伙伴联合打造的⼀站式IT应⽤

【无标题】

TCP简单的TCP协议的Python实现,包括服务器和客户端服务器端importsocket#定义服务器地址和端口号server_address=('localhost',8000)#创建TCP套接字server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREA

微服务简介

微服务简介微服务架构是一种软件架构模式,它将一个大型应用程序拆分为一组小型、独立的服务,每个服务都有自己的业务逻辑和数据存储。这些服务可以独立开发、部署和扩展,通常使用HTTP或其他轻量级通信协议进行通信。以下是微服务架构的一些关键特点和概念:微服务独立性:每个微服务都是独立的,拥有自己的数据库、业务逻辑和用户界面。这

热文推荐