검 지 offer (6) --- 회전 수조 의 최소 숫자
2354 단어 알고리즘 충격
제목 분석: 이 문 제 는 매우 간단 한 방법 이 있 습 니 다. 원래 비 체감 서열 이 었 기 때문에 회전 한 후에 가장 작은 요 소 를 찾 아야 합 니 다. 사실은 머리 에서 현재 위치 수가 뒷 위치 수 보다 많 으 면 뒷 위치 수 는 반드시 최소 수 입 니 다.그러나 이러한 시간 복잡 도 는 O (n) 이다. 더욱 효율 적 인 방법 을 찾기 위해 서 는 2 분 으로 찾 는 것 이다. 이러한 사건 의 복잡 도 는 O (logn) 밖 에 없다.
C++ :
class Solution {
public:
int minNumberInRotateArray(vector<int> arr)
{
/* O(n)
int size=rotateArray.size();
if(size==0) return 0;
for(int i=0;irotateArray[i+1])
{
return rotateArray[i+1];
}
}
return rotateArray[0];
}
*/
// O(nlogn)
if(arr.size()==0)
return 0;
int high=arr.size()-1;
int low=0;
while(lowint mid=(high-low)/2+low;
if(arr[mid]>arr[high])
{
low=mid+1;
}
else if(arr[mid]==arr[high]) // 111110001
{
high=high-1; //
}
else
high=mid;
}
return arr[low];
}
};