在Python中找到与数组元素相同的最小索引的程序
假设我们有一个名为nums的元素列表,其中所有项都是唯一的,并且按升序排序,我们必须找到最小的i,使得nums [i] = i。如果我们找不到任何解决方案,则返回-1。我们必须在O(log(n))时间内解决此问题。
因此,如果输入为nums =[ – 4,-1,2,3,8],则输出为2,因为nums [2] = 2且nums [3] = 3但2较小。
要解决此问题,请执行以下步骤−
- ret:= -1,lhs:= 0,rhs:= nums的大小−1
-
while lhs <= rhs,do
- mid:= (lhs + rhs)/ 2的地板
-
如果nums [mid]与mid相同,则
- ret:= mid
- 如果nums [mid] ≥ mid,则
- rhs:= mid – 1
- 否则,
- lhs:=中间+ 1
- 返回ret
例子
让我们看一下以下实现,以更好地理解
def solve(nums):
ret = -1
lhs = 0
rhs = len(nums) - 1
while lhs <= rhs:
mid = (lhs + rhs) // 2
if nums [mid] == mid:
ret = mid
if nums [mid] ≥ mid:
rhs = mid - 1
else:
lhs = mid + 1
return ret
nums = [ - 4,- 1,2,3,8]
print(solve(nums))
输入
[-4,-1,2,3,8]
输出
2