leetcode 365. 水壶问题【裴蜀定理】

原题链接:https://leetcode.cn/problems/water-and-jug-problem/description/

题目描述:

有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。

如果可以得到 targetCapacity 升水,最后请用以上水壶中的一或两个来盛放取得的 targetCapacity 升水。

你可以:

  • 装满任意一个水壶
  • 清空任意一个水壶
  • 从一个水壶向另外一个水壶倒水,直到装满或者倒空

输入输出描述:

示例 1: 

输入: jug1Capacity = 3, jug2Capacity = 5, targetCapacity = 4
输出: true
解释:来自著名的 "Die Hard"

示例 2:

输入: jug1Capacity = 2, jug2Capacity = 6, targetCapacity = 5
输出: false

示例 3:

输入: jug1Capacity = 1, jug2Capacity = 2, targetCapacity = 3
输出: true

提示:

  • 1 <= jug1Capacity, jug2Capacity, targetCapacity <= 10^6

解题思路:

当一个桶的容量是x,另一个桶的容量是y,那么每次的变化量必然是x或者y,那么这个时候就会有一个疑问了,如果我往一个不满的桶里面倒水或者将水倒掉变化量不就不是x或者y了吗,虽然这样看变化量不是x或者y,但是进一步分析你会发现这种操作实际上是没有意义的。

首先根据题目的三种操作,你可以得出一个结论就是不可能存在俩个桶都不满并且都有水的情况,至少一个桶为空或者为满。

当把一个不满并且有水的桶倒满时,如果另一个桶为空时,此时的状态就相当于从初始状态把这个不满的桶倒满,如果另一个桶为满时,此时的状态就相当于从初始状态把俩个桶都倒满。

当把一个不满的桶倒空时,如果另一个桶为空,那么此时就相当于初始状态,如果另一个桶为满时,那么此时的状态就相当于从初始状态把另一个桶倒满。

当把一个桶的水往另一个桶倒时,俩个桶的总水量是不变的。

通过上述分析我们可以发现,有些操作是没有意义的,我们每次操作水的总量的变化量一定是x或者y,也就是说我们需要找到整数a,b使得ax*by=z。

当x==0,y!=0时,那么此时只能凑出y和0。

当y==0,x!=0时,那么此时只能凑出x和0

当x==0,y==0时,那么此时只能凑出0

当x!=0,y!=0时,那么此时就是找到整数a,b使得ax+by=z,那么看到这个式子,如果学过一点数论的,那么很快就能想到裴蜀定理,裴蜀定理见下面百度百科链接:

裴蜀定理_百度百科

ax+by=gcd(x,y),根据裴蜀定理,这个等式一定存在(a,b)满足这个等式,那么只有当z是gcd(x,y)的倍数时才能凑出z,多少倍就对等式俩边乘以多少即可,这个是不影响等式的成立的。但是这个题目还有一个限制就是最多只能凑出x+y,所以当z>x+y是无解的,需要特判一下这种情况。

时间复杂度:使用gcd函数,时间复杂度为log(min(x,y))。

空间复杂度:O(1)。

cpp代码如下:

