Skip to content

Commit 115c137

Browse files
committed
solve
1 parent 8a415e3 commit 115c137

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
// O(nlogn) time / O(n) space
3+
func lengthOfLIS(_ nums: [Int]) -> Int {
4+
var piles: [Int] = []
5+
// Patience(1์ธ ์นด๋“œ๋†€์ด) sort ์ด์šฉ
6+
for num in nums {
7+
let leftInsertion = binarySearch(piles: piles, target: num)
8+
9+
// piles[k] >= x์ธ pile์ด ์—†์„ ๋•Œ๋งŒ append(๊ธธ์ด ์ฆ๊ฐ€)
10+
if leftInsertion == piles.count {
11+
piles.append(num)
12+
} else {
13+
//๊ฐ€์žฅ ์™ผ์ชฝ์˜ piles[k] >= x ์œ„์น˜์— ๊ต์ฒด
14+
piles[leftInsertion] = num
15+
}
16+
17+
}
18+
19+
// piles[k] = ๊ธธ์ด (k+1) ์ฆ๊ฐ€์ˆ˜์—ด์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” '๋๊ฐ’์˜ ์ตœ์†Œ์น˜'
20+
// sort ๋กœ์ง์ƒ piles.count๊ฐ€ ์ตœ๋Œ€ํ•œ ๊ธธ๊ฒŒ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— piles.count๋Š” ๊ฐ€์žฅ ๊ธด ๊ธธ์ด๊ฐ€ ๋จ
21+
return piles.count
22+
}
23+
24+
func binarySearch(piles: [Int], target: Int) -> Int {
25+
var left = 0
26+
27+
//target์˜ ์‚ฝ์ž… ์œ„์น˜๊ณ  ๋งจ ๋์— ๋ง๋ถ™์ผ์ˆ˜๋„ ์žˆ์–ด์„œ nums.count - 1 ์ด ์•„๋‹˜
28+
var right = piles.count
29+
30+
while left < right {
31+
let mid = left + (right - left) / 2
32+
if target > piles[mid] {
33+
left = mid + 1
34+
} else {
35+
//๋งจ ์™ผ์ชฝ ๊ฑฐ๋ฅผ ์ฐพ์•„์•ผ ํ•จ์œผ๋กœ ๋‹ค์‹œ ์ชผ๊ฐœ๊ฐ€๋ฉด์„œ ๋งจ ์™ผ์ชฝ ๊ฑฐ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋งจ ์™ผ์ชฝ ๊ฑฐ์— ๋„ฃ์–ด์•ผ ๊ธธ์ด(k) ์ฆ๊ฐ€์ˆ˜์—ด์˜ ๋๊ฐ’์ด ๊ฐ€์žฅ ์ž‘๊ฒŒ ๋œ๋‹ค. ์ด๋ž˜์•ผ ์ตœ๋Œ€ํ•œ ๋’ค์— ๊ณ„์† ๋” ์ด์–ด๋ถ™์—ฌ์„œ ์ตœ๋Œ€ํ•œ ๊ธธ๊ฒŒ piles๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.
36+
right = mid
37+
}
38+
}
39+
return left
40+
}
41+
}

0 commit comments

Comments
ย (0)