2021/01/15 - [알고리즘 공부/boj] - boj 3745: 오름세

 

boj 3745: 오름세

이 문제에서 주의해야할 점은 아래 2가지이다. EOF 처리 최장부분증가수열을 빠르게 구하기 완전탐색 => O(2^N) 1차 시도 - `동적 계획법`을 사용하여 문제를 풀어보았다. 결과는 50%에서 시간초과. =>

sysgongbu.tistory.com

 

위 문제와 동일하다. 지난번에 푼 기억이 있어서 비교적 수월하게 풀었다.

세그먼트 트리로도 한번 구현해 봐야하는데 언제하지...

class Solution {
	public int lengthOfLIS(int[] nums) {
		int n = nums.length;
		int[] lis = new int[n];

		lis[0] = nums[0];
		int lastIndex = 0;

		for (int i = 1; i < n; i++) {
			if (lis[lastIndex] < nums[i]) {
				lastIndex++;
				lis[lastIndex] = nums[i];
			} else {
				int index = findIndex(lis, nums[i], lastIndex);
				lis[index] = nums[i];
			}
		}
		return lastIndex + 1;
	}

	public static int findIndex(int[] lis, int target, int right) {
		int left = 0;

		while (left < right) {
			int mid = (left + right) / 2;
			if (lis[mid] == target) {
				return mid;
			}

			if (lis[mid] > target) {
				right = mid;
			} else {
				left = mid + 1;
			}
		}

		return right;
	}
}

'알고리즘 공부 > leetcode' 카테고리의 다른 글

leetcode: Task Scheduler  (0) 2021.02.07
leetcode: Sliding Window Maximum  (0) 2021.02.07
leetcode: Jump Game II  (0) 2021.01.31
leetcode: Longest Increasing Path in a Matrix  (0) 2021.01.31
leetcode: Target Sum  (0) 2021.01.27

+ Recent posts