[leedcode][JAVA][365][BFS]

【问题描述】

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶
清空任意一个水壶
从一个水壶向另外一个水壶倒水,直到装满或者倒空
示例 1: (From the famous "Die Hard" example)输入: x = 3, y = 5, z = 4
输出: True
示例 2:输入: x = 2, y = 6, z = 5
输出: False

【解答思路】

1. 广度优先遍历BFS
  • set 确保情况不重复
  • queue 遍历所有情况
public boolean canMeasureWater_BFS(int x, int y, int z) {if (z < 0 || z > x + y) {return false;}Set<Integer> set = new HashSet<>();Queue<Integer> q = new LinkedList<>();
//巧妙过度q.offer(0);
//遍历所有情况 第一次 x,y入队列while (!q.isEmpty()) {int n = q.poll();
//巧妙限制条件!if (n + x <= x + y && set.add(n + x)) {q.offer(n + x);}if (n + y <= x + y && set.add(n + y)) {q.offer(n + y);}if (n - x >= 0 && set.add(n - x)) {q.offer(n - x);}if (n - y >= 0 && set.add(n - y)) {q.offer(n - y);}if (set.contains(z)) {return true;}}return false;
}
2.数学方法 最大公约数
public boolean canMeasureWater(int x, int y, int z) {if (z == 0) return true;if (x + y < z) return false;int big = Math.max(x, y);int small = x + y - big;if (small == 0) return big == z;//最大公约数 while (big % small != 0) {int temp = small;small = big % small;big = temp;}return z % small == 0;
}

【总结】

1. 想清楚所有可能,列小点实现,善用容器,巧用边界
2. Queue操作
  • add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
  • remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
  • element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
  • offer 添加一个元素并返回true 如果队列已满,则返回false
  • poll 移除并返问队列头部的元素 如果队列为空,则返回null
  • peek 返回队列头部的元素 如果队列为空,则返回null
  • put 添加一个元素 如果队列满,则阻塞
  • take 移除并返回队列头部的元素
3.Collections

