0
인터뷰 준비 질문을하고 있는데이 문제를 보았습니다 : 정렬되고 회전 된 배열로 요소를 검색하십시오.는향상된 바이너리 검색
나에게 가장 확실한 해결책은 분할 지점으로 알고있는 번호가 다음 번호)보다 큰 피벗 점을 (찾아 1)에, 그리고 2) 사용의 절반이 이진 검색을 실행하기 위해 회전 및 정렬 된 배열.
나는 "더 나은"(또는 괴짜를 괴롭히는 사람들이 주장하는) 해결책을 발견했습니다. 코드로 당신을 지루하게하지 않으려 고 여기에 높은 수준의 아이디어가 있습니다. 내 질문은 : 중간 지점을 찾는 것이 우리가 단 하나의 패스로 검색하는 방법을 이해하지 못합니다. 솔직히 내가 생각해 낸 초기 솔루션보다 더 나은 점이 있습니까?
높은 수준 "개선/더"접근 방식 :
이1) Find middle point mid = (l + h)/2
2) If key is present at middle point, return mid.
3) Else If arr[l..mid] is sorted
a) If key to be searched lies in range from arr[l]
to arr[mid], recur for arr[l..mid].
b) Else recur for arr[mid+1..r]
4) Else (arr[mid+1..r] must be sorted)
a) If key to be searched lies in range from arr[mid+1]
to arr[r], recur for arr[mid+1..r].
b) Else recur for arr[l..mid]
https://en.wikipedia.org/wiki/Quicksort - http://bl.ocks.org/andrewringler/raw/3809399/ –
"정렬 및 회전"의 의미를 정의하는 데 도움이 될 수 있습니다. 정렬." 온라인에서 찾은 비슷한 질문을 바탕으로 정렬 된 배열을 의미하는 것으로 생각됩니다. 예 : [4, 5, 1, 2, 3]. 이게 네가 말하는거야? – smarx
귀하의 솔루션을 이해한다면 O (n)입니다. 회전 지점을 찾기 위해 어레이를 스캔해야하기 때문입니다. 어쨌든 배열을 검사하려고한다면, 그 일을하는 동안 요소를 찾으십시오. 그래서 당신의 접근 방식은 각 항목을 하나씩 확인하는 것보다 낫지 않습니다. – smarx