Leetcode.2591 将钱分给最多的儿童

2023-09-22 09:24:07

题目链接

Leetcode.2591 将钱分给最多的儿童 rating : 1531

题目描述

给你一个整数 m o n e y money money ,表示你总共有的钱数(单位为美元)和另一个整数 c h i l d r e n children children ,表示你要将钱分配给多少个儿童。

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

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

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

示例 1:

输入:money = 20, children = 3
输出:1
解释:
最多获得 8 美元的儿童数为 1 。一种分配方案为:

  • 给第一个儿童分配 8 美元。
  • 给第二个儿童分配 9 美元。
  • 给第三个儿童分配 3 美元。
    没有分配方案能让获得 8 美元的儿童数超过 1 。
示例 2:

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

提示:
  • 1 ≤ m o n e y ≤ 200 1 \leq money \leq 200 1money200
  • 2 ≤ c h i l d r e n ≤ 30 2 \leq children \leq 30 2children30

解法:数学

要求每一个儿童都至少被分配 1 1 1 美元,所以 m o n e y ≥ c h i l d r e n money \geq children moneychildren

如果 m o n e y < c h i l d r e n money < children money<children,说明不符合基本要求,直接返回 − 1 -1 1

我们给每一个儿童先分配 1 1 1 美元,即:

m o n e y = m o n e y − c h i l d r e n money = money - children money=moneychildren

我们要凑成 8 8 8 美元,只需要再给这些儿童每个分配 7 7 7 美元即可,此时我们再计算出最多可以分配 c n t cnt cnt 7 7 7 美元:

c n t = m i n ( m o n e y / 7 , c h i l d r e n ) cnt = min(money / 7 , children) cnt=min(money/7,children)

那么此时就有 c n t cnt cnt 个儿童被分配了 8 8 8 美元,我们还需要讨论。

分配了之后,剩余的钱 和 儿童数量:

m o n e y = m o n e y − c n t × 7 c h i l d r e n = c h i l d r e n − c n t money = money - cnt \times 7 \\ children = children - cnt money=moneycnt×7children=childrencnt

  • 如果此时 c h i l d r e n = 0 , m o n e y > 0 children = 0 , money > 0 children=0,money>0,说明此时所有儿童都被分配了 8 8 8 美元,此外还多出来了 m o n e y money money 美元美元被分配,由于所有的钱都必须被分配,所以剩余美元只能被分配到一个儿童身上,拥有 8 8 8 美元的儿童数量就要减一,即 c n t = c n t − 1 cnt = cnt - 1 cnt=cnt1

  • 如果此时 c h i l d r e n = 1 , m o n e y = 3 children = 1 , money = 3 children=1,money=3 ,说明此时除了最后一个儿童,其他儿童都被分配了 8 8 8 美元。但是此时 m o n e y money money 剩余了 3 3 3 美元,分配到最后一个儿童身上就是 4 4 4 美元,由于我们不能分配 4 4 4 美元,所以只能将其分到其他儿童身上, 拥有 8 8 8 美元的儿童数量就要减一,即 c n t = c n t − 1 cnt = cnt - 1 cnt=cnt1

  • 其他情况都不用管;

时间复杂度: O ( 1 ) O(1) O(1)

C++代码:

class Solution {
public:
    int distMoney(int money, int c) {
        if(money < c) return -1;
        money -= c;

        int cnt = min(money / 7 , c);
        c -= cnt;
        money -= 7 * cnt;

        if((c == 0 && money > 0) || (c == 1 && money == 3)) cnt--;

        return cnt;
    }
};
更多推荐

Vue中如何进行跨域处理

Vue中的跨域请求处理:解决前端开发中的常见问题跨域请求是前端开发中常见的问题之一。Vue.js是一款流行的前端框架,如何在Vue中处理跨域请求是每个Vue开发者都需要了解的重要课题。本文将深入探讨什么是跨域请求,为什么它会出现,以及如何在Vue中处理跨域请求,包括使用代理、JSONP、CORS等方法。什么是跨域请求?

