【力扣每日一题】2023.8.30 到家的最少跳跃次数

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一只跳蚤,我们可以操控它前跳 a 格或是后跳 b 格,不能跳到小于0的位置,有一些被禁止的点不能跳到,也不能连续后跳两次,问我们最少跳几次可以让它回家。

一般寻找最短路径我们是用BFS的,不过我更喜欢DFS,所以我这边使用DFS,不过大体的思路是一样的,懂得怎么操作之后,两种方法都是可以自己写出来的。

要写出DFS不难,但是有三个点要注意。

第一点是不能连续后跳两次,所以我们传入递归函数的参数中需要记录上一次是前跳还是后跳。因为不能连续后跳两次,所以如果上一次是后跳,那么我们本次递归就只能前跳。如果上一次是前跳,那我们本次递归就可以后跳以及前跳。

第二点是边界范围,题目要求不能跳到小于0的位置,所以左边界是0。而右边界,由于我们可以跳到目标点的后面再后跳回来,所以我们右边界不能定为目标点。我原本以为一次最多就后跳b格,所以我把右边界设为了目标值+b,但是是行不通的。最终右边界设置为6000就可以了,因为题目有给出限制,目标点、a、b最大都是2000,那么把他们加起来就是6000,稍微思考一下就可以知道在最极端的情况下我们也不需要跳到6000往后的点,所以右边界设为6000即可。

不过还是有大佬把右边界的具体范围推导出来了,比较复杂,感兴趣的小伙伴可以自行去本题的题解里查看。

最后一点就是剪枝,因为我们可能会跳到重复的一个点,进而陷入死循环,所以我们需要在递归的时候将往前跳的落脚点设为被禁止的点,这样就不会重复跳到同一个点了。

不过往后跳的点不需要,因为如果是后跳跳到了一个点,那么接下来就只能是往前跳了。如果设置为了禁止点,那么如果后续递归中是往前跳跳到了这个点,那么本来是可以在这个点上往后跳的,但是由于设置为了禁止点,所以就会退出循环,这样就少了一种可能性,也就有可能会错失答案。

 

可能会有小伙伴会有疑问,后跳的点不设为禁止点不会进入死循环吗?

答案是不会的,因为如果下次是前跳到这个点了,那么还是会被设为禁止点。然而是不可能是后跳到重复的点,因为不能重复后跳两次,能够后跳到这个点的地方,一定是前跳到那个地方的,也就是会被设为禁止点,那么也就不可能再重复后跳到同一个点了。

所以本质上是让一个点最多能重复跳到两次,第一次是后跳到达,最后一次是前跳到达。

代码:

