当前位置: 首页 > news >正文

湖北网站推广服务网站建设一年600

湖北网站推广服务,网站建设一年600,南昌高端网站开发费用表,做网站得基础2024.1.28 题目来源我的题解方法一 深度搜索#xff08;DFS#xff09;/广度搜索#xff08;BFS#xff09;方法二 数学 题目来源 力扣每日一题#xff1b;题序#xff1a;365 我的题解 方法一 深度搜索#xff08;DFS#xff09;/广度搜索#xff08;BFS#xff… 2024.1.28 题目来源我的题解方法一 深度搜索DFS/广度搜索BFS方法二 数学 题目来源 力扣每日一题题序365 我的题解 方法一 深度搜索DFS/广度搜索BFS 首先对题目进行建模。观察题目可知在任意一个时刻此问题的状态可以由两个数字决定X 壶中的水量以及 Y 壶中的水量。 在任意一个时刻我们可以且仅可以采取以下几种操作   把 X 壶的水灌进 Y 壶直至灌满或倒空   把 Y 壶的水灌进 X 壶直至灌满或倒空   把 X 壶灌满   把 Y 壶灌满   把 X 壶倒空   把 Y 壶倒空。 因此本题可以使用深度优先搜索来解决。搜索中的每一步以 cap1, cap2 作为状态即表示 X 壶和 Y 壶中的水量。在每一步搜索时我们会依次尝试所有的操作递归地搜索下去。这可能会导致我们陷入无止境的递归因此我们还需要使用一个哈希结合HashSet存储所有已经搜索过的 cap1, cap2 状态保证每个状态至多只被搜索一次。但是由于数据量问题导致递归空间不足因此最终使用广度优先实现。 时间复杂度O(xy)状态数最多有 (x1)(y1)种对每一种状态进行深度优先搜索的时间复杂度为 O(1)因此总时间复杂度为 O(xy)。 空间复杂度O(xy),由于状态数最多有 (x1)(y1) 种哈希集合中最多会有 (x1)(y1) 项因此空间复杂度为 O(xy)。 //未使用哈希函数进行优化直接将两个杯子的值构建字符串利用字符串类重写了哈希函数的特点保证集合中出现的内容唯一。public boolean canMeasureWater(int x, int y, int z) {if (x y z) {return false;}if (x z || y z || x y z) {return true;}Queueint[] queue new LinkedList();queue.offer(new int[]{0, 0});SetLong seen new HashSet();while (!queue.isEmpty()) {int[] state queue.poll();int remain_x state[0], remain_y state[1];if (seen.contains(hash(state))) {continue;}seen.add(hash(state));if (remain_x z || remain_y z || remain_x remain_y z) {return true;}// 把 X 壶灌满。queue.offer(new int[]{x, remain_y});// 把 Y 壶灌满。queue.offer(new int[]{remain_x, y});// 把 X 壶倒空。queue.offer(new int[]{0, remain_y});// 把 Y 壶倒空。queue.offer(new int[]{remain_x, 0});// 把 X 壶的水灌进 Y 壶直至灌满或倒空。queue.offer(new int[]{remain_x - Math.min(remain_x, y - remain_y), remain_y Math.min(remain_x, y - remain_y)});// 把 Y 壶的水灌进 X 壶直至灌满或倒空。queue.offer(new int[]{remain_x Math.min(remain_y, x - remain_x), remain_y - Math.min(remain_y, x - remain_x)});}return false;} //使用哈希函数进行优化自定义哈希函数。 public boolean canMeasureWater(int x, int y, int z) {if (x y z) {return false;}if (x z || y z || x y z) {return true;}Queueint[] queue new LinkedList();queue.offer(new int[]{0, 0});SetLong seen new HashSet();while (!queue.isEmpty()) {int[] state queue.poll();int remain_x state[0], remain_y state[1];if (seen.contains(hash(state))) {continue;}seen.add(hash(state));if (remain_x z || remain_y z || remain_x remain_y z) {return true;}// 把 X 壶灌满。queue.offer(new int[]{x, remain_y});// 把 Y 壶灌满。queue.offer(new int[]{remain_x, y});// 把 X 壶倒空。queue.offer(new int[]{0, remain_y});// 把 Y 壶倒空。queue.offer(new int[]{remain_x, 0});// 把 X 壶的水灌进 Y 壶直至灌满或倒空。queue.offer(new int[]{remain_x - Math.min(remain_x, y - remain_y), remain_y Math.min(remain_x, y - remain_y)});// 把 Y 壶的水灌进 X 壶直至灌满或倒空。queue.offer(new int[]{remain_x Math.min(remain_y, x - remain_x), remain_y - Math.min(remain_y, x - remain_x)});}return false;}private long hash(int[] state) {return (long) state[0] * 1000001 state[1];}方法二 数学 数学理论看官方题解 时间复杂度O(log(min(x,y)))取决于计算最大公约数所使用的算法的时间复杂度 空间复杂度O(1) public boolean canMeasureWater(int jug1Capacity, int jug2Capacity, int targetCapacity) {if(jug1Capacityjug2CapacitytargetCapacity)return false;if(jug1Capacity0||jug2Capacity0)return targetCapacity0||jug1Capacityjug2CapacitytargetCapacity;return targetCapacity%gcd(jug1Capacity,jug2Capacity)0; } public int gcd(int x,int y){int zx%y;while(z!0){xy;yz;zx%y;}return y; }有任何问题欢迎评论区交流欢迎评论区提供其它解题思路代码也可以点个赞支持一下作者哈~
http://www.w-s-a.com/news/549351/

相关文章:

  • 四川省建设人才网站2018南京专业建站
  • ppt制作网站推荐seo教程百度网盘
  • 网站建设多少钱一平米网上商城网站开发报告
  • 福州网站建设招聘信息哈尔滨中企动力科技股份有限公司
  • 军事新闻最新seo关键词查询排名软件
  • 免费网站建设官网项目建设表态发言
  • 平谷建站推广广告投放平台主要有哪些
  • 网站备案掉了什么原因步骤怎么读
  • 徐州市建设监理协会网站做一个公司官网需要多少钱
  • 网站开发学什么数据库做公司网站注意事项
  • 游戏开发网站建设国际战事最新消息
  • 达州+网站建设网站里自己怎么做推广
  • 看网站建设公司的网站案例熊掌号接入wordpress
  • 黄石下陆区建设局网站wordpress如何拖移小工具
  • 宁波网站建设信息网站开发看书
  • 网站建设优化价格北京优化seo排名
  • 微信网站建设公司费用高端网站建设 炫酷
  • 北京网站假设销售找客户最好的app
  • 做外贸需要关注的网站有什么好处宜州设计公司
  • 公司最近想做个网站怎么办陕西科强建设工程有限公司官方网站
  • 生态城门户网站 建设动态it外包收费
  • 网站项目评价老渔哥网站建设公司
  • 哈尔滨寸金网站建设价格178软文网
  • 一个网站建设的成本网站开发过程及要点
  • 监控视频做直播网站中国建筑人才网下载
  • 网站建设公司华网天下买送活动集团网站设计案例
  • 哪些网站比较容易做哪个网站做中高端衣服
  • 做php网站教程wordpress去水印
  • 深圳微网站建设公司哪家好潍坊专业做网站的公司
  • 网站的弹窗广告怎么做软件开发包括