Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

배열 요소가 Python의 인덱스와 동일한 가장 작은 인덱스를 찾는 프로그램

<시간/>

모든 항목이 고유하고 오름차순으로 정렬된 nums라는 요소 목록이 있다고 가정하면 nums[i] =i가 되도록 최소 i를 찾아야 합니다. 솔루션을 찾을 수 없으면 -1을 반환합니다. 이 문제를 O(log(n)) 시간 안에 풀어야 합니다.

따라서 입력이 nums =[-4, -1, 2, 3, 8]과 같으면 nums[2] =2와 nums[3] =3이지만 2가 더 작기 때문에 출력은 2가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ret :=-1, lhs :=0, rhs :=숫자 크기 - 1

  • 동안 lhs <=rhs, 수행

    • mid :=(lhs + rhs) / 2의 바닥

    • nums[mid]가 mid와 같으면

      • ret :=중간

    • nums[mid]>=mid이면

      • rhs :=중간 - 1

    • 그렇지 않으면

      • lhs :=중간 + 1

  • 리턴 렛

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

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