LeetCode每日一题———365. 水壶问题
解法一
鸡冻,又一道自己独立解出来的问题! 加油骚年!!!
水壶问题,一开始自己思考嘛,想到肯定是要大壶往小壶里倒水,然后小壶倒满之后再倒掉,大壶继续倒水,在这个过程中,要考虑两种情况,第一种是小壶倒满的时候,大壶剩下的水是否 == z,另一种情况是当小壶倒不满的时候(也是大壶倒空了需要重新加满的时候),这时候小壶的水+大壶的满水是否 == z。
那么需要倒到什么时候呢? 我用了一个最小公倍数来统计操作次数。 假设大小壶分别是11, 4,那么最小公倍数是44,也就是说(44-4)%11的操作要执行44/4=11 次,这块可以自己试一下,感觉写出来好麻烦的样子,我是自己纸上画了画搞出来的。
class Solution {
public:bool canMeasureWater(int x, int y, int z) {if (x + y < z) return false; if (x == 0 || y == 0) return z == 0 || x + y == z; //判断 边界if(x>y) //y为大壶 {int m = x;x = y;y = m;}long x1 = x; //这里用long的原因是后面测试用例里的数据超过了int范围long y1 = y;long k = _lcm_(x1,y1); //最小公倍数for(long i = k/x;i>-1;i--){k = k-x;if(k % y == z || (k%y+y) == z) //判断能否达到z值return true;}return false;}//最小公倍数函数,辗转相除法求最大公约数,然后用乘积相除long _lcm_(long x, long y) {long n = 0;long x2 = x;long y2 = y;while(x2 != 0){n = y2 % x2;y2 = x2;x2 = n;}return ((x*y)/(y2));}
};
最后时间复杂度是O(xy),空间复杂度还不会算 - - !
官方解法
贝祖定理???w t f???没听说过啊
贝祖定理告诉我们,ax+by=z 有解当且仅当 z 是 x, y 的最大公约数的倍数。因此我们只需要找到 x, y的最大公约数并判断 z 是否是它的倍数即可。
长见识了。。。附上证明链接
代码真是简洁明了啊,一行解决问题!!
class Solution {
public:bool canMeasureWater(int x, int y, int z) {if (x + y < z) return false;if (x == 0 || y == 0) return z == 0 || x + y == z;return z % gcd(x, y) == 0; //gcd->求最大公约数}
};
时间复杂度:O(log(min(x, y))),取决于计算最大公约数所使用的辗转相除法。
空间复杂度:O(1),只需要常数个变量。
LeetCode每日一题———365. 水壶问题相关推荐
- LeetCode 每日一题 365.水壶问题
有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水. 你允许: 装满任意 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- leetcode每日一题·救生艇问题(Python)
leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...
- LeetCode每日一题——904. 水果成篮
LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...
最新文章
- The source attachment does not contain the source for the file Activity.class
- Exchange2013恢复已删除用户邮箱
- xampp默认mysql数据库root密码的修改
- 源码安装的php如何启动脚本,PHP源码编译安装管理常用脚本
- x390拆机_用了七八年的笔记本电脑依然流畅如初,从X230i换到X390
- tomcat知识点总结
- 数据库删除表中多列语法总结
- python二级基础题,计算机二级python部分基础操作题
- Android Studio中Intent的一些相关知识
- 《周一清晨的领导课》--司机与乘客 - [读书笔记]
- ORACLE EBS常用表
- mysql分隔符_在sql文件中设置MySQL分隔符
- Linux 安装httpd(apache)超详细教程
- 【Ubuntu18.04 无法找到终端 ifconfig 命令】
- rabbitMq工作模式特性及整合springboot
- redhat9如何安装gcc
- python写一个网络测速脚本_Python实现网络测试的脚本分享详解
- python的词法结构(行、注释、文件编码、标识符、关键字和字面值)
- 顺序表和链表各自的优缺点
- ABOV单片机空工程文件的创建-[MC96F6332D]