每日一题一题之 hiho1786 跳石头

这篇博客探讨了一个关于跳石头的问题,小Ho需要从第一个石头跳到第n个,每步可以跳到相邻的石头或者颜色相同的右侧石头。博主通过分享样例输入和输出,解释了如何使用动态规划(DP)解决这个问题,特别是关注如何记录同色石头的右侧首次出现位置,以确定最少跳跃步数。
摘要由CSDN通过智能技术生成

描述
有 n 个石头从左到右拍成一排,第 i 个石头的颜色为 ci 。现在小 Ho 在第一个石头,他想跳到第 n 个石头,每一步有两种跳跃方式:

  1. 从第 i 个石头跳到第 i+1 个石头

  2. 跳到右边第一个和当前石头颜色相同的石头(如果存在的话)

现在他想知道,从第一个石头跳到第 n 个石头至少需要几步跳跃

输入
第一行一个正整数 n

第二行 n 个正整数,表示ci

1 ≤ n, ci ≤ 2 × 105

输出
输出至少需要几步跳跃

样例输入
6
1 2 1 3 4 2
样例输出
2

思路:

一开始直接写了个bfs结果不知道哪里出问题了。后来上了dp,感觉自己dp还是弱了。
主要的点是想办法保存同种颜色石头的右边第一次出现的位置。可以用一个tmp数组记录a[i] 这个颜色石头的最后一次的位置,然后从后往前遍历,令 pre[i]=tmp[a[i]]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值