์ต์ฅ ์ฆ๊ฐ ์์ด : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด
[ 7, 2, 3, 8, 4, 5 ] โ ํด๋น ๋ฐฐ์ด์์๋ [2,3,4,5]๊ฐ LIS๋ก ๋ต์ 4
- DP : O(N^2)
- Lower Bound : O(NlogN)
int arr[] = {7, 2, 3, 8, 4, 5};
int dp[] = new int[arr.length]; // LIS ์ ์ฅ ๋ฐฐ์ด
for(int i = 1; i < dp.length; i++) {
for(int j = i-1; j>=0; j--) {
if(arr[i] > arr[j]) {
dp[i] = (dp[i] < dp[j]+1) ? dp[j]+1 : dp[i];
}
}
}
for (int i = 0; i < dp.length; i++) {
if(max < dp[i]) max = dp[i];
}
// ์ ์ฅ๋ dp ๋ฐฐ์ด ๊ฐ : [0, 0, 1, 2, 2, 3]
// LIS : dp๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ ์ค ์ต๋ ๊ฐ + 1
ํ์ง๋ง, N^2์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๋ผ๋ฉด? (ex. ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์ต๋ 10๋ง์ผ ๋..)
์ด๋๋ Lower Bound๋ฅผ ํ์ฉํ LIS ๊ตฌํ์ ์งํํด์ผํ๋ค.