Skip to content

Commit

Permalink
Merge pull request #527 from gitsunmin/main
Browse files Browse the repository at this point in the history
[gitsunmin] Week 09 Solutions
  • Loading branch information
gitsunmin authored Oct 13, 2024
2 parents 0ef1547 + 6868da5 commit 0228570
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 0 deletions.
19 changes: 19 additions & 0 deletions find-minimum-in-rotated-sorted-array/gitsunmin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* https://leetcode.com/problems/find-minimum-in-rotated-sorted-array
* time complexity : O(log n)
* space complexity : O(1)
*/

function findMin(nums: number[]): number {
let left = 0;
let right = nums.length - 1;

while (left < right) {
const mid = Math.floor((left + right) / 2);

if (nums[mid] > nums[right]) left = mid + 1;
else right = mid;
}

return nums[left];
};
31 changes: 31 additions & 0 deletions linked-list-cycle/gitsunmin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* https://leetcode.com/problems/linked-list-cycle/
* time complexity : O(n)
* space complexity : O(1)
*/

export class ListNode {
val: number
next: ListNode | null
constructor(val?: number, next?: ListNode | null) {
this.val = (val === undefined ? 0 : val)
this.next = (next === undefined ? null : next)
}
}

function hasCycle(head: ListNode | null): boolean {
if (!head || !head.next) {
return false;
}

let slow: ListNode | null = head;
let fast: ListNode | null = head.next;

while (slow !== fast) {
if (!fast || !fast.next) return false;
slow = slow!.next;
fast = fast.next.next;
}

return true;
};
44 changes: 44 additions & 0 deletions pacific-atlantic-water-flow/gitsunmin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/**
* https://leetcode.com/problems/two-sum
* time complexity : O(m x m)
* space complexity : O(m x n)
*/
function pacificAtlantic(heights: number[][]): number[][] {
const m = heights.length;
const n = heights[0].length;
const pacific: boolean[][] = Array.from({ length: m }, () => Array(n).fill(false));
const atlantic: boolean[][] = Array.from({ length: m }, () => Array(n).fill(false));

const directions = [[1, 0], [-1, 0], [0, 1], [0, -1]];

function dfs(r: number, c: number, visited: boolean[][], prevHeight: number) {
if (r < 0 || c < 0 || r >= m || c >= n || visited[r][c] || heights[r][c] < prevHeight) {
return;
}
visited[r][c] = true;
for (const [dr, dc] of directions) {
dfs(r + dr, c + dc, visited, heights[r][c]);
}
}

for (let i = 0; i < m; i++) {
dfs(i, 0, pacific, heights[i][0]);
dfs(i, n - 1, atlantic, heights[i][n - 1]);
}
for (let i = 0; i < n; i++) {
dfs(0, i, pacific, heights[0][i]);
dfs(m - 1, i, atlantic, heights[m - 1][i]);
}

const result: number[][] = [];

for (let r = 0; r < m; r++) {
for (let c = 0; c < n; c++) {
if (pacific[r][c] && atlantic[r][c]) {
result.push([r, c]);
}
}
}

return result;
}

0 comments on commit 0228570

Please sign in to comment.