📅  最后修改于: 2023-12-03 14:55:22.308000             🧑  作者: Mango
有一个数组,以及一个下标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