본문 바로가기
Algorithm

[DP]LIS

by orioncsy 2022. 11. 1.

Longest Increasing Subsequence(최장 증가 부분배열)

public int LIS(int[] arr) {
    int res=0;
    int[] dp=new int[60000];
    dp[0]=1;
    for(int i=1; i<arr.length; i++){
        int val=0;
        for(int j=0; j<i; j++){
            if(arr[j]<arr[i]){
                if(val<dp[j]) val=dp[j];
            }
        }
        dp[i]=val+1;
    }
    for(int el : dp){
        if(el>res) res=el;
    }
    return res;
  }
  • dp 배열을 선언하고 첫번째 요소를 1로 초기화
  • 차례로 순차접근하여 해당 인덱스 이전의 값을 다시 for문으로 돌면서 해당 인덱스의 값보다 작은 값을 가지는 값의 dp 값 중 가장 큰 값을 구하고 1을 더한 값을 해당 dp에 할당한다.
  • 마지막으로 처음부터 순차접근하여 최대값을 구한다.

'Algorithm' 카테고리의 다른 글

[DP] LCS  (0) 2022.11.01
[Two Point]uglyNumbers  (0) 2022.11.01
Rest API  (0) 2022.10.20
LSCS  (0) 2022.10.18
Binary Search  (0) 2022.10.13