2011-03-28 5 views
1

가능한 중복 인덱스를 찾는 :
Interview question - Search in sorted array X for index i such that X[i] = i내가되도록 [I] = 난

이 남아 정수의 정렬 된 배열과 배열의 길이와 같다. 이제 a(i)=i과 같은 색인 i을 찾아야합니다. 인덱스가 주어진 경우 o (logn)에서 수행 할 수 있지만 인덱스 i이 언급되지 않은 경우는 어떻게됩니까?

+14

만약 내가 주어진다면, 나는 일정한 시간에 그것을 할 수있다. –

+0

수정 된 이진 검색, 당신의 해결책을 사용하여 그것을했다. ... –

+1

@prp 어떻게 당신은 O (log n) 시간에 배열을 정렬 했습니까? –

답변

7

Alexandre가 논평에서 언급했듯이 색인의 예지는 이 아니라 O(log N)을 의미합니다.

그리고, 당신이 우리를 이야기하지 않는 몇 가지 정보가 아니라면, 당신이 그 예지없이이 작업을 수행 할 O(n) 시간이 필요합니다 :

for x = 0 to len(a) - 1: 
    if a[x] = x: 
     return x 

명확한 설명이 : 원래 질문 목록 이었다는 것을 명시하지 않았다 정렬되어 나중에 추가되었습니다. 그 질문은 this one의 중복이되므로 솔루션에 대한 답변을 찾아야합니다.

답변은 다른 항목을 복제 할 필요가 없으므로 그대로 두며, 정렬되지 않은 경우와 관련이 있습니다.

+0

@paxdiablo 인덱스 i가 주어지지 않았다면, 우리는 o (n)에서 그것을 할 것입니다. –

+2

아마 여분의 정보는 배열이 정렬된다는 것입니다. –

+0

@prp, 예. 나는 "if index is not not bit"라고 대답한다. 다른 사람들은 이미 색인이있는 경우 O (1)이라고 이미 언급했습니다. – paxdiablo

1

주어진 정보를 사용하여 일치하는 것을 찾을 때까지 값을 확인해야합니다. 최악의 시나리오 (일치하지 않거나 마지막 셀에서 일치)는 O (n)입니다. 배열이 이미 정렬 된 경우 O (log n) 인 이진 검색을 수행 할 수 있습니다.

귀하의 주장이 거짓이거나 일부 정보가 누락되었습니다.

+0

-1 :이를 해결하기 위해 표준 바이너리 검색을 수행 할 수 없습니다. – GrahamS

+0

올바른데, 배열에서 bsearch()를 그대로 사용할 수 없습니다. 솔루션의 O (log n) 속성을 유지하려면 자신의 바이너리 검색을 구현해야합니다. 배열을 수정 (장소 또는 사본에서)하고 [i]에서 i를 빼면 bsearch()를 사용할 수 있습니다. 그렇게하기위한 복잡성은 O (n)입니다. –