-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[gitsunmin] WEEK4 Solution #420
Changes from all commits
97911b7
6ef9db5
ab5d9de
a542643
b5bce25
a5d6ab6
77a2b14
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/** | ||
* https://leetcode.com/problems/longest-consecutive-sequence | ||
* time complexity : O(n) | ||
* space complexity : O(n) | ||
*/ | ||
const findStreak = (set: Set<number>) => (num: number): number => { | ||
if (!set.has(num - 1)) return takeWhile(num, currentNum => set.has(currentNum)).length; | ||
return 0; | ||
}; | ||
|
||
const takeWhile = (start: number, predicate: (value: number) => boolean): number[] => { | ||
const result: number[] = []; | ||
let currentNum = start; | ||
while (predicate(currentNum)) { | ||
result.push(currentNum); | ||
currentNum += 1; | ||
} | ||
Comment on lines
+14
to
+17
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. map 함수안에서 while문을 돌리는데 시간복잡도가 O(n)으로 산정되는 이유가 궁금해요! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @Sunjae95
|
||
return result; | ||
} | ||
|
||
const max = (maxStreak: number, currentStreak: number): number => Math.max(maxStreak, currentStreak); | ||
|
||
function longestConsecutive(nums: number[]): number { | ||
const numSet = new Set(nums); | ||
|
||
return [...numSet] | ||
.map(findStreak(numSet)) | ||
.reduce(max, 0); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/** | ||
* https://leetcode.com/problems/maximum-product-subarray | ||
* time complexity : O(n) | ||
* space complexity : O(1) | ||
*/ | ||
function maxProduct(nums: number[]): number { | ||
let r = nums[0]; | ||
let mx = 1, mn = 1; | ||
|
||
for (let i = 0; i < nums.length; i++) { | ||
const tempMx = mx * nums[i]; | ||
const tempMn = mn * nums[i]; | ||
|
||
mx = Math.max(tempMx, tempMn, nums[i]); | ||
mn = Math.min(tempMx, tempMn, nums[i]); | ||
|
||
r = Math.max(r, mx); | ||
} | ||
|
||
return r; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/** | ||
* https://leetcode.com/problems/missing-number | ||
* time complexity : O(n) | ||
* space complexity : O(n) | ||
*/ | ||
function missingNumber(nums: number[]): number { | ||
const set = new Set<number>(nums); | ||
|
||
for (let i = 0; i < set.size + 1; i++) if (!set.has(i)) return i; | ||
|
||
return 0; | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
/** | ||
* https://leetcode.com/problems/valid-palindrome | ||
* time complexity : O(n) | ||
* space complexity : O(n) | ||
*/ | ||
|
||
const clean = (s: string): string => s.toLowerCase().replace(/[^a-z0-9]/g, ""); | ||
|
||
const reverse = (s: string): string => s.split("").reverse().join(""); | ||
|
||
function isPalindrome(s: string): boolean { | ||
const cleaned = clean(s); | ||
return cleaned === reverse(cleaned); | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/** | ||
* https://leetcode.com/problems/word-search | ||
* time complexity : O(m * n * 4^L) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 2중 for문과 4번의 재귀호출을 잘파악하셨군요 🙌 |
||
* space complexity : O(L) | ||
*/ | ||
const dfs = (r: number, c: number, index: number, board: string[][], word: string, rows: number, cols: number): boolean => { | ||
if (index === word.length) return true; | ||
|
||
if (r < 0 || r >= rows || c < 0 || c >= cols || board[r][c] !== word[index]) return false; | ||
const temp = board[r][c]; | ||
|
||
board[r][c] = '🚪'; | ||
const found = dfs(r + 1, c, index + 1, board, word, rows, cols) || | ||
dfs(r - 1, c, index + 1, board, word, rows, cols) || | ||
dfs(r, c + 1, index + 1, board, word, rows, cols) || | ||
dfs(r, c - 1, index + 1, board, word, rows, cols); | ||
|
||
board[r][c] = temp; | ||
|
||
return found; | ||
}; | ||
|
||
function exist(board: string[][], word: string): boolean { | ||
const rows = board.length; | ||
const cols = board[0].length; | ||
|
||
for (let r = 0; r < rows; r++) { | ||
for (let c = 0; c < cols; c++) { | ||
if (dfs(r, c, 0, board, word, rows, cols)) return true; | ||
} | ||
} | ||
return false; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
풀이 잘 보았습니다. 제가 TS에 익숙하지 않아서 질문드립니다만, 혹시
findStreak
와takeWhile
을 밖으로 빼야하는 이유가 있나요? 두개 다 메인함수에 집어넣어서 해결가능해 보여서 질문드립니다 😃