2분 찾기 및 확장
//
int binarySearch(int *data, int target, int start, int end){
if(start > end) return -1;
int midIndex = (start + end) / 2;
int midData = data[midIndex];
if(midData == target)
return midIndex;
else if(midData > target)
end = midIndex - 1;
else
start = midIndex + 1;
return binarySearch(data,target,start,end);
}
//
int binarySearch(int *data, int target, int length){
int low = 0, up = length;
while(low < up){
int midIndex = (low + up) / 2;
int midData = data[midIndex];
if(midData == target) return midIndex;
else if(midData > target) up = midIndex - 1;
else low = midIndex + 1;
}
return -1;
}
질서정연한 수조에서 지정한 숫자가 수조에 나타난 횟수//이분 검색을 통해 지정한 숫자가 나타난 첫 번째와 마지막 숫자의 위치를 알면 출현 횟수를 확정할 수 있다.
//
while(low < up){
size_t mid = (low + up) / 2;
int middata = data[mid];
if(target < middata )
up = mid;
else if(target > midata)
low = mid;
else if(target == middata){
if((mid > 0 && data[mid-1] != target) || mid == 0 )
return mid;
else
up = mid -1;
}
}
//
while(low < up){
size_t mid = (low + up) / 2;
int middata = data[mid];
if(target < middata )
up = mid;
else if(target > midata)
low = mid;
else if(target == middata){
if((mid < length-1 && data[mid+1] != target) || mid == length -1 )
return mid;
else
low = mid -1;
}
}
질서정연한 수조에 대해 이 수를 수용할 수 있는 위치를 찾아라//2분 검색을 통해 현재 수보다 작지만 이전 수보다 큰 위치를 찾아라
while(low < up){
size_t mid = (low + up) / 2;
if(target < core[mid] ){
if(target > core[mid - 1]){
j = mid;
break;
} else if(target < core[mid - 1]) {
up = mid;
} else if(target == core[mid - 1]) {
j = mid-1;
break;
}
} else if(target > core[mid]){
low = mid;
} else if(target == core[mid]){
j = mid;
break;
}
}
cout << j << endl;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.