Set 和List 都继承了Conllection,Map没有
Collection接口的方法

  • boolean add(Object o) :向集合中加入一个对象的引用
  • void clear() :删除集合中所有的对象,即不再持有这些对象的引用
  • boolean isEmpty() :判断集合是否为空
  • boolean contains(Object o): 判断集合中是否持有特定对象的引用
  • Iterartor iterator() : 返回一个Iterator对象,可以用来遍历集合中的元素
  • boolean remove(Object o):从集合中删除一个对象的引用
  • int size() :返回集合中元素的数目
  • Object[] toArray() :返回一个数组,该数组中包括集合中的所有元素
  • 关于:Iterator() 和toArray() 方法都用于集合的所有的元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。
    Iterator接口声明了如下方法:
  • hasNext(): 判断集合中元素是否遍历完毕,如果没有,就返回true
  • next() :返回下一个元素
  • remove():从集合中删除上一个有next()方法返回的元素。
    Set 的 add()方法是如何判断对象是否已经存放在集合中?
    boolean isExists=false;Iterator iterator=set.iterator();while(it.hasNext())           {String oldStr=it.next();if(newStr.equals(oldStr)){isExists=true;}

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

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

相关文章

玩转oracle 11g(36):rman备份-控制文件丢失恢复

ORA-00205: error in identifying control file, check alert log for more info 检查oracle的报警日志包含类似报错&#xff1a; ORA-00210: cannot open the specified control file ORA-00202: control file: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOCARE\C ONTROL01.CTL OR…

=在 java中怎么表示_在Java中各种类型运算符的介绍与其基本使用方式(有具体使用示例)...

一.算数运算符基本四则运算符 - * / %(使用规则简单&#xff0c;正常使用即可)注意事项&#xff1a;a) int/int 结果还是 int 要保留小数需要使用double来计算int a 1;int b 2;System.out.println(a/b);//结果为0b)0不能作为出除数c)%表示取余不仅仅可以对int求模&#xff0…

【旧文章搬运】无Device的驱动如何通信

原文发表于百度空间&#xff0c;2009-07-14 标准的驱动与ring3的通信过程是这样的&#xff1a;驱动中创建设备&#xff0c;并为设备创建符号链接&#xff0c;ring3用CreateFile打开符号链接得到设备句柄&#xff0c;然后DeviceIoControl发送ControlCodeDeviceIoControl的内容被…

[Leedcode][JAVA]第[945]题

【问题描述】 给定整数数组 A&#xff0c;每次 move 操作将会选择任意 A[i]&#xff0c;并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例 1:输入&#xff1a;[1,2,2] 输出&#xff1a;1 解释&#xff1a;经过一次 move 操作&#xff0c;数组将变为 [1, 2, 3]。…

玩转oracle 11g(37):rman备份-数据库指定文件恢复

.数据库指定数据文件恢复 启动数据库的时候报错 ORA-01157: cannot identify/lock data file 5 - see DBWR trace file ORA-01110: data file 5: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOCARE\AP MEDCOMM.DBF ORA-27041: unable to open file OSD-04002: 无法打开文件 O/S-Erro…

java xpath 解析xml_使用XPATH解析XML文件

使用XPATH解析XML文件import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class TestXPath {public static void main(String[] args) throws Docum…

并发编程-concurrent指南-原子操作类-AtomicBoolean

类AtomicBoolean 可以用原子方式更新的 boolean 值。有关原子变量属性的描述&#xff0c;请参阅 java.util.concurrent.atomic 包规范。AtomicBoolean 可用在应用程序中&#xff08;如以原子方式更新的标志&#xff09;&#xff0c;但不能用于替换 Boolean。 2.构造函数 1.Atom…

[剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]

【问题描述】 大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&#xff0c;请你输出斐波那契数列的第n项&#xff08;从0开始&#xff0c;第0项为0&#xff09;。 n<39 【解答思路】 1.递归&#xff08;面试避免&#xff09; O(n^2) public class Solution {pu…

JVM 内存设置大小(Xms Xmx PermSize MaxPermSize 区别)

Eclipse崩溃&#xff0c;错误提示&#xff1a;MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to increase …

玩转oracle 11g(38):rman备份-全库恢复

(1)选择“开始” “运行”&#xff0c;输入cmd&#xff0c;按回车。 (2)输入“ set oracle_sidorcl”&#xff0c;按回车。 &#xff08;oracle_sid根据自己库的设置写&#xff09; (3)输入“rman target /”&#xff0c;按回车 (4)关闭数据库。输入“shutdown immediate;”…

[Leedcode][JAVA][第876题][快慢指针]

【问题描述】 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;[1,2,3,4,5] 输出&#xff1a;此列表中的结点 3 (序列化形式&#xff1a;[3,4,5]) 返回的结…

玩转oracle 11g(39):oracle11g密码过期后的解决方法

在使用oracle11g数据库的过程中经常会遇到密码180天过期的问题&#xff0c;这是因为oracle11g中默认在default概要文件中设置了“PASSWORD_LIFE_TIME180天”导致的&#xff0c;在此分享一个比较好用的解决办法 1、查看用户的proifle是哪个&#xff0c;一般是default&#xff1…

Django补充

django页面渲染具体流程 在django的页面渲染中&#xff0c;下面这段程序 def test1(request):return render(request,aa.html,{data:wusir}) 等同于 from django.template import loader def test1(request):html loader.get_template(aa.html)html_str html.render({data:wu…

算法复杂度-BigO表示法

1.时间复杂度--大O表示法 算法的渐进时间复杂度&#xff0c;T(n)O(f(n)) T&#xff08;n&#xff09;表示算法的渐进时间复杂度 f&#xff08;n&#xff09;表示代码执行的次数 O&#xff08;&#xff09;表示正比例关系 2.常用的时间复杂度量级 3.举例 &#xff08;1&am…

java代码连接redis_java代码连接redis

需要的maven依赖redis.clientsjedis2.9.0代码&#xff1a;package yofc;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import java.net.URI;public class demo {private static JedisPool pool null;/…

[Leedcode][JAVA][按摩师][动态规划]

【问题描述】 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时间&#xff0c;因此她不能接受相邻的预约。给定一个预约请求序列&#xff0c;替按摩师找到最优的预约集合&#xff08;总预约时间最长&#xff0…

玩转oracle 11g(40):Oracle11g 不区分大小写设定

Cmd>sqlplus / as sysdba Sql>show  parameter sec_case_sensitive_logon parameter sec_case_sensitive_logon的值为“true”说明区分大小写&#xff0c;为“false”说明不区分大小写&#xff0c;当为“true”时执行以下语句 ALTER SYSTEM SET SEC_CASE_SENSITIVE_…

字串转日期

字串转日期 select date_format(concat(trans_recv_date,trans_recv_time),%Y-%m-%d %T.%f) from cc_qrcode_ride_trans limit 10;转载于:https://www.cnblogs.com/huiandong/p/10185591.html

java mtom_java-axis1.4客户端使用Mtom发送文件

我正在尝试将带有axis1.4客户端的文件发送到jaxws服务.我的客户代码如下.System.out.println(service.getCalcImplPort().getFile(new DataHandler(new DataSource() {Overridepublic OutputStream getOutputStream() throws IOException {// TODO Auto-generated method stubr…

[Leedcode][JAVA][第892题][图形题]

【问题描述】 在 N * N 的网格上&#xff0c;我们放置一些 1 * 1 * 1 的立方体。每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。请你返回最终形体的表面积。示例 1&#xff1a;输入&#xff1a;[[2]] 输出&#xff1a;10 示例 2&#xff1a;输入&#xf…