题目

题目描述

给你一个数组 colors,里面有 1、2、 3 三种颜色。

我们需要在 colors 上进行一些查询操作 queries,其中每个待查项都由两个整数 i 和 c 组成。

现在请你帮忙设计一个算法,查找从索引 i 到具有目标颜色 c 的元素之间的最短距离。

如果不存在解决方案,请返回 -1。

示例 1:

输入:colors = [1,1,2,1,3,2,2,3,3], queries = [[1,3],[2,2],[6,1]] 输出:[3,0,3] 解释: 距离索引 1 最近的颜色 3 位于索引 4(距离为 3)。 距离索引 2 最近的颜色 2 就是它自己(距离为 0)。 距离索引 6 最近的颜色 1 位于索引 3(距离为 3)。 示例 2:

输入:colors = [1,2], queries = [[0,3]] 输出:[-1] 解释:colors 中没有颜色 3。

提示:

1 <= colors.length <= 510^4 1 <= colors[i] <= 3 1 <= queries.length <= 510^4 queries[i].length == 2 0 <= queries[i][0] < colors.length 1 <= queries[i][1] <= 3

v1-暴力解法

思路

直接 indexOf 比较左右两边。

此处不不做演示。

v2-HashMap+二分

思路

查找目标 首先我们会想到优化 二分是比较容易想到的方式。

怎么才能用二分呢?我们的元素无顺序

题意:距离指定颜色的距离,所以我们如果考虑把相同的颜色放在 list 中呢?这样不就有序了。

实现

参考资料

https://leetcode.cn/problems/hanota-lcci/description/?envType=problem-list-v2&envId=recursion