From 697101dc55d55b083c2c5196b32792414bf68a6b Mon Sep 17 00:00:00 2001 From: Ted Date: Wed, 15 Apr 2026 16:26:35 -0400 Subject: [PATCH] add week 7 solutions --- .../tedkimdev.go | 19 +++++++++ number-of-islands/tedkimdev.go | 31 ++++++++++++++ reverse-linked-list/tedkimdev.go | 22 ++++++++++ set-matrix-zeroes/tedkimdev.go | 40 +++++++++++++++++++ unique-paths/tedkimdev.go | 17 ++++++++ 5 files changed, 129 insertions(+) create mode 100644 longest-substring-without-repeating-characters/tedkimdev.go create mode 100644 number-of-islands/tedkimdev.go create mode 100644 reverse-linked-list/tedkimdev.go create mode 100644 set-matrix-zeroes/tedkimdev.go create mode 100644 unique-paths/tedkimdev.go diff --git a/longest-substring-without-repeating-characters/tedkimdev.go b/longest-substring-without-repeating-characters/tedkimdev.go new file mode 100644 index 0000000000..9bcaccb9ba --- /dev/null +++ b/longest-substring-without-repeating-characters/tedkimdev.go @@ -0,0 +1,19 @@ +// TC: O(n) +// SC: O(m) +func lengthOfLongestSubstring(s string) int { + charIndex := map[byte]int{} + + maxLen := 0 + left := 0 + for right := 0; right < len(s); right++ { + if idx, ok := charIndex[s[right]]; ok && idx >= left { + left = idx + 1 + } + charIndex[s[right]] = right + if right-left+1 > maxLen { + maxLen = right - left + 1 + } + } + + return maxLen +} diff --git a/number-of-islands/tedkimdev.go b/number-of-islands/tedkimdev.go new file mode 100644 index 0000000000..5402d94bb5 --- /dev/null +++ b/number-of-islands/tedkimdev.go @@ -0,0 +1,31 @@ +// TC: O(m * n) +// SC: O(m * n) +func numIslands(grid [][]byte) int { + rows, cols := len(grid), len(grid[0]) + islands := 0 + + var dfs func(r, c int) + dfs = func(r, c int) { + if r < 0 || c < 0 || + r >= rows || c >= cols || + grid[r][c] == '0' { + return + } + grid[r][c] = '0' + dfs(r+1, c) + dfs(r-1, c) + dfs(r, c+1) + dfs(r, c-1) + } + + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + if grid[r][c] == '1' { + dfs(r, c) + islands++ + } + } + } + + return islands +} diff --git a/reverse-linked-list/tedkimdev.go b/reverse-linked-list/tedkimdev.go new file mode 100644 index 0000000000..e14d4ed6da --- /dev/null +++ b/reverse-linked-list/tedkimdev.go @@ -0,0 +1,22 @@ +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +// TC: O(n) +// SC: O(1) +func reverseList(head *ListNode) *ListNode { + var prev *ListNode + cur := head + + for cur != nil { + temp := cur.Next + cur.Next = prev + prev = cur + cur = temp + } + return prev +} diff --git a/set-matrix-zeroes/tedkimdev.go b/set-matrix-zeroes/tedkimdev.go new file mode 100644 index 0000000000..29b7c41927 --- /dev/null +++ b/set-matrix-zeroes/tedkimdev.go @@ -0,0 +1,40 @@ +// TC: O(m * n) +// SC: O(1) +func setZeroes(matrix [][]int) { + rowNum, colNum := len(matrix), len(matrix[0]) + + firstRowIsZero := false + + for r := 0; r < rowNum; r++ { + for c := 0; c < colNum; c++ { + if matrix[r][c] == 0 { + matrix[0][c] = 0 + if r > 0 { + matrix[r][0] = 0 + } else { + firstRowIsZero = true + } + } + } + } + + for r := 1; r < rowNum; r++ { + for c := 1; c < colNum; c++ { + if matrix[r][0] == 0 || matrix[0][c] == 0 { + matrix[r][c] = 0 + } + } + } + + if matrix[0][0] == 0 { // first column is zero + for r := 0; r < rowNum; r++ { + matrix[r][0] = 0 + } + } + + if firstRowIsZero { + for c := 0; c < colNum; c++ { + matrix[0][c] = 0 + } + } +} diff --git a/unique-paths/tedkimdev.go b/unique-paths/tedkimdev.go new file mode 100644 index 0000000000..541ea23739 --- /dev/null +++ b/unique-paths/tedkimdev.go @@ -0,0 +1,17 @@ +// TC: O(m * n) +// SC: O(m * n) +func uniquePaths(m int, n int) int { + dp := make([][]int, m+1) + for i := range dp { + dp[i] = make([]int, n+1) + } + dp[m-1][n-1] = 1 + + for i := m - 1; i >= 0; i-- { + for j := n - 1; j >= 0; j-- { + dp[i][j] += dp[i+1][j] + dp[i][j+1] + } + } + + return dp[0][0] +}