Open LogicBaron opened 1 year ago
binary search 는 기본적으로 mid = (left+right)/2 값을 통해 target 값을 찾아가는 과정인데.. 설정에 따라 몇가지 처리가 가능하다.
while (left<right) {
mid = (left+right)>>1;
if (v[mid] < target) left = mid+1;
else right = mid;
}
return v[l]; // same as v[r];
제일 작은 target 값 index 를 찾는다.
target 값이 존재하지 않을 경우, target 값보다 작으면서 가장 큰 값의 index 를 찾는다.
-> while(left<=right)
구문은 쓸 수 없음. right=mid, left=mid 에서 끊임없이 돌게 됨.
-> if (v[mid]<=target) left=mid; else right=mid-1;
while (left<=right) {
mid = (left+right)>>1;
if (v[mid] <= target) left = mid+1; // 여기가 핵심임. 같은 경우에도 left 를 올려쳐주기
else right = mid-1; // [3,4,5] 에서 4를 찾을때 left<right 로 종료하면 5에서 수렴해버림. left<=right 로 하고 4에서 수렴하도록.
}
return v[r];
가장 큰 target 값의 index 를 반환한다. target 값이 vector 내에 없을 경우 마찬가지로 target 보다 작은 값 중 가장 큰 값의 index 를 반환한다.
ProblemList
hard