力扣1518. 换水问题

ops/2024/10/18 16:48:26/

题目链接

力扣1518. 换水问题

简单方法(模拟)

思路

对换水进行模拟,每次喝完 n u m E x c h a n g e numExchange numExchange 瓶水后就去换一瓶水,直到不能再兑换为止,也就是剩余水的数量小于 n u m E x c h a n g e numExchange numExchange时,不再模拟。故可以得出以下的代码:

代码

java">class Solution {public int numWaterBottles(int numBottles, int numExchange) {int emptyBottles = 0;							// 用来兑换的空水瓶的总数while (numBottles >= numExchange) {numBottles = numBottles - numExchange + 1;	// 用numExchange个空水瓶兑换一瓶水emptyBottles += numExchange;				// 用来兑换的空水瓶数 += 本轮循环兑换的空水瓶数}return emptyBottles + numBottles;				// 此时的numBottles为剩余的无法兑换的水}
}

简单方法的优化

思路

先对简单方法进行分析,费时的操作在哪里?

可以看到,换水的次数太多了,所以要减少换水的次数。

怎样减少换水的次数?

换水时直接将所有水先喝完,最大化本次换水的瓶数。设用来兑换一瓶水的瓶数为 n n n、本次的总空瓶数为 m m m、本次兑换的水瓶数为 a a a、本次用来兑换的空瓶数为 e e e,则有这样的关系式 a = m / n , e = a ∗ n a = m / n, e = a * n a=m/n,e=an,并且 a a a 要向下取整。

代码

java">class Solution {public int numWaterBottles(int numBottles, int numExchange) {int emptyBottles = 0;							// 用来兑换的空水瓶的总数while (numBottles >= numExchange) {int addition = numBottles / numExchange;	// 用numExchange个空水瓶兑换最多瓶水的瓶数numBottles %= numExchange;					// 最大化本次换水的数量numBottles += addition;						// 让总水瓶数加上本次换的水瓶数emptyBottles += addition * numExchange;		// 用来兑换的空水瓶的总数 += 本次用来兑换的空瓶数}return emptyBottles + numBottles;				// 此时的numBottles为剩余的无法兑换的水}
}

http://www.ppmy.cn/ops/20309.html

相关文章

使用 Dify 和 Moonshot API 构建你的 AI 工作流(一):让不 AI 的应用 AI 化

有了之前的文章铺垫,这篇文章开始,我们聊聊如何折腾 AI 工作流,把不 AI 的应用,“AI 起来”。 写在前面 上个月,我们聊过了《使用 Dify 和 AWS Bedrock 玩转 Anthropic Claude 3》,里面介绍了如何使用交互…

VScode调用devcpp编译

打开环境变量,用户和系统都可以,只是给的权限不一样而已,个人pc一般不会设置多个用户 找到path双击 新建一个,把你的dev的MinGW64\bin路径粘贴过去 然后重启电脑,VScode要重启电脑才能加载新的环境变量 打开VScode&a…

linux笔记4--shell命令1

文章目录 一. 目录1.说明2.盘符3.linux根目录(以Ubuntu为例)①说明②根目录下一些文件夹的解析/home/root/mnt/media/var/cdrom/etc/lib (/lib32--32位的,/lib64-64位的)/lostfound/boot/proc/bin/sbin/snap/srv/usr/opt/dev/run/tmp 二. ls命令--操作文件夹1.说明2…

Cadence OrCAD学习笔记(2)OrCAD原理图

最近换份工作主要用到Cadence,之前都是用AD居多,所以现在也开始记录下Cadence学习过程,方便后面复习。 参考教程: OrCAD视频教程第2期:10分钟学会OrCAD原理图_哔哩哔哩_bilibili 本期主要介绍原理图中的基本操作&…

设计模式学习笔记 - 项目实战一:设计实现一个支持各种算法的限流框架(实现)

概述 上篇文章,我们介绍了如何通过合理的设计,来实现框架的功能性需求的同时,满足易用、易扩展、灵活、低延迟、高容错等非功能性需求。在设计的过程中,我们也借鉴了之前讲过的一些开源项目的设计思想。比如 Spring 的低侵入松耦…

005 延时交换机

文章目录 延时交换机插件的安装PluginsDelayConfigProducer.javaConsumer.javaapplication.yaml RabbitMQ中既有延时队列的概念,也有延时交换机的概念,但两者在实现机制上有所不同。以下是关于这两者的详细解释: 延时队列: 延时队…

视频通话实时换脸:支持训练面部模型 | 开源日报 No.235

iperov/DeepFaceLive Stars: 19.7k License: GPL-3.0 DeepFaceLive 是一个用于 PC 实时流媒体或视频通话的人脸换装工具。 可以使用训练好的人脸模型从网络摄像头或视频中交换面部。提供多个公共面部模型,包括 Keanu Reeves、Mr. Bean 等。支持自己训练面部模型以…

web server apache tomcat11-24-Virtual Hosting and Tomcat

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…