이진탐색이니 당연히 정렬되어있어야함
정확한 해당값 인덱스검색
abcList.binarySearch(조회할값)
이경우 정확히 해당값이 있으면 해당 인덱스리턴,없으면 음수리턴
해당값이 들어갈자리 찾기는 만약 같은수가 여러개있을경우,왼쪽끝인덱스를 받냐 오른쪽끝인덱스+1를 받냐에 따라 2개로 나뉨
lowerBound(listOf(1,2,3,3,3,5),3) //2
upperBound(listOf(1,2,3,3,3,5),3) //5
lowerBound(listOf(1,2,3,3,3,5),4) //5
upperBound(listOf(1,2,3,3,3,5),4) //5
왼쪽끝인덱스는
fun lowerBound(calList:List<Int>,target:Int):Int{
var left=0
var right=calList.size
while (left<right){
val mid=(left+right)/2
if(calList[mid]<target){
left=mid+1
}else{
right=mid
}
}
return right
}
오른쪽끝인덱스+1은(해당값을 초과하는 첫번째숫자)
fun upperBound(calList:List<Int>,target:Int):Int{
var left=0
var right=calList.size
while (left<right){
val mid=(left+right)/2
if(calList[mid]<=target){
left=mid+1
}else{
right=mid
}
}
return right
}
'코틀린' 카테고리의 다른 글
코루틴 사용시 추가해야하는 의존성 (0) | 2024.11.02 |
---|---|
코루틴 테스트시 mockMvc에서 response가 비어있을때 (2) | 2024.11.02 |
코틀린에서 sam인터페이스를 람다로 구현이 안될때 (0) | 2024.07.19 |
코틀린에서 An annotation can't be used as the annotations argument 에러가 나올때 (0) | 2024.02.08 |