力扣1518. 换水问题

题目链接

力扣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时,不再模拟。故可以得出以下的代码:

代码

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 要向下取整。

代码

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为剩余的无法兑换的水
    }
}

相关推荐

  1. 1518. 问题

    2024-04-28 00:38:04       36 阅读
  2. 1818.绝对差值和

    2024-04-28 00:38:04       31 阅读
  3. 背包问题

    2024-04-28 00:38:04       39 阅读
  4. 100】5.盛最多的容器

    2024-04-28 00:38:04       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-28 00:38:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-28 00:38:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-28 00:38:04       82 阅读
  4. Python语言-面向对象

    2024-04-28 00:38:04       91 阅读

热门阅读

  1. 【leetcode】对撞指针题目总结

    2024-04-28 00:38:04       32 阅读
  2. OpenCV如何使用分水岭算法进行图像分割

    2024-04-28 00:38:04       36 阅读
  3. 【贪心算法】Leetcode 55. 跳跃游戏【中等】

    2024-04-28 00:38:04       32 阅读
  4. 【运维】Gitlab备份

    2024-04-28 00:38:04       34 阅读
  5. 探究C++20协程(4)——协程中的调度器

    2024-04-28 00:38:04       25 阅读
  6. 清华大学 【战略管理的逻辑】全6讲笔记

    2024-04-28 00:38:04       24 阅读
  7. 【MySQL】数据库概述

    2024-04-28 00:38:04       32 阅读
  8. 【MySQL】基础知识

    2024-04-28 00:38:04       28 阅读
  9. k8s部署grafana

    2024-04-28 00:38:04       28 阅读
  10. Swift 中的条件语句:if 和 else

    2024-04-28 00:38:04       27 阅读
  11. 优雅实现uniapp返回上一页传参

    2024-04-28 00:38:04       32 阅读
  12. 通过idea插件一键将jar包发布到阿里云服务器部署

    2024-04-28 00:38:04       26 阅读
  13. 要搭建基于Python、Django和Oracle的框架怎么搭

    2024-04-28 00:38:04       30 阅读