假设我们有一辆汽车,它在无穷编号线上的位置0开始,速度+1。赛车会按照以下说明自动运行:A:加速,R-反向。当我们收到指令“ A”时,我们的汽车将执行以下操作:
位置:=位置+速度,然后速度=速度* 2。
当我们收到指令“ R”时,我们的汽车将执行以下操作:
如果速度为正,则速度= -1,
否则速度= 1。
例如,执行完“ AAR”指令后,我们的汽车将转到位置0-> 1-> 3-> 3,速度将变为1-> 2-> 4->-1。
现在假设我们有一些目标位置。我们必须找到最短指令序列的长度才能到达那里。
因此,如果输入类似于target = 6,则输出将为5,因为可能的序列之一是AAARA,位置序列将为0-> 1-> 3-> 7-> 7-> 6
为了解决这个问题,我们将遵循以下步骤-
定义一组参观
定义一个队列q
将{0,1}插入q
对于初始化级别:= 0,如果非q为空,则更新(将级别增加1),执行-
定义一对curr:= q的前元素,从q删除元素
如果第一个与目标相同,则-
前进:=当前第一个+当前第二个
forwardSpeed:=当前秒* 2
键:=将正向转换为字符串并置“ *”将并转正向速度转换为字符串
如果正向> 0且|正向-目标| <没有访问目标和非键,则-
key:=将curr的第一个转换为字符串连接“ *”,当curr的第二个> 0时连接0,否则为-1
如果curr.first> 0并且| target-curr.first | <未访问目标和键,则-
回报水平
将键插入已访问
将{forward,forwardSpeed}插入q
将键插入已访问
将{curr.first(如果curr.second> 0,然后是-1,否则为1})插入q
对于初始化k:= q的大小,当k> 0时,更新(将k减1),执行-
返回-1
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int racecar(int target) { unordered_set < string > visited; queue < pair <int ,int> > q; q. push({0, 1}); for(int level = 0; !q.empty(); level++){ for(int k = q.size(); k > 0; k-- ){ pair <int, int> curr = q.front(); q.pop(); if(curr.first == target) return level; int forward = curr.first + curr.second; int forwardSpeed = curr.second * 2; string key = to_string(forward) + "*" + to_string(forwardSpeed); if(forward > 0 && abs(forward - target) < target && !visited.count(key)){ visited.insert(key); q.push({forward, forwardSpeed}); } key = to_string(curr.first) + "*" + to_string(curr.second > 0 ? - 1: 1); if(curr.first > 0 && abs(target - curr.first) < target && !visited.count(key)){ visited.insert(key); q.push({curr.first, curr.second > 0 ? - 1: 1}); } } } return -1; } }; main(){ Solution ob; cout << (ob.racecar(6)); }
6
输出结果
5
又来几封感谢信,真的顶不住了,emo着面完的 问的网络编程比较多 面试时长:30min 面试内容: * 自我介绍 * 内存泄漏解决 * 哈希表查找慢怎么办 * rehash * 阻塞方式有哪些 * io多路复用 * 网络编程 * c和c++区别 * 平时遇到问题会怎么解决 * code review过吗 * nlogn的排序 * 归并排序过程 * 链表实现的方式有哪些
捞经 一面,项目+八股 二面,项目+hr问题,说到C会枯燥,我迟疑了一下哈哈哈 我跟同门同一天一二面的,同门9.14就通知意向,提交材料。 我9.28被捞起来,突然通知通过,29就联系谈薪资。😬😬还说优先考虑我,我不是很认可。😬😬😬 正式批女生10%坑位#中新赛克#
中新赛克(提前批) C开发 6.15 官网投递 6.30 一面 视频面试 20min 1、自我...... 2、从简历上挑了一个项目让我陈述,正好前几天过了一下细节,还算顺利 3、项目用的32芯片,问是裸板开发还是基于系统,什么系统 4、Linux熟悉到什么程度,我说还可以,也没继续问😂 5、简单的C八股,static、volatile、堆和栈的区别,各种变量的存储
1.自我介绍 2.字节测开的广告业务介绍,有什么难点 3.go的反射 4.多态的实现,仔细讲讲 5.虚函数,父类怎么确定要调用哪个子类 6,指针和引用,然后出了一个,int a;int *p = &a; int &p = a大概是这个样子,问pqa地址是否一样 7.指针有几级,两级指针代表什么,什么情况下使用 两级指针就是指向一级指针的指针。简单地说,如果一个二级指针指向一个一级指针,那么这个二级
9月14号,一面,时间约35min, 自我介绍,上来看代码,两道简单程序题,一到手写简单实现mmcp函数, 大端序小端序了不了解?如何判断是大端序还是小端序?联合体了解吗?(引导回答正确答案),如何使用联合体判断大小端? 进程间通信方式有哪些?使用共享内存时要注意什么?使用或了解过哪些锁?自旋锁了解吗? static关键字了不了解?说一下作用?修饰一个普通成员变量时,会有什么特性? 讲一讲项目,在
问我有没有嵌入式的使用经验,问单片机的启动过程(我直接说嵌入式都是本科学的东西,现在记不太清了,凉啊) 问了我一些项目的问题,简要给他说了下。又问了我懂不懂移动通信(说学了忘了)。 又问了我为啥学的是雷达不是嵌入式(这个问题该如何回答呀,我实话实说的:怕遇见渣导找师姐推荐的) 后面看到又有新人进来了直接就叫说没有问我的了 我看项目招聘需求上也没说要搞嵌入式呀