开源网安入选广东省网络空间安全标准化技术委员会新技术及应用安全技术工作组成员单位

近日,第二届广东省网络空间安全标准化技术委员会(GD/TC124)(以下简称省网安标委)正式成立。为进一步发挥省网安标委在支撑网络强国建设、推进网络安全产业高质量发展过程中,示范引领核心技术攻关、创新产品研发、行业应用推广的重要作用,由省网安标委秘书处拟牵头组建数据安全技术工作组、网络安全技术工作组、新技术及应用安全技

GDPU 数据结构 天码行空3

一、【实验目的】1、掌握建立单链表的基本方法。2、掌握单链表的插入、删除算法的思想和实现二、【实验内容】仿照教材中的单链表实现例子,自己设计一个有序单链表,单链表中的数据元素为整型并递增有序。有序单链表的定义:逻辑结构:有序线性表,数据元素递增有序存储结构:链式操作集合:初始化、插入、删除、撤销(1)ListIniti

JavaWeb 学习笔记 6:会话跟踪

JavaWeb学习笔记6:会话跟踪HTTP协议本身是无状态的,所以不能跟踪会话状态。所以会有额外的技术用于跟踪会话:Cookie,客户端技术Session,服务端技术1.Cookie1.1.写入Cookie可以在服务端通过HttpServletResponse.addCookie向浏览器写入Cookie:@WebSer

C++11之基础篇

C++11C++11简介统一的列表初始化{}初始化std::initializer_list声明autodecltypenullptr范围for循环STL中一些变化arrayforward_listunderored_map,underored_setC++11简介在2003年C++标准委员会曾经提交了一份技术勘误表(

Vue的`provide`和`inject`特性:上下文传递与数据共享

Vue的provide和inject特性:上下文传递与数据共享Vue.js是一款流行的前端JavaScript框架,它提供了丰富的功能来构建可维护和可扩展的用户界面。其中,provide和inject特性是Vue中的一项强大功能,它们允许你在父组件提供数据,并在子组件中进行注入,实现了上下文传递和数据共享的目的。本文将

RockTree TOKEN2049 Party爆火,一场千亿规模的“超级聚会”

今年9月11日至17日期间,在新加坡举办的TOKEN2049大会,成为了今年同类活动中规模最大、最火爆的一次Web3行业盛会。据悉,本届TOKEN2049迎来了来自3,500多个组织超10,000名与会者,并有一众重磅加密行业嘉宾出席会议。而在TOKEN2049大会举办期间的系列活动中,由RockTreeCapital

腾讯云16核CPU服务器配置大全,CVM和轻量服务器

腾讯云16核CPU服务器有哪些配置可以选择?可以选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月,腾讯云百科分享腾讯云16核CPU服务器可以选择的云服务器CVM规格列表:目录腾讯云16

恒运资本:沪指震荡涨0.28%,医药板块强势拉升,金融等板块上扬

15日早盘,沪指盘中震荡上扬,科创50指数表现强势;北向资金小幅净流入。到午间收盘,沪指涨0.28%报3135.31点,深成指、创业板指涨均0.11%,科创50指数涨1.04%;两市合计成交4357亿元,北向资金净买入1.13亿元。盘面上看,医药、医疗保健板块涨幅居前,旅游、半导体、零售、纺织服装、钢铁、石油、地产、保

虚拟机Ubuntu操作系统常用终端命令(3)(详细解释+详细演示)

本篇概要本篇讲述了Ubuntu操作系统常用的几个功能,即修改文件权限、修改文件属性、可执行脚本、虚拟机网络、FTP服务器、SSH服务器、VIM等方面的知识。希望能够得到大家的支持。文章目录本篇概要1.修改文件权限2.修改文件属主3.可执行脚本3.1要点与细节3.2shell脚本3.3Python脚本4.虚拟机网络4.1

最长公共子序列(最详细的动态规划案例)

#include<iostream>#include<vector>usingnamespacestd;intmain(){stringtext1,text2;while(cin>>text1>>text2){//创建二维数组dp,行数text1.size()+1,列数text2.size()+1,并全部初始化为0ve

热文推荐