class Solution {
public:int res=INT_MAX;void find(unordered_set<int>&forbidden,int a,int b,int cur,int x,int temp,bool flag){if(cur<0||cur>6000||temp>=res) return;  //设置边界if(cur==x){res=min(res,temp);return;}//前跳if(!forbidden.count(cur+a)){    //如果下一个跳跃点不被禁止,那么跳跃forbidden.insert(cur+a);    //避免进入死循环,将跳跃点设为禁止点find(forbidden,a,b,cur+a,x,temp+1,true);}//后跳if(!forbidden.count(cur-b)&&flag){  //如果后跳的点不被禁止,并且上一次不是后跳,那么跳跃find(forbidden,a,b,cur-b,x,temp+1,false);//不将后跳的点设为禁止点,可能会错过答案.因为}}int minimumJumps(vector<int>& forbidden, int a, int b, int x) {unordered_set<int>s(forbidden.begin(),forbidden.end()); //将禁止点集合转为set方便查询find(s,a,b,0,x,0,true);return res==INT_MAX?-1:res;}
};

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

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

相关文章

系统架构设计高级技能 · Web架构

现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 Web架构 一、Web架构介绍1.1 Web架构涉及技术1.2 单台服务…

【JAVA】什么是异常

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 异常 1. 什么是异常1.1 概念1.2 异常的体…

函数名称add 与 add 作为参数传入的区别与探讨

在C和C中&#xff0c;函数名本身就是一个指向该函数代码的指针。因此&#xff0c;当你以函数名作为参数传递给其他函数时&#xff0c;实际上你传递的是该函数的地址。 对于你的代码&#xff0c;add是一个函数&#xff0c;&add是该函数的地址。由于add本身就代表了函数的地…

深圳产品展示视频拍摄一站式服务

产品展示视频拍摄一站式服务是指一家专业的拍摄制作公司或团队提供从策划、拍摄到后期制作的全方位服务&#xff0c;以满足客户的产品展示需求。这种服务通常包括以下方面&#xff0c;由产品展示视频制作公司老友记小编从以下几个方面为您整理&#xff1a; 1.策划和预制阶段&a…

RSA算法与错误敏感攻击

参见《RSA 算法的错误敏感攻击研究与实践》 RSA 算法简介 RSA 算法原理&#xff1a; 1&#xff09; RSA 算法密钥产生过程 &#xff08;1&#xff09;系统随机产生两个大素数 p p p 和 q q q&#xff0c;对这两个数据保密&#xff1b; &#xff08;2&#xff09;计算 n p …

小米面试题——不用加减乘除计算两数之和

前言 &#xff08;1&#xff09;刷B站看到一个面试题&#xff0c;不用加减乘除计算两数之和。 &#xff08;2&#xff09;当时我看到这个题目&#xff0c;第一反应就是感觉这是一个数电题目。不过需要采用C语言的方式编写出来。 &#xff08;3&#xff09;不过看到大佬的代码之…

代价高昂的 IT 错误:识别并避免供应商锁定

陷入不提供所需服务的云服务器合同中可能会非常痛苦、令人沮丧且成本高昂。 供应商锁定是提供商难以切换的地方&#xff0c;这意味着企业迁移到新供应商的成本太高、破坏性太大或耗时。 这使得公司受到供应商的摆布&#xff0c;尽管该服务可能无法提供他们所需的可靠性或可扩…

【高性能计算】opencl语法及相关概念(四):结合opencv进行图像高斯模糊处理

目录 高斯模糊简介主函数&#xff1a;host端设备端函数&#xff1a;mywork.cl效果图对比 高斯模糊简介 高斯模糊是一种常用的图像处理技术&#xff0c;用于减少图像中的噪点和细节&#xff0c;并实现图像的平滑效果。它是基于高斯函数的卷积操作&#xff0c;通过对每个像素周围…

亚马逊美国站上半年“日本商店”畅销品类了解一下吧!

近日&#xff0c;亚马逊美国站公布了2023年上半年“日本商店”&#xff08;JAPAN STORE&#xff09;的热门品类以及各品类销量排名前三的商品。据了解&#xff0c;亚马逊与日本贸易振兴机构 (JETRO) 合作&#xff0c;于2021年11月推出“日本商店”&#xff0c;支持日本卖家出海…

Ansible之playbooks剧本

文章目录 一.playbooks介绍1.playbooks简述2.playbooks剧本格式3.playbooks组成部分4.运行playbooks及检测文件配置 二.模块实战实例1.playbooks模块实战实例2.vars模块实战实例3.指定远程主机sudo切换用户4.when模块实战实例5.with_items迭代模块实战实例6.Templates 模块实战…

Unity 之 参数类型之值类型参数的用法

文章目录 基本数据类型结构体结构体的进一步补充 总结&#xff1a; 当谈论值类型参数时&#xff0c;我们可以从基本数据类型和结构体两个方面详细解释。值类型参数指的是以值的形式传递给函数或方法的数据&#xff0c;而不是引用。 基本数据类型 基本数据类型的值类型参数&…

vue去掉循环数组中的最后一组的某个样式style/class

vue去掉循环数组中的最后一组的某个样式style/class 需求&#xff1a;要实现这样的排列 现状 发现&#xff0c;最后一个格子并没有跟下面绿色线对齐。 最后发现 是因为 每个格子都给了 margin-right&#xff1a;36px&#xff0c;影响到了最后一个格子 所以要 将最后一个格子的…

OpenCV(十一):图像仿射变换

目录 1.图像仿射变换介绍 仿射变换&#xff1a; 仿射变换矩阵&#xff1a; 仿射变换公式&#xff1a; 2.仿射变换函数 仿射变换函数&#xff1a;warpAffine() 图像旋转&#xff1a;getRotationMatrix2D() 计算仿射变换矩阵&#xff1a;getAffineTransform() 3.demo 1.…

浅谈城市轨道交通视频监控与AI视频智能分析解决方案

一、背景分析 地铁作为重要的公共场所交通枢纽&#xff0c;流动性非常高、人员大量聚集&#xff0c;轨道交通需要利用视频监控系统来实现全程、全方位的安全防范&#xff0c;这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…

【Vue】集成百度地图

Vue 集成 百度地图 1、获取百度地图 ak 密钥 2、登录网址 https://lbsyun.baidu.com/ 3、注册百度地图开放平台账号&#xff0c;填写认证信息&#xff0c;并且创建应用 安装 npm install vue-baidu-map --savemain.js import BaiduMap from vue-baidu-map;Vue.use(BaiduM…

mybatisPlus多数据源方案

背景 在微服务李娜一般一个服务只有一个数据源&#xff0c;但是在有的老项目或者一些特定场景需要多数据源链接不同的数据库&#xff0c;本文以mybatisPlus为基础给出解决方案 多数据源场景分类 情形一&#xff1a;项目启动就确定了情形一&#xff1a;一些sass系统里面动态确…

[管理与领导-63]:IT基层管理者 - 潜技能 - 1 - 职场中的陷阱 - 看清楚职场中的霸凌现象

目录 前言&#xff1a; 1&#xff1a;打击自尊心 2&#xff1a;孤立他人 3&#xff1a;恶意针对 4&#xff1a;当众羞辱 5&#xff1a;持续性否定 前言&#xff1a; 职场中&#xff0c;什么样的人都有。 害人之心不可有&#xff0c;防人之心不可无。 前者教人从善&…

chatGPT训练过程

强化学习基础 强化学习是指智能体在不确定环境中最大化其获得的奖励从而达到自主决策的目的。其执行过程为&#xff1a;智能体依据策略决策从而执行动作&#xff0c;然后感知环境获取环境的状态&#xff0c;进而得到奖励(以便下次再到相同状态时能采取更优的动作)&#xff0c;…

《穷爸爸与富爸爸》时间是最宝贵的资产,只有它对所有人都是公平的

《穷爸爸与富爸爸》时间是最宝贵的资产&#xff0c;只有它对所有人都是公平的 罗伯特清崎&#xff0c;日裔美国人&#xff0c;投资家、教育家、企业家。 萧明 译 文章目录 《穷爸爸与富爸爸》时间是最宝贵的资产&#xff0c;只有它对所有人都是公平的[toc]摘录各阶层现金流图支…

WebSocket 协议及其使用案例

文章目录 前言一、初识 WebSocket 协议1.1 什么是 WebSocket 协议1.2 WebSocket 与 HTTP 的关系1.3 WebSocket 握手的过程1.4 WebSocket 解决了什么问题 二、WebSocket 数据帧格式2.1 WebSocket 数据帧格式图示2.2 各字段的详细说明 三、SpringBoot 项目中引入 WebSocket3.1 创…