class Solution {
public:bool canMeasureWater(int x, int y, int z) {if(x+y<z){ // z>x+y所以无法凑出zreturn false;}if(x==0 || y==0){ return z==0||z==x+y;}return z%gcd(x,y)==0;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/682818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode.107. 二叉树的层序遍历 II

题目 107. 二叉树的层序遍历 II 分析 这个题目考查的是二叉树的层序遍历&#xff0c;对于二叉树的层序遍历&#xff0c;我们需要借助 队列 这种数据结构。再来回归本题 &#xff0c;我们只需要将 二叉树的层序遍历的结果逆序&#xff0c;就可以得到这道题我们要求的答案了。…

VS Code之Java代码重构和源代码操作

文章目录 支持的代码操作列表调用重构分配变量字段和局部变量的差别Assign statement to new local variable在有参构造函数中将参数指定成一个新的字段 将匿名类转换为嵌套类什么是匿名类&#xff1f;匿名类转换为嵌套类的完整演示 转换为Lambda表达式Lambda 表达式是什么?转…

[缓存] - 1.缓存共性问题

1. 缓存的作用 为什么需要缓存呢&#xff1f;缓存主要解决两个问题&#xff0c;一个是提高应用程序的性能&#xff0c;降低请求响应的延时&#xff1b;一个是提高应用程序的并发性。 1.1 高并发 一般来说&#xff0c; 如果 10Wqps&#xff0c;或者20Wqps &#xff0c;可使用分布…

数据库实验报告

用SQL语句和企业管理器建立如下的表结构并输入数据 给定表结构如下&#xff1a; 创建数据库 创建数据库 create table student(Sno int auto_increment primary key,Sname varchar(45),Ssex varchar(45),Sage int,Sdept varchar(45) )engine InnoDB default charsetutf8; …

Debezium发布历史129

原文地址&#xff1a; https://debezium.io/blog/2022/10/06/debezium-oracle-series-part-2/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium for Oracle - Part 2: Running the connector October 6,…

微服务间请求响应定义方式对比 (Apache Dubbo, IDL 定义,RESTful API)

服务间请求响应定义方式对比 1. Apache Dubbo 分布式RPC Apache Dubbo 是一种分布式服务框架&#xff0c;它提供了一种透明的 RPC 机制&#xff0c;可以让服务之间像调用本地方法一样进行调用。Dubbo 使用 IDL 来定义服务接口&#xff0c;并使用各种协议&#xff08;如 HTTP、…

Ubuntu下Anaconda+PyCharm搭建PyTorch环境

这里主要介绍在condapytorch都正确安装的前提下&#xff0c;如何通过pycharm建立开发环境&#xff1b; Ubuntu下AnacondaPyCharm搭建PyTorch环境 系统环境&#xff1a;Ubuntu22.04 conda: conda 23.11.0 pycharm:如下 condapytorch的安装教程介绍&#xff0c;请点击这里&…

jmeter-问题四:json断言时,预期结果那里如何不写成固定值?

文章目录 json断言时&#xff0c;预期结果那里如何不写成固定值&#xff1f;定义用户参数&#xff0c;然后在json断言的expected value处引用使用csv数据&#xff0c;然后在json断言的expected value处引用 json断言时&#xff0c;预期结果那里如何不写成固定值&#xff1f; 定…

软件实例分享,茶楼收银软件管理系统,支持计时计费商品销售会员管理定时语音提醒功能

软件实例分享&#xff0c;茶楼收银软件管理系统&#xff0c;支持计时计费商品销售会员管理定时语音提醒功能 一、前言 以下软件教程以 佳易王茶社计时计费管理系统软件V18.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 问&#xff1a;这个软…

腾讯云4核8G服务器多少钱?

腾讯云4核8G服务器多少钱&#xff1f;轻量应用服务器4核8G12M带宽一年446元、646元15个月&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;在txy.wiki可以查询详细配置和精准报价…

arkTS开发鸿蒙OS个人商城案例【2024最新 新年限定开发案例QAQ】

龙年前述 源码获取>文章下方二维码&#xff0c;回复关键字“鸿蒙OS商场源码” 前言 arkTS是华为自己研发的一套前端语言&#xff0c;是在js和ts技术的基础上又进行了升级而成&#xff01; 本篇文章会带领大家通过arkTSnode.jsmongoDB来完成一个鸿蒙OS版本的商城案例&…

一起玩儿Proteus仿真(C51)——06. 红绿灯仿真(二)

摘要&#xff1a;本文介绍如何仿真红绿灯 今天来看一下红绿灯仿真程序的具体实现方法。先来看一下整个程序的原理图。 在这个红绿灯仿真实验中&#xff0c;每个路口需要控制的设备是2位数码管显示倒计时以及红黄绿灯的亮灭。先来看一下数码管的连接方法。 数码管的8根LED显示…

Go语言的GC

参考链接 https://liangyaopei.github.io/2021/01/02/golang-gc-intro/ Go语言的垃圾回收机制是一种自动管理内存的机制&#xff0c;它负责在运行时自动回收不再被使用的内存。 以下是关于Go语言GC的一些关键点&#xff1a; 1. 并发标记清除算法&#xff08;Concurrent Mark a…

php5.0到5.6的新特性,开发时应注意版本的兼容性

php5.0 使用了Zend 2 引擎。 增加完善的面向对象模型 增加了新关键字&#xff0c;包括this,try,catch,public,private,protected等 改变strrpos() 和 strripos()使用整个字符串作为 needle。 改变array_merge() 只接受数组 改变非法使用字符串偏移量会导致 E_ERROR 而不是…

大模型Layer normalization知识

Layer Norm 的计算公式 Layer Norm&#xff08;层归一化&#xff09;是一种用于神经网络中的归一化技术&#xff0c;用于提高模型的训练效果和泛化能力。 RMS Norm 的计算公式 RMS Norm 的作用是通过计算输入 X 的均方根&#xff0c;将每个样本的特征进行归一化&#xff0c;使…

AD域国产替代方案,助力某金融企业麒麟信创电脑实现“真替真用”

近期收到不少企业客户反馈采购的信创PC电脑用不起来&#xff0c;影响信创改造的进度。例如&#xff0c;某金融企业积极响应国产化信创替代战略&#xff0c;购置了一批麒麟操作系统电脑。分发使用中发现了如下问题&#xff1a; • 当前麒麟操作系统电脑无法做到统一身份认证&…

优秀网络安全运营专家的成长之路

文章目录 前言一、基础阶段:掌握必要的网络安全运营技能1、了解网络系统2、网络安全监控3、网络流量分析4、日志分析和搜索能力5、端点安全保护6、加入活跃的网络和安全社区7、紧跟最新的行业咨询二、中级阶段:更深入地了解网络威胁1、情报分析能力2、云计算安全3、主动威胁搜…

【Java】零基础蓝桥杯算法学习——线性动态规划(一维dp)

线性dp——一维动态规划 1、考虑最后一步可以由哪些状态得到&#xff0c;推出转移方程 2、考虑当前状态与哪些参数有关系&#xff0c;定义几维数组来表示当前状态 3、计算时间复杂度&#xff0c;判断是否需要进行优化。 一维动态规划例题&#xff1a;最大上升子序列问题 Java参…

面试技术栈 —— 2024网易雷火暑期实习真题

面试技术栈 —— 2024网易雷火暑期实习真题 1. 最长递增子序列。2. 集中限流和单机限流你觉得哪个好&#xff1f;3. redis部署服务器配置&#xff0c;为什么不用哨兵&#xff1f;4. 讲讲分布式session的原理。5. 数据库&#xff1a;表数据量大了&#xff0c;如何分表&#xff1…

Python 读取pdf文件

Python 实现读取pdf文件简单示例。 安装命令 需要安装操作pdf的三方类库&#xff0c;命令如下&#xff1a; pip install pdfminer3K 安装过程如下&#xff1a; 引入类库 需要引入很多的类库。 示例如下&#xff1a; import sys import importlib importlib.reload(sys)fr…