程序员须知:大厂面试最容易被问到的算法题(附答案)

谷歌面试题:最小步数

描述
有一个1∗n的棋盘,分别标号为0,1,2…n−1,棋盘的每个格子都有一种颜色。
现在,在0号位置有一枚棋子,请求出最少移动几步能到达最后一格。
棋子有3种移动的方法,且棋子不能移出到棋盘外:

  1. 棋子从位置 i 移动到位置 i+1。
  2. 棋子从位置 i 移动到位置 i−1。
  3. 如果位置 i 和位置 j 的颜色相同,那么棋子可以直接从位置 i 移动到位置 j。
    棋盘的大小为 1∗n,2≤n≤105。
    第 i 格子的颜色编号 colorsi,满足 1≤colorsi≤n。

在线评测地址

样例1

输入:
colors = [1, 2, 3, 3, 2, 5]
输出:
3
解释:
在样例中,棋子最少用 3 步走到最后的位置:
1. 从位置 0 走到位置 1。
2. 由于位置 1 和位置 4 的颜色相同,从位置 1 走到位置 4。
3. 从位置 4 走到位置 5。

解题思路
可以将棋盘看作一个所有边权为 11 的图,棋盘的格子就是图的节点,每个节点与相邻的节点各有一条边,与相同颜色的格子有一条边。我们需要在图上找到一条从位置 00 到位置 n−1n−1 的最短路。
由于图的边权均为 11,我们可以通过宽度优先搜索来完成。宽度优先搜索通过维护一个队列来计算最短路,每次取出队首的元素,并将相邻的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值