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

制作网站建设策划方案今日新闻头条官网

制作网站建设策划方案,今日新闻头条官网,网站强制qq弹窗代码,做网站需要专业到家的最少跳跃次数【LC1654】 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。 跳蚤跳跃的规则如下: 它可以 往前 跳恰好 a 个位置(即往右跳)。它可以 往后 跳恰好 b 个位置(即往左跳&…

到家的最少跳跃次数【LC1654】

有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。

跳蚤跳跃的规则如下:

  • 它可以 往前 跳恰好 a 个位置(即往右跳)。
  • 它可以 往后 跳恰好 b 个位置(即往左跳)。
  • 它不能 连续 往后跳 2 次。
  • 它不能跳到任何 forbidden 数组中的位置。

跳蚤可以往前跳 超过 它的家的位置,但是它 不能跳到负整数 的位置。

给你一个整数数组 forbidden ,其中 forbidden[i] 是跳蚤不能跳到的位置,同时给你整数 abx ,请你返回跳蚤到家的最少跳跃次数。如果没有恰好到达 x 的可行方案,请你返回 -1

  • 思路:最短路问题,BFS

    • **BFS:**寻找最少跳跃次数,所以可以使用最短路径Dijkstra 算法,通过BFS实现,队列元素需要存储当前跳跃次数以及当前位置;

    • **记录状态:**由于跳跃时连续向前次数不受限制,但是不能连续向后跳两次,因此跳跃时还需要记录前一跳跃的状态为向后还是向前;

      • 如果前一状态为向前,那么本次可以向前也可以向后
      • 如果前一状态为向后,那么本次只可以向前
    • 判断是否可以访问:

      • 首先判断最远右边界,由于向前跳跃次数不受限制,避免超时,需要寻找最远右边界【重点】
      • 当前位置不在forbidden数组中
      • 之前没有访问过该状态【位置+方向】
    • 寻找最远右边界:

      • 如果 a ≥ b a\ge b ab,那么最远右边界为 x + b x+b x+b,在大于 x + b x+b x+b的位置不可能到达 x x x

      • 如果 a < b a\lt b a<b,那么可以先向前跳再向后跳逐步接近目标位置 x x x,最远右边界为 m a x ( f + a + b , x ) max(f+a+b, x) max(f+a+b,x),其中 f f f m a x ( f o r b i d d e n ) max(forbidden) max(forbidden)证明略。

        感性认知:对于任何一条路径,若它包含了超过 m a x ( f + a + b , x ) max(f+a+b, x) max(f+a+b,x)的点,总能通过变换找到所有点都在 m a x ( f + a + b , x ) max(f+a+b, x) max(f+a+b,x)内的路径,且这条路径与原路径跳跃次数相同,对于该问题,这两条路径是等价的,所以只需考虑 m a x ( f + a + b , x ) max(f+a+b,x) max(f+a+b,x)内的路径即可

  • 实现

    class Solution {public int minimumJumps(int[] forbidden, int a, int b, int x) {Set<Integer> vis = new HashSet<>();Deque<int[]> pq = new LinkedList<>();// 跳跃次数、当前位置、连续向后跳次数int max = 0;       for (int f : forbidden){vis.add(f);max = Math.max(max, f);}      if (a > b){max = x + b;}else{max = Math.max(max + a + b, x);}boolean[][] flag = new boolean[max + 1][2];// 向前 向后一次flag[0][0] = true;pq.addLast(new int[]{0, 0, 0});while (!pq.isEmpty()){int[] node = pq.pollFirst();if (node[1] == x) return node[0]; // 向前int forward = node[1] + a;if (forward <= max && !vis.contains(forward) && !flag[forward][0]){flag[forward][0] = true;pq.addLast(new int[]{node[0] + 1, forward, 0});}// 向后int backward = node[1] - b;if (node[2] != 1 && backward >= 0 && !vis.contains(backward) && !flag[backward][1]){flag[backward][1] = true;pq.addLast(new int[]{node[0] + 1, backward, 1});}}return -1;}
    }
    

http://www.dinnco.com/news/78565.html

相关文章:

  • 天河营销型网站建设自己搭建网站需要什么
  • 武汉有做夺宝网站的吗爱站关键词挖掘工具
  • 最专业的做网站公司哪家好设计好看的网站
  • 网站开发投标书关键字参数
  • 做淘宝一件代发的网站怎么样才能引流客人进店
  • 做网站需要考虑哪些问题小红书推广怎么做
  • 日照哪里有做网站的网址大全下载到桌面
  • 网站域名备案证明优化生育政策
  • 网站导航做外链优化关键词的公司
  • 政府网站栏目建设要求小红书信息流广告投放
  • 焦作建设网站哪家好友情链接论坛
  • 研发项目备案在哪个网站做美国今天刚刚发生的新闻
  • 当地建设局网站网络营销课程ppt
  • 免费发布工程信息网站发外链的网址
  • 海淀公司网站搭建爆款采集推广引流软件
  • 西安模板网站建设套餐百度公司招聘条件
  • 赣州建设监督网站常见的网络营销平台有哪些
  • 苏州建网站的公网站页面的优化
  • 建设部注册中心网站关键词在线下载
  • 湛江网站建设优化建站郑州做网站推广电话
  • 郑州专业手机网站制作企业宣传标语
  • 重庆有名的网站建设百度竞价怎么开户
  • erp管理系统的作用下载优化大师安装桌面
  • 网站备注查询百度网盘私人资源链接
  • 用来做视频连接的网站建站服务
  • 关于网站开发的外文书籍百度问答app下载
  • 建设网站注意事项做网络推广一个月的收入
  • 吉林大学学风建设专题网站360优化大师下载
  • 网站没备案做淘宝客seo外包公司多少钱
  • 响应式网站费用东莞网络公司电话