From 6bee7e991f2fa18b1498e97ebac555e736128024 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:34:41 -0700 Subject: [PATCH 01/31] Create 1-Two-Sum.js --- javascript/1-Two-Sum.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 javascript/1-Two-Sum.js diff --git a/javascript/1-Two-Sum.js b/javascript/1-Two-Sum.js new file mode 100644 index 000000000..56e9b10fe --- /dev/null +++ b/javascript/1-Two-Sum.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + let map = {}; + for (let i = 0; i < nums.length; i++) { + if (target - nums[i] in map) { + return [map[target-nums[i]], i]; + } else { + map[nums[i]] = i; + } + } +}; From ae438f7437035e2788d4164b01037379bf80153f Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:38:47 -0700 Subject: [PATCH 02/31] Create 217-Contains-Duplicate.js --- javascript/217-Contains-Duplicate.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 javascript/217-Contains-Duplicate.js diff --git a/javascript/217-Contains-Duplicate.js b/javascript/217-Contains-Duplicate.js new file mode 100644 index 000000000..3c96a1b20 --- /dev/null +++ b/javascript/217-Contains-Duplicate.js @@ -0,0 +1,16 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function(nums) { + let map = {}; + + for (let i = 0; i < nums.length; i++) { + if (nums[i] in map) { + return true; + } else { + map[nums[i]] = i; + } + } + return false; +}; From aa54a2012be65f58315b5fd585ab0d614423ffa5 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:42:05 -0700 Subject: [PATCH 03/31] Create 242-Valid-Anagram.js --- javascript/242-Valid-Anagram.js | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 javascript/242-Valid-Anagram.js diff --git a/javascript/242-Valid-Anagram.js b/javascript/242-Valid-Anagram.js new file mode 100644 index 000000000..0447a7774 --- /dev/null +++ b/javascript/242-Valid-Anagram.js @@ -0,0 +1,34 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ +var isAnagram = function(s, t) { + let map = {}; + + if (s.length !== t.length) { + return false; + } + + for (let i = 0; i < s.length; i++) { + if (map[s[i]]) { + map[s[i]]++; + } else { + map[s[i]] = 1; + } + } + + for (let i = 0; i < t.length; i++) { + if (map[t[i]]) { + map[t[i]]--; + } else { + return false; + } + } + + return true; + + + + +}; From b7b5f0f6335c4f54dacef2c50e2d61e48f4e658a Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:44:38 -0700 Subject: [PATCH 04/31] Create 238-Product-of-Array-Except-Self.js --- .../238-Product-of-Array-Except-Self.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 javascript/238-Product-of-Array-Except-Self.js diff --git a/javascript/238-Product-of-Array-Except-Self.js b/javascript/238-Product-of-Array-Except-Self.js new file mode 100644 index 000000000..819d9075b --- /dev/null +++ b/javascript/238-Product-of-Array-Except-Self.js @@ -0,0 +1,22 @@ +/** + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function(nums) { + const res = []; + + let product = 1; + + for (let i = 0; i < nums.length; i++) { + res[i] = product; + product *= nums[i]; + } + product = 1; + for (let j = nums.length - 1; j >= 0; j--) { + res[j] *= product; + product *= nums[j]; + } + + return res; + +}; From 22cee9183e78aa61c7c460261736ee7111869c77 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:46:22 -0700 Subject: [PATCH 05/31] Create 125-Valid-Palindrome.js --- javascript/125-Valid-Palindrome.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 javascript/125-Valid-Palindrome.js diff --git a/javascript/125-Valid-Palindrome.js b/javascript/125-Valid-Palindrome.js new file mode 100644 index 000000000..d953b3802 --- /dev/null +++ b/javascript/125-Valid-Palindrome.js @@ -0,0 +1,19 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function(s) { + s = s.toLowerCase(); + s = s.replace(/[^A-Z0-9]/gi, ''); + + let i = 0 + let j = s.length - 1; + + while (i < j) { + if (s[i] !== s[j]) return false; + + i++; + j-- + } + return true; +}; From e5040ea967b3cc32dd907964fbdb864ece67a211 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:47:24 -0700 Subject: [PATCH 06/31] Create 15-3Sum.js --- javascript/15-3Sum.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 javascript/15-3Sum.js diff --git a/javascript/15-3Sum.js b/javascript/15-3Sum.js new file mode 100644 index 000000000..db5aaffcb --- /dev/null +++ b/javascript/15-3Sum.js @@ -0,0 +1,35 @@ +/** + * @param {number[]} nums + * @return {number[][]} + */ +var threeSum = function(nums) { + let res = []; + let left = 0; + let right = nums.length - 1; + nums.sort((a,b) => { return a - b }) + + for (let i = 0; i < nums.length - 1; i++) { + if (nums[i] > 0) return res; + if (nums[i] === nums[i - 1]) continue; + + left = i + 1; + right = nums.length - 1; + let temp = 0; + + while (left < right) { + temp = nums[left] + nums[right] + nums[i]; + if (temp === 0) { + res.push([nums[i], nums[left], nums[right]]); + left++; + right--; + + while(nums[left] == nums[left - 1]) { left++ }; + + while (nums[right] == nums[right - 1]) { right-- }; + + } else if (temp > 0) { right-- } + else if (temp < 0) { left++ } + } + } + return res; +}; From 6fbdb1c68c37adcca99ce4ca8d7932aa700cb634 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:48:40 -0700 Subject: [PATCH 07/31] Create 11-Container-With-Most-Water.js --- javascript/11-Container-With-Most-Water.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 javascript/11-Container-With-Most-Water.js diff --git a/javascript/11-Container-With-Most-Water.js b/javascript/11-Container-With-Most-Water.js new file mode 100644 index 000000000..11b35406d --- /dev/null +++ b/javascript/11-Container-With-Most-Water.js @@ -0,0 +1,20 @@ +/** + * @param {number[]} height + * @return {number} + */ +var maxArea = function(height) { + let max = 0; + let i = 0; + let j = height.length - 1; + + while (i < j) { + curr = (j - i) * Math.min(height[i], height[j]); + max = Math.max(curr, max); + if (height[i] > height[j]) { + j--; + } else { + i++; + } + } + return max; +}; From 67e33b60dad2da3f6d4aeac62a703070adc2be22 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:52:56 -0700 Subject: [PATCH 08/31] Create 121-Best-Time-to-Buy-and-Sell-Stock.js --- .../121-Best-Time-to-Buy-and-Sell-Stock.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 javascript/121-Best-Time-to-Buy-and-Sell-Stock.js diff --git a/javascript/121-Best-Time-to-Buy-and-Sell-Stock.js b/javascript/121-Best-Time-to-Buy-and-Sell-Stock.js new file mode 100644 index 000000000..c8436d470 --- /dev/null +++ b/javascript/121-Best-Time-to-Buy-and-Sell-Stock.js @@ -0,0 +1,16 @@ +/** + * @param {number[]} prices + * @return {number} + */ +var maxProfit = function(prices) { + let buy = prices[0]; + let profit = 0; + for (let i = 0; i < prices.length; i++) { + if (prices[i] < buy) { + buy = prices[i]; + } else { + profit = Math.max(prices[i] - buy, profit); + } + } + return profit; +}; From 9c9ea0f16f3f666e27bebe06c9889e2decfcd884 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:55:02 -0700 Subject: [PATCH 09/31] Create 20-Valid-Parentheses.js --- javascript/20-Valid-Parentheses.js | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 javascript/20-Valid-Parentheses.js diff --git a/javascript/20-Valid-Parentheses.js b/javascript/20-Valid-Parentheses.js new file mode 100644 index 000000000..149722b31 --- /dev/null +++ b/javascript/20-Valid-Parentheses.js @@ -0,0 +1,32 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isValid = function(s) { + + let closeMap = { + '}' :'{', + ')' : '(', + ']' : '[' + }; + + let charStack = []; + + if (!s) return false; + + for (let i = 0; i < s.length; i++) { + let curr = s.charAt(i); + // check if closing bracket + if (closeMap[curr]) { + topElement = (charStack.length === 0) ? '#' : charStack.pop(); + if (topElement !== closeMap[curr]) { + return false; + } + // opening bracket case + } else { + charStack.push(curr); + } + } + + return charStack.length === 0; +}; From c95701f47ecc64b23483c6817723152a18752b2e Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:57:42 -0700 Subject: [PATCH 10/31] Create 153-Find-Minimum-in-Rotated-Sorted-Array.js --- .../153-Find-Minimum-in-Rotated-Sorted-Array.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 javascript/153-Find-Minimum-in-Rotated-Sorted-Array.js diff --git a/javascript/153-Find-Minimum-in-Rotated-Sorted-Array.js b/javascript/153-Find-Minimum-in-Rotated-Sorted-Array.js new file mode 100644 index 000000000..2c28650e2 --- /dev/null +++ b/javascript/153-Find-Minimum-in-Rotated-Sorted-Array.js @@ -0,0 +1,17 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var findMin = function(nums) { + let left = 0; + let right = nums.length - 1; + while (right > left) { + let mid = Math.floor((right + left) / 2); + if (nums[mid] > nums[right]) { + left = mid + 1; + } else { + right = mid; + } + } + return nums[left]; +}; From 62b893383f6089da987a52494e1ecccae4a6f874 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 11:59:43 -0700 Subject: [PATCH 11/31] Create 33-Search-in-Rotated-Sorted-Array.js --- .../33-Search-in-Rotated-Sorted-Array.js | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 javascript/33-Search-in-Rotated-Sorted-Array.js diff --git a/javascript/33-Search-in-Rotated-Sorted-Array.js b/javascript/33-Search-in-Rotated-Sorted-Array.js new file mode 100644 index 000000000..97d83dcc9 --- /dev/null +++ b/javascript/33-Search-in-Rotated-Sorted-Array.js @@ -0,0 +1,44 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number} + */ +var search = function(nums, target) { + let left = 0; + let right = nums.length - 1; + + while (left <= right) { + let mid = Math.floor((left + right) / 2); + + if (nums[mid] === target) { + return mid; + } + + // Checking if the left side is sorted + if (nums[left] <= nums[mid]) { + if (nums[left] <= target && target <= nums[mid]) { + // thus target is in the left + right = mid - 1; + + } else { + // thus target is in the right + left = mid + 1; + } + } + + // Otherwise, the right side is sorted + else { + if (nums[mid] <= target && target <= nums[right]) { + // thus target is in the right + left = mid + 1; + + } else { + // thus target is in the left + right = mid - 1; + } + } + + } + + return -1; +}; From 09aab205b34e50dc1068dfd784880b544421aa96 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:18:48 -0700 Subject: [PATCH 12/31] Create 206-Reverse-Linked-List.js --- javascript/206-Reverse-Linked-List.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 javascript/206-Reverse-Linked-List.js diff --git a/javascript/206-Reverse-Linked-List.js b/javascript/206-Reverse-Linked-List.js new file mode 100644 index 000000000..15bbbf0ff --- /dev/null +++ b/javascript/206-Reverse-Linked-List.js @@ -0,0 +1,23 @@ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} head + * @return {ListNode} + */ +var reverseList = function(head) { + let prev = null; + + while (head) { + let next = head.next; + head.next = prev; + prev = head; + head = next; + } + + return prev; +}; From cdf8f15371f8a00fb822a54b9cd33bd1cf4dca04 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:20:01 -0700 Subject: [PATCH 13/31] Create 21-Merge-Two-Sorted-Lists.js --- javascript/21-Merge-Two-Sorted-Lists.js | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 javascript/21-Merge-Two-Sorted-Lists.js diff --git a/javascript/21-Merge-Two-Sorted-Lists.js b/javascript/21-Merge-Two-Sorted-Lists.js new file mode 100644 index 000000000..a9e155607 --- /dev/null +++ b/javascript/21-Merge-Two-Sorted-Lists.js @@ -0,0 +1,28 @@ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} list1 + * @param {ListNode} list2 + * @return {ListNode} + */ +var mergeTwoLists = function(l1, l2) { + let nullNode = { val : 0, next : null}; + let prev = nullNode; + while (l1 && l2) { + if (l1.val >= l2.val) { + prev.next = l2; + l2 = l2.next; + } else { + prev.next = l1; + l1 = l1.next; + } + prev = prev.next; + } + prev.next = l1 || l2; + return nullNode.next; +}; From 17b200844e8776de02a1bb58bd9dc994df34828a Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:21:33 -0700 Subject: [PATCH 14/31] Create 143-Reorder-List.js --- javascript/143-Reorder-List.js | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 javascript/143-Reorder-List.js diff --git a/javascript/143-Reorder-List.js b/javascript/143-Reorder-List.js new file mode 100644 index 000000000..dbc5468a0 --- /dev/null +++ b/javascript/143-Reorder-List.js @@ -0,0 +1,50 @@ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} head + * @return {void} Do not return anything, modify head in-place instead. + */ +var reorderList = function(head) { + if (!head) { return }; + + let slow = head; + let fast = head; + + + // finding the middle of the linked list using 2 pters + while (fast && fast.next) { + slow = slow.next; + fast = fast.next.next; + } + + // reverse the second part of the list starting at slow + let prev = null + let curr = slow; + while (curr) { + let next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } // here prev is the head + + // merge two sorted lists (first one starts at head, second at prev) + let first = head; + let second = prev; + + while(second.next) { + temp = first.next; + first.next = second; + first = temp; + + temp = second.next; + second.next = first; + second = temp; + } + + +}; From f1b9f6314114453d62d31d0aac0067279c09b057 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:22:51 -0700 Subject: [PATCH 15/31] Create 19-Remove-Nth-Node-From-End-of-List.js --- .../19-Remove-Nth-Node-From-End-of-List.js | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 javascript/19-Remove-Nth-Node-From-End-of-List.js diff --git a/javascript/19-Remove-Nth-Node-From-End-of-List.js b/javascript/19-Remove-Nth-Node-From-End-of-List.js new file mode 100644 index 000000000..e52e76058 --- /dev/null +++ b/javascript/19-Remove-Nth-Node-From-End-of-List.js @@ -0,0 +1,32 @@ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} head + * @param {number} n + * @return {ListNode} + */ +var removeNthFromEnd = function(head, n) { + let currNode = head; + let nodeBeforeN = head; + + for (let i = 0; i < n; i++) { + currNode = currNode.next; + } + + if (!currNode) { return head.next } + + while (currNode.next) { + nodeBeforeN = nodeBeforeN.next; + currNode = currNode.next; + } + + nodeBeforeN.next = nodeBeforeN.next.next; + + return head; + +}; From 7b85e5594b925c021f4bb3c5bc1d3d0056389829 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:23:41 -0700 Subject: [PATCH 16/31] Create 141-Linked-List-Cycle --- javascript/141-Linked-List-Cycle | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 javascript/141-Linked-List-Cycle diff --git a/javascript/141-Linked-List-Cycle b/javascript/141-Linked-List-Cycle new file mode 100644 index 000000000..d79850599 --- /dev/null +++ b/javascript/141-Linked-List-Cycle @@ -0,0 +1,25 @@ +/** + * Definition for singly-linked list. + * function ListNode(val) { + * this.val = val; + * this.next = null; + * } + */ + +/** + * @param {ListNode} head + * @return {boolean} + */ +var hasCycle = function(head) { + let set = new Set(); + while (head) { + if (set.has(head)) { + return true; + } else { + set.add(head); + head = head.next; + } + } + + return false; +}; From f5b43851f82bb6ae1496dc7ae0c88c4d0931213f Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:24:55 -0700 Subject: [PATCH 17/31] Create 226-Invert-Binary-Tree --- javascript/226-Invert-Binary-Tree | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 javascript/226-Invert-Binary-Tree diff --git a/javascript/226-Invert-Binary-Tree b/javascript/226-Invert-Binary-Tree new file mode 100644 index 000000000..33888e1d4 --- /dev/null +++ b/javascript/226-Invert-Binary-Tree @@ -0,0 +1,20 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {TreeNode} + */ +var invertTree = function(root) { + if (!root) return root; + let left = root.left; + root.left = invertTree(root.right); + root.right = invertTree(left); + return root; + +}; From 71647603b7821dfdc55e68f1786c59b76fe7f0b0 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:25:24 -0700 Subject: [PATCH 18/31] Rename 226-Invert-Binary-Tree to 226-Invert-Binary-Tree.js --- javascript/{226-Invert-Binary-Tree => 226-Invert-Binary-Tree.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename javascript/{226-Invert-Binary-Tree => 226-Invert-Binary-Tree.js} (100%) diff --git a/javascript/226-Invert-Binary-Tree b/javascript/226-Invert-Binary-Tree.js similarity index 100% rename from javascript/226-Invert-Binary-Tree rename to javascript/226-Invert-Binary-Tree.js From 101652dae44efd9b079dedc2741ea26c60a4ee1b Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:26:07 -0700 Subject: [PATCH 19/31] Rename 141-Linked-List-Cycle to 141-Linked-List-Cycle.js --- javascript/{141-Linked-List-Cycle => 141-Linked-List-Cycle.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename javascript/{141-Linked-List-Cycle => 141-Linked-List-Cycle.js} (100%) diff --git a/javascript/141-Linked-List-Cycle b/javascript/141-Linked-List-Cycle.js similarity index 100% rename from javascript/141-Linked-List-Cycle rename to javascript/141-Linked-List-Cycle.js From 096fad53d1aa8b9523af3e70bd32a0b8ad5caacd Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:26:50 -0700 Subject: [PATCH 20/31] Create 104-Maximum-Depth-of-Binary-Tree.js --- .../104-Maximum-Depth-of-Binary-Tree.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 javascript/104-Maximum-Depth-of-Binary-Tree.js diff --git a/javascript/104-Maximum-Depth-of-Binary-Tree.js b/javascript/104-Maximum-Depth-of-Binary-Tree.js new file mode 100644 index 000000000..7cf81388a --- /dev/null +++ b/javascript/104-Maximum-Depth-of-Binary-Tree.js @@ -0,0 +1,23 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {number} + */ +var maxDepth = (root) => { + let maxDepth = 0; + let DFS = (node, depth) => { + if (!node) return maxDepth; + if (depth > maxDepth) maxDepth = depth; + DFS(node.right, depth + 1); + DFS(node.left, depth + 1); + } + DFS(root, 1); + return maxDepth; +}; From e7dca18211d381d9ce7c17a80940e89fe843102e Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:27:53 -0700 Subject: [PATCH 21/31] Create 100-Same-Tree.js --- javascript/100-Same-Tree.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 javascript/100-Same-Tree.js diff --git a/javascript/100-Same-Tree.js b/javascript/100-Same-Tree.js new file mode 100644 index 000000000..25db45766 --- /dev/null +++ b/javascript/100-Same-Tree.js @@ -0,0 +1,18 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} p + * @param {TreeNode} q + * @return {boolean} + */ +var isSameTree = function(p, q) { + if (!p && !q) return true; + if (!p || !q || p.val !== q.val) return false; + return isSameTree(p.right,q.right) && isSameTree(p.left, q.left); +}; From a4b99e4c0abf37f4c6a2fae83c8607346848fcff Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:29:03 -0700 Subject: [PATCH 22/31] Create 572-Subtree-of-Another-Tree.js --- javascript/572-Subtree-of-Another-Tree.js | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 javascript/572-Subtree-of-Another-Tree.js diff --git a/javascript/572-Subtree-of-Another-Tree.js b/javascript/572-Subtree-of-Another-Tree.js new file mode 100644 index 000000000..1820a9534 --- /dev/null +++ b/javascript/572-Subtree-of-Another-Tree.js @@ -0,0 +1,34 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @param {TreeNode} subRoot + * @return {boolean} + */ +var isSubtree = function(root, subRoot) { + + // given two nodes are they the same? + const isSame = (n1, n2) => { + if (!n1 && !n2) return true; + if (!n1 || !n2 || n1.val !== n2.val) return false; + return isSame(n1.left, n2.left) && isSame(n1.right, n2.right); + } + + // check if subRoot is subtree of root: + const DFS = (node) => { + if (!node) return false; + if (isSame(node, subRoot)) return true; + return DFS(node.left) || DFS(node.right); + } + + + return DFS(root); + + +}; From f2596c5ffbdeebeb5fcedfb2d8823ac4bab538d8 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:30:03 -0700 Subject: [PATCH 23/31] Create 98-Validate-Binary-Search-Tree.js --- javascript/98-Validate-Binary-Search-Tree.js | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 javascript/98-Validate-Binary-Search-Tree.js diff --git a/javascript/98-Validate-Binary-Search-Tree.js b/javascript/98-Validate-Binary-Search-Tree.js new file mode 100644 index 000000000..3d7cad0de --- /dev/null +++ b/javascript/98-Validate-Binary-Search-Tree.js @@ -0,0 +1,26 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {boolean} + */ + + +var isValidBST = function(root) { + return validate(root, null, null); +}; + +function validate(root, max, min) { + if (!root) { + return true; + } else if (max !== null && root.val >= max || min !== null && root.val <= min) { + return false; + } else + return validate(root.left, root.val, min) && validate(root.right, max, root.val); +} From 997071fdb666177c6af8a315c37b6376fe6b857b Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:32:56 -0700 Subject: [PATCH 24/31] Create 70-Climbing-Stairs.js --- javascript/70-Climbing-Stairs.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 javascript/70-Climbing-Stairs.js diff --git a/javascript/70-Climbing-Stairs.js b/javascript/70-Climbing-Stairs.js new file mode 100644 index 000000000..2d02c4faf --- /dev/null +++ b/javascript/70-Climbing-Stairs.js @@ -0,0 +1,23 @@ +/** + * @param {number} n + * @return {number} + */ +var climbStairs = function(n) { + const memoized = climb(); + return memoized(n); +}; + +function climb() { + let cache = {}; + + return function climbStairs(n) { + if (n in cache) { + return cache[n]; + } else if (n >= 1 && n < 4) { + return n; + } else { + cache[n] = climbStairs(n-2) + climbStairs(n-1); + return cache[n]; + } + } +} From ca671eb9d724c5e115be6fc03d8dbc820b21f809 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:34:03 -0700 Subject: [PATCH 25/31] Create 152-Maximum-Product-Subarray.js --- javascript/152-Maximum-Product-Subarray.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 javascript/152-Maximum-Product-Subarray.js diff --git a/javascript/152-Maximum-Product-Subarray.js b/javascript/152-Maximum-Product-Subarray.js new file mode 100644 index 000000000..64519e177 --- /dev/null +++ b/javascript/152-Maximum-Product-Subarray.js @@ -0,0 +1,20 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var maxProduct = function(nums) { + let result = nums[0]; + let prevMax = nums[0]; + let prevMin = nums[0]; + for(let i = 1; i < nums.length; i++) { + currMax = Math.max(nums[i], prevMax * nums[i], prevMin * nums[i]); + currMin = Math.min(nums[i], prevMax * nums[i], prevMin * nums[i]); + + prevMax = currMax; + prevMin = currMin; + + result = Math.max(currMax, result); + } + return result; + +}; From a6b24ac35ebccecb5e8e9510697d4ac74e1bd0d0 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:35:11 -0700 Subject: [PATCH 26/31] Create 300-Longest-Increasing-Subsequence.js --- javascript/300-Longest-Increasing-Subsequence.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 javascript/300-Longest-Increasing-Subsequence.js diff --git a/javascript/300-Longest-Increasing-Subsequence.js b/javascript/300-Longest-Increasing-Subsequence.js new file mode 100644 index 000000000..d7b63b06c --- /dev/null +++ b/javascript/300-Longest-Increasing-Subsequence.js @@ -0,0 +1,12 @@ +var lengthOfLIS = function(nums) { + let arr = Array(nums.length).fill(1); + + for(let i = 1; i < arr.length; i++) { + for (let j = 0; j < i; j++) { + if (nums[i] > nums[j]) { + arr[i] = Math.max(arr[i], arr[j] + 1); + } + } + } + return Math.max(...arr); +}; From b795367970eaa7d72052f4c447b4ca1390ffda7f Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:36:36 -0700 Subject: [PATCH 27/31] Create 53-Maximum-Subarray.js --- javascript/53-Maximum-Subarray.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 javascript/53-Maximum-Subarray.js diff --git a/javascript/53-Maximum-Subarray.js b/javascript/53-Maximum-Subarray.js new file mode 100644 index 000000000..171bcbfc4 --- /dev/null +++ b/javascript/53-Maximum-Subarray.js @@ -0,0 +1,14 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function(nums) { + let curr = nums[0]; + let max = nums[0]; + + for (let i = 1; i < nums.length; i++) { + curr = Math.max(curr + nums[i], nums[i]); + max = Math.max(max, curr) + } + return max; +}; From d1681e127f85a235484543fce4325110755f2a8e Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:37:23 -0700 Subject: [PATCH 28/31] Create 49-Rotate-Image.js --- javascript/49-Rotate-Image.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 javascript/49-Rotate-Image.js diff --git a/javascript/49-Rotate-Image.js b/javascript/49-Rotate-Image.js new file mode 100644 index 000000000..7508b0a8d --- /dev/null +++ b/javascript/49-Rotate-Image.js @@ -0,0 +1,30 @@ +/** + * @param {number[][]} matrix + * @return {void} Do not return anything, modify matrix in-place instead. + */ +var rotate = function(matrix) { + transpose(matrix); + reflect(matrix); +}; + +var transpose = function(matrix) { + let n = matrix.length; + for (let i = 0; i < n; i++) { + for (let j = i + 1; j < n; j++) { + let temp = matrix[j][i]; + matrix[j][i] = matrix[i][j]; + matrix[i][j] = temp; + } + } +} + +var reflect = function(matrix) { + let n = matrix.length; + for (let i = 0; i < n; i++) { + for (let j = 0; j < n / 2; j++) { + let temp = matrix[i][j]; + matrix[i][j] = matrix[i][n - j - 1]; + matrix[i][n - j - 1] = temp; + } + } +} From afedaf9b8e9ae8f2393766016b4e9562e78d968c Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:37:58 -0700 Subject: [PATCH 29/31] Create 54-Spiral-Matrix.js --- javascript/54-Spiral-Matrix.js | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 javascript/54-Spiral-Matrix.js diff --git a/javascript/54-Spiral-Matrix.js b/javascript/54-Spiral-Matrix.js new file mode 100644 index 000000000..9d27c5f4c --- /dev/null +++ b/javascript/54-Spiral-Matrix.js @@ -0,0 +1,36 @@ +/** + * @param {number[][]} matrix + * @return {number[]} + */ +var spiralOrder = function(matrix) { + const results = [] + let startRow = 0, startCol = 0, endRow = matrix.length-1, endCol = matrix[0].length-1; + + while(results.length < matrix.length * matrix[0].length) { + + for(let col = startCol; col <= endCol; col++ ) { + results.push(matrix[startRow][col]) + } + + for(let row = startRow + 1; row <= endRow; row++) { + results.push(matrix[row][endCol]) + } + + for(let col = endCol - 1; col >= startCol; col--) { + if(startRow === endRow) break; + results.push(matrix[endRow][col]) + } + + for(let row = endRow - 1; row >= startRow + 1; row--) { + if(endCol === startCol) break; + results.push(matrix[row][startCol]) + } + + startRow++ + startCol++ + endRow-- + endCol-- + } + + return results +}; From d025143648a2d7d641d775688a474430f5a24496 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:38:33 -0700 Subject: [PATCH 30/31] Create 73-Set-Matrix-Zeroes.js --- javascript/73-Set-Matrix-Zeroes.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 javascript/73-Set-Matrix-Zeroes.js diff --git a/javascript/73-Set-Matrix-Zeroes.js b/javascript/73-Set-Matrix-Zeroes.js new file mode 100644 index 000000000..36068902c --- /dev/null +++ b/javascript/73-Set-Matrix-Zeroes.js @@ -0,0 +1,26 @@ +/** + * @param {number[][]} matrix + * @return {void} Do not return anything, modify matrix in-place instead. + */ +var setZeroes = function(matrix) { + let row = new Array(matrix.length); + let col = new Array(matrix[0].length); + + for (let i = 0; i < row.length; i++) { + for (let j = 0; j < col.length; j++) { + if (matrix[i][j] === 0) { + row[i] = 0; + col[j] = 0; + } + } + } + + for (let i = 0; i < row.length; i++) { + for (let j = 0; j < col.length; j++) { + if (row[i] == 0 || col[j] == 0) { + matrix[i][j] = 0; + } + } + } + +}; From 3a6c767cb69a864d3a2696f9864d5f3074f23a30 Mon Sep 17 00:00:00 2001 From: veer-p <102765426+veer-p@users.noreply.github.com> Date: Sun, 3 Apr 2022 12:40:05 -0700 Subject: [PATCH 31/31] Create 268-Missing-Number.js --- javascript/268-Missing-Number.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 javascript/268-Missing-Number.js diff --git a/javascript/268-Missing-Number.js b/javascript/268-Missing-Number.js new file mode 100644 index 000000000..04159deae --- /dev/null +++ b/javascript/268-Missing-Number.js @@ -0,0 +1,24 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var missingNumber = function(nums) { + nums.sort((a,b) => {return a-b}); + + if (nums[nums.length - 1] !== nums.length) { + return nums.length; + } else if (nums[0] !== 0) { + return 0; + } + + for (let i = 0; i < nums.length; i++) { + if(nums[i + 1] !== nums[i] + 1) { + return nums[i] + 1; + } + } + + return -1; + + + +};