File tree Expand file tree Collapse file tree 5 files changed +132
-0
lines changed
longest-common-subsequence
longest-increasing-subsequence Expand file tree Collapse file tree 5 files changed +132
-0
lines changed Original file line number Diff line number Diff line change 1+ //
2+ // 55. Jump Game
3+ // https://leetcode.com/problems/jump-game/description/
4+ // Dale-Study
5+ //
6+ // Created by WhiteHyun on 2024/07/20.
7+ //
8+
9+ class Solution {
10+ func canJump( _ numbers: [ Int ] ) -> Bool {
11+ var goal = numbers. endIndex - 1
12+
13+ for index in numbers. indices. dropLast ( ) . reversed ( ) where index + numbers[ index] >= goal {
14+ goal = index
15+ }
16+
17+ return goal == 0
18+ }
19+ }
Original file line number Diff line number Diff line change 1+ //
2+ // 1143. Longest Common Subsequence
3+ // https://leetcode.com/problems/longest-common-subsequence/description/
4+ // Dale-Study
5+ //
6+ // Created by WhiteHyun on 2024/07/20.
7+ //
8+
9+ class Solution {
10+ func longestCommonSubsequence( _ text1: String , _ text2: String ) -> Int {
11+ let m = text1. count
12+ let n = text2. count
13+
14+ var dp : [ [ Int ] ] = . init( repeating: . init( repeating: 0 , count: n + 1 ) , count: m + 1 )
15+
16+ let text1Array = Array ( text1)
17+ let text2Array = Array ( text2)
18+
19+ for i in 1 ... m {
20+ for j in 1 ... n {
21+ if text1Array [ i - 1 ] == text2Array [ j - 1 ] {
22+ dp [ i] [ j] = dp [ i - 1 ] [ j - 1 ] + 1
23+ } else {
24+ dp [ i] [ j] = max ( dp [ i - 1 ] [ j] , dp [ i] [ j - 1 ] )
25+ }
26+ }
27+ }
28+
29+ return dp [ m] [ n]
30+ }
31+ }
Original file line number Diff line number Diff line change 1+ //
2+ // 300. Longest Increasing Subsequence
3+ // https://leetcode.com/problems/longest-increasing-subsequence/description/
4+ // Dale-Study
5+ //
6+ // Created by WhiteHyun on 2024/07/20.
7+ //
8+
9+ class Solution {
10+ func lengthOfLIS( _ nums: [ Int ] ) -> Int {
11+ var tails : [ Int ] = [ nums [ 0 ] ]
12+
13+ for index in 1 ..< nums. count {
14+ if nums [ index] > tails. last! {
15+ tails. append ( nums [ index] )
16+ } else {
17+ tails [ binarySearch ( tails, target: nums [ index] ) ] = nums [ index]
18+ }
19+ }
20+
21+ return tails. count
22+ }
23+
24+ private func binarySearch( _ arr: [ Int ] , target: Int ) -> Int {
25+ var left = 0
26+ var right = arr. count - 1
27+
28+ while left <= right {
29+ let mid = ( left + right) >> 1
30+ if arr [ mid] < target {
31+ left = mid + 1
32+ } else {
33+ right = mid - 1
34+ }
35+ }
36+ return left
37+ }
38+ }
Original file line number Diff line number Diff line change 1+ //
2+ // 53. Maximum Subarray
3+ // https://leetcode.com/problems/maximum-subarray/description/
4+ // Dale-Study
5+ //
6+ // Created by WhiteHyun on 2024/07/20.
7+ //
8+
9+ class Solution {
10+ func maxSubArray( _ numbers: [ Int ] ) -> Int {
11+ var tracking = numbers [ 0 ]
12+ var answer = numbers [ 0 ]
13+ for value in numbers. dropFirst ( ) {
14+ tracking = max ( tracking + value, value)
15+ if tracking > answer {
16+ answer = tracking
17+ }
18+ }
19+
20+ return answer
21+ }
22+ }
Original file line number Diff line number Diff line change 1+ //
2+ // 62. Unique Paths
3+ // https://leetcode.com/problems/unique-paths/description/
4+ // Dale-Study
5+ //
6+ // Created by WhiteHyun on 2024/07/20.
7+ //
8+
9+ class Solution {
10+ func uniquePaths( _ m: Int , _ n: Int ) -> Int {
11+ if m == 1 || n == 1 { return 1 }
12+ var dp : [ [ Int ] ] = . init( repeating: . init( repeating: 1 , count: n) , count: m)
13+
14+ for i in 1 ..< m {
15+ for j in 1 ..< n {
16+ dp [ i] [ j] = dp [ i - 1 ] [ j] + dp[ i] [ j - 1 ]
17+ }
18+ }
19+
20+ return dp [ m - 1 ] [ n - 1 ]
21+ }
22+ }
You can’t perform that action at this time.
0 commit comments