가장 긴 증가하는 수열 찾기
현재위치포인터를 만들고,
현재위치보다 해당값이 크면 마지막에 삽입하고 포인터증가
현재위치보다 해당값이 작으면 a1<=해당값<a2에서 a1이랑 치환
정답
class Solution {
fun lengthOfLIS(nums: IntArray): Int {
val lengthList = mutableListOf<Int>()
lengthList.add(nums[0])
for (i in nums){
val prevValue = lengthList.last()
if (i>prevValue){
lengthList.add(i)
}else{
val lowerBoundValue=lowerBound(lengthList,i)
lengthList[lowerBoundValue]=i
}
}
return lengthList.size
}
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
}
}
'알고리즘' 카테고리의 다른 글
릿코드 872. Leaf-Similar Trees 코틀린 (0) | 2024.01.09 |
---|---|
릿코드 938. Range Sum of BST 코틀린 (0) | 2024.01.08 |
릿코드 2870. Minimum Number of Operations to Make Array Empty 코틀린 (0) | 2024.01.04 |
릿코드 2125. Number of Laser Beams in a Bank 코틀린 (0) | 2024.01.03 |
릿코드 2610. Convert an Array Into a 2D Array With Conditions 코틀린 (0) | 2024.01.02 |