描述
有 n 个石头从左到右拍成一排,第 i 个石头的颜色为 ci 。现在小 Ho 在第一个石头,他想跳到第 n 个石头,每一步有两种跳跃方式:
从第 i 个石头跳到第 i+1 个石头
跳到右边第一个和当前石头颜色相同的石头(如果存在的话)
现在他想知道,从第一个石头跳到第 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]]