📜  最小索引i,以使从索引i到给定索引的所有元素都相等(1)

📅  最后修改于: 2023-12-03 14:55:22.308000             🧑  作者: Mango

寻找最小索引i以使从索引i到给定索引的所有元素都相等

有一个数组,以及一个下标k,寻找最小的索引i,使得从索引i到k的所有元素的值都相等。如果不存在这样的索引i,则返回-1。

解决方案

可以使用两个指针i和j,分别指向数组的开头和给定的索引k。

首先,从数组结尾开始向前遍历,找到第一个等于nums[k]的元素,将其索引设为i。

然后,从k位置开始向前遍历,检查每个元素是否等于nums[k]。如果元素等于nums[k],则将j向前移动一位,继续检查。

如果发现一个元素不等于nums[k],则将i向前移动一位,并将j重新指向k。然后,从i到k的范围内检查每个元素是否等于nums[k]。如果所有元素都等于nums[k],则返回i。否则,继续检查i - 1位置的元素。

如果所有的元素都被检查了,但是没有找到符合条件的索引i,则返回-1。

代码实现
def find_index(nums, k):
    i, j = len(nums) - 1, k
    while i >= 0:
        if nums[i] == nums[k]:
            j -= 1
            if j < 0:
                return i
        else:
            j = k
        i -= 1
    return -1
示例
>>> nums = [1, 2, 3, 4, 5, 5, 6, 5, 7]
>>> find_index(nums, 8)
6
>>> find_index(nums, 5)
1
>>> find_index(nums, 2)
-1