Skip to content

Commit 0e4baa6

Browse files
committed
longest increasing subsequence
1 parent 319f6e5 commit 0e4baa6

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Runtime: 3ms
3+
* Time Complexity: O(n log n)
4+
* - ๊ฐ ์š”์†Œ๋งˆ๋‹ค ์ด๋ถ„ ํƒ์ƒ‰
5+
*
6+
* Memory: 45.99MB
7+
* Space Complexity: O(n)
8+
*
9+
* Approach: Patience Sorting, ๊ฐ ์›์†Œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ™•์ธํ•˜๋ฉฐ ํ˜„์žฌ๊นŒ์ง€ ๋งŒ๋“  ๊ฐ€์žฅ ์œ ๋ฆฌํ•œ ์ˆ˜์—ด ๊ณ„์‚ฐ
10+
* - result์˜ ๋ชจ๋“  ์›์†Œ๋ณด๋‹ค ํฌ๋ฉด ๋งจ ๋’ค์— ์ถ”๊ฐ€
11+
* - ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ ๋‚˜์˜จ ์œ„์น˜์— ๊ฐ’์„ ๋Œ€์ฒด
12+
*/
13+
class Solution {
14+
public int lengthOfLIS(int[] nums) {
15+
int[] result = new int[nums.length];
16+
int resultSize = 0;
17+
18+
for (int num : nums) {
19+
int left = 0;
20+
int right = resultSize;
21+
22+
while (left < right) {
23+
int mid = left + (right-left) / 2;
24+
if (result[mid] < num) {
25+
left = mid+1;
26+
} else {
27+
right = mid;
28+
}
29+
}
30+
31+
result[left] = num;
32+
33+
if (left == resultSize) {
34+
resultSize++;
35+
}
36+
}
37+
38+
return resultSize;
39+
}
40+
}

0 commit comments

Comments
ย (0)