From debdd061d821cac13cfc138211382dd7e239438b Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 24 Sep 2024 20:36:10 +0900 Subject: [PATCH 01/40] 217 / Contains Duplicate / Easy / 5m --- berrnuda/217_Contains_Duplicate.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 berrnuda/217_Contains_Duplicate.js diff --git a/berrnuda/217_Contains_Duplicate.js b/berrnuda/217_Contains_Duplicate.js new file mode 100644 index 0000000..4653506 --- /dev/null +++ b/berrnuda/217_Contains_Duplicate.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function (nums) { + const { length } = nums; + const num = {}; + + for (let i = 0; i < length; i++) { + if (num[nums[i]]) return true; + num[nums[i]] = true; + } + + return false; +}; From a4859f41f1b816241bf01a26d2dc3488cc6a3b58 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 24 Sep 2024 20:41:52 +0900 Subject: [PATCH 02/40] 267 / Missing Number / Easy / 1m --- berrnuda/268_Missing_Number.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 berrnuda/268_Missing_Number.js diff --git a/berrnuda/268_Missing_Number.js b/berrnuda/268_Missing_Number.js new file mode 100644 index 0000000..105e007 --- /dev/null +++ b/berrnuda/268_Missing_Number.js @@ -0,0 +1,14 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var missingNumber = function (nums) { + const { length } = nums; + const sortedNums = nums.sort((a, b) => a - b); + + for (let i = 0; i < length; i++) { + if (sortedNums[i] !== i) return i; + } + + return length; +}; From 06c78a33f147601cf68189d8f717624dcc410e75 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 24 Sep 2024 20:54:22 +0900 Subject: [PATCH 03/40] 121 / Best Time to Buy and Sell Stock / Easy / 8m --- .../121_Best_Time_to_Buy_and_Sell_Stock.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 berrnuda/121_Best_Time_to_Buy_and_Sell_Stock.js diff --git a/berrnuda/121_Best_Time_to_Buy_and_Sell_Stock.js b/berrnuda/121_Best_Time_to_Buy_and_Sell_Stock.js new file mode 100644 index 0000000..b3b3d53 --- /dev/null +++ b/berrnuda/121_Best_Time_to_Buy_and_Sell_Stock.js @@ -0,0 +1,19 @@ +/** + * @param {number[]} prices + * @return {number} + */ +var maxProfit = function (prices) { + const { length } = prices; + let minPrice = Math.max(...prices); + let maxProfit = 0; + + for (let i = 0; i < length; i++) { + if (prices[i] < minPrice) { + minPrice = prices[i]; + } else { + let profit = prices[i] - minPrice; + maxProfit = profit > maxProfit ? profit : maxProfit; + } + } + return maxProfit; +}; From c637ac0b4f60e40b6ad0279177f24818729127f5 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:09:22 +0900 Subject: [PATCH 04/40] 252 / Meeting Rooms / Easy / 10m --- berrnuda/252_Meeting_Rooms.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 berrnuda/252_Meeting_Rooms.js diff --git a/berrnuda/252_Meeting_Rooms.js b/berrnuda/252_Meeting_Rooms.js new file mode 100644 index 0000000..d172279 --- /dev/null +++ b/berrnuda/252_Meeting_Rooms.js @@ -0,0 +1,28 @@ +/** + * Definition of Interval: + * class Interval { + * constructor(start, end) { + * this.start = start; + * this.end = end; + * } + * } + */ + +class Solution { + /** + * @param {Interval[]} intervals + * @returns {boolean} + */ + canAttendMeetings(intervals) { + const sortedTimes = intervals.sort((a, b) => a.start - b.start); + + let prevEnd = 0; + + for (const interval of sortedTimes) { + if (interval.start < prevEnd) return false; + prevEnd = interval.end; + } + + return true; + } +} From 96ae3b0f31272def850ba0200a2e9adcfbb22d05 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:30:07 +0900 Subject: [PATCH 05/40] 15 / 3Sum / Medium / 11m 28s --- berrnuda/15_3Sum.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 berrnuda/15_3Sum.js diff --git a/berrnuda/15_3Sum.js b/berrnuda/15_3Sum.js new file mode 100644 index 0000000..8668981 --- /dev/null +++ b/berrnuda/15_3Sum.js @@ -0,0 +1,33 @@ +/** + * @param {number[]} nums + * @return {number[][]} + */ +var threeSum = function (nums) { + const { length } = nums; + const result = []; + const sortedNums = nums.sort((a, b) => a - b); + + for (let i = 0; i < length - 2; i++) { + if (i != 0 && sortedNums[i] === sortedNums[i - 1]) continue; + + for (let j = i + 1, k = length - 1; j < k; ) { + const sum = sortedNums[i] + sortedNums[j] + sortedNums[k]; + + if (sum === 0) { + result.push([sortedNums[i], sortedNums[j], sortedNums[k]]); + + while (j < k && sortedNums[j] === sortedNums[j + 1]) j++; + while (j < k && sortedNums[k] === sortedNums[k - 1]) k--; + + j++; + k--; + } else if (sum < 0) { + j++; + } else { + k--; + } + } + } + + return result; +}; From dbbb660fc2782842cd1ac3a8cd5163b2ebff9292 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:02:16 +0900 Subject: [PATCH 06/40] =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=93=A4=201wwek=20=ED=8F=B4=EB=8D=94=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- berrnuda/{ => 1week}/121_Best_Time_to_Buy_and_Sell_Stock.js | 0 berrnuda/{ => 1week}/15_3Sum.js | 0 berrnuda/{ => 1week}/217_Contains_Duplicate.js | 0 berrnuda/{ => 1week}/252_Meeting_Rooms.js | 0 berrnuda/{ => 1week}/268_Missing_Number.js | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename berrnuda/{ => 1week}/121_Best_Time_to_Buy_and_Sell_Stock.js (100%) rename berrnuda/{ => 1week}/15_3Sum.js (100%) rename berrnuda/{ => 1week}/217_Contains_Duplicate.js (100%) rename berrnuda/{ => 1week}/252_Meeting_Rooms.js (100%) rename berrnuda/{ => 1week}/268_Missing_Number.js (100%) diff --git a/berrnuda/121_Best_Time_to_Buy_and_Sell_Stock.js b/berrnuda/1week/121_Best_Time_to_Buy_and_Sell_Stock.js similarity index 100% rename from berrnuda/121_Best_Time_to_Buy_and_Sell_Stock.js rename to berrnuda/1week/121_Best_Time_to_Buy_and_Sell_Stock.js diff --git a/berrnuda/15_3Sum.js b/berrnuda/1week/15_3Sum.js similarity index 100% rename from berrnuda/15_3Sum.js rename to berrnuda/1week/15_3Sum.js diff --git a/berrnuda/217_Contains_Duplicate.js b/berrnuda/1week/217_Contains_Duplicate.js similarity index 100% rename from berrnuda/217_Contains_Duplicate.js rename to berrnuda/1week/217_Contains_Duplicate.js diff --git a/berrnuda/252_Meeting_Rooms.js b/berrnuda/1week/252_Meeting_Rooms.js similarity index 100% rename from berrnuda/252_Meeting_Rooms.js rename to berrnuda/1week/252_Meeting_Rooms.js diff --git a/berrnuda/268_Missing_Number.js b/berrnuda/1week/268_Missing_Number.js similarity index 100% rename from berrnuda/268_Missing_Number.js rename to berrnuda/1week/268_Missing_Number.js From f7132750db786c8c8dd10aa9a3d30908b0819756 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:03:44 +0900 Subject: [PATCH 07/40] 242 / Valid Anagram / Easy / 2m 50s --- berrnuda/2week/242_valid_anagram.js | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 berrnuda/2week/242_valid_anagram.js diff --git a/berrnuda/2week/242_valid_anagram.js b/berrnuda/2week/242_valid_anagram.js new file mode 100644 index 0000000..fef267f --- /dev/null +++ b/berrnuda/2week/242_valid_anagram.js @@ -0,0 +1,32 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ +var isAnagram = function (s, t) { + // const sortS = s.split('').sort().join(''); + // const sortT = t.split('').sort().join(''); + // return sortS === sortT; + if (s.length !== t.length) return false; + + const count = {}; + + for (let i = 0; i < s.length; i++) { + count[s[i]] ? count[s[i]]++ : (count[s[i]] = 1); + } + + for (let i = 0; i < t.length; i++) { + if (!count[t[i]]) return false; + count[t[i]]--; + } + + return true; +}; + +// Runtime: 86 ms Beats 15.71% +// Memory: 54.31 MB Beats 21.25% + +// Runtime: 68 ms Beats 67.23% +// Memory: 51.01 MB Beats 83.44% + +// 02:50 From a9b88937344745401898b799208ecb06506e0dc9 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:04:36 +0900 Subject: [PATCH 08/40] 238 / Product of Arrays Except Self / Medium / 21m 22s --- .../2week/238_product_of_array_except_self.js | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 berrnuda/2week/238_product_of_array_except_self.js diff --git a/berrnuda/2week/238_product_of_array_except_self.js b/berrnuda/2week/238_product_of_array_except_self.js new file mode 100644 index 0000000..e5129b0 --- /dev/null +++ b/berrnuda/2week/238_product_of_array_except_self.js @@ -0,0 +1,43 @@ +/** + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function (nums) { + const result = new Array(nums.length).fill(1); + + // for (let i = 0; i < nums.length; i++) { + // for (let j = 0; j < nums.length; j++) { + // if (i !== j) result[i] *= nums[j]; + // } + // } + + // return result; + + // let leftNum = 1, rightNum = 1; + + // for (let i = 0; i < nums.length; i++) { + // result[i] = leftNum; + // leftNum *= nums[i]; + // } + + for (let i = 1; i < nums.length; i++) { + result[i] = result[i - 1] * nums[i - 1]; + } + + let rightNum = 1; + + for (let i = nums.length - 1; i >= 0; i--) { + result[i] *= rightNum; + rightNum *= nums[i]; + } + + return result; +}; + +// Runtime: 104 ms Beats 57.07% +// Memory: 66.98 MB Beats 14.99% + +// Runtime: 100 ms Beats 69.84% +// Memory: 64.41 MB Beats 53.44% + +// 21:22 From b7471615dcba5de16ac5170d0a410ddf8c973add Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:05:51 +0900 Subject: [PATCH 09/40] 191 / Number of 1 Bits / Easy / 13m 27s --- berrnuda/2week/191_number_of_1_bits.js | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 berrnuda/2week/191_number_of_1_bits.js diff --git a/berrnuda/2week/191_number_of_1_bits.js b/berrnuda/2week/191_number_of_1_bits.js new file mode 100644 index 0000000..75695a2 --- /dev/null +++ b/berrnuda/2week/191_number_of_1_bits.js @@ -0,0 +1,27 @@ +/** + * @param {number} n + * @return {number} + */ +var hammingWeight1 = function (n) { + return n.toString(2).split("1").length - 1; + // n = 12 (1100) [1,1,00] + // n = 11 (1011) [1,0,1,1] +}; + +// Runtime: 57 ms Beats 57.79% +// Memory: 49.50 MB Beats 43.02% +// 27s + +var hammingWeight2 = function (n) { + let i = 0; + for (; n != 0; i++) { + // n이 0이 될때까지 ( 1이 없을때까지 ) + n &= n - 1; // n의 가장 오른쪽 1을 제거 후 and 연산으로 1만 남김 + // n = 12 (1100), n - 1 = 11 (1011) n &= n - 1 = 1000 + } + return i; +}; + +// Runtime: 43 ms Beats 98.38% +// Memory: 49.26 MB Beats 64.39% +// 13m From d6db7b6775763ace32c689b1d5af85db393ac60d Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:06:30 +0900 Subject: [PATCH 10/40] 100 / Same Tree / Easy / 22m 38s --- berrnuda/2week/100_Same_Tree.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 berrnuda/2week/100_Same_Tree.js diff --git a/berrnuda/2week/100_Same_Tree.js b/berrnuda/2week/100_Same_Tree.js new file mode 100644 index 0000000..554302f --- /dev/null +++ b/berrnuda/2week/100_Same_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} p + * @param {TreeNode} q + * @return {boolean} + */ +var isSameTree = function (p, q) { + if (p === null && q === null) return true; + if (p === null || q === null) return false; + + if (p.val !== q.val) return false; + + return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); +}; + +// Runtime: 53 ms Beats 54.81% +// Memory: 49.98 MB Beats 5.64% + +// 22m 38s From c67a3ae71188a8106a50b606545c82969c582629 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 1 Oct 2024 19:18:56 +0900 Subject: [PATCH 11/40] 746 / Min Cost Climbing Stairs / Easy / 41m 1s --- .../2week/746_Min_Cost_Climbing_Stairs.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 berrnuda/2week/746_Min_Cost_Climbing_Stairs.js diff --git a/berrnuda/2week/746_Min_Cost_Climbing_Stairs.js b/berrnuda/2week/746_Min_Cost_Climbing_Stairs.js new file mode 100644 index 0000000..f656ae8 --- /dev/null +++ b/berrnuda/2week/746_Min_Cost_Climbing_Stairs.js @@ -0,0 +1,38 @@ +/** + * @param {number[]} cost + * @return {number} + */ +var minCostClimbingStairs1 = function (cost) { + const memo = {}; + + const findMinCost = (i) => { + if (i <= 1) return 0; + if (memo[i] !== undefined) return memo[i]; + + memo[i] = Math.min( + findMinCost(i - 1) + cost[i - 1], + findMinCost(i - 2) + cost[i - 2] + ); + return memo[i]; + }; + + return findMinCost(cost.length); +}; + +// Runtime: 54 ms Beats 69.10% +// Memory: 50.97 MB Beats 16.89% + +// 17m 1s + +var minCostClimbingStairs2 = function (cost) { + for (let i = cost.length - 3; i >= 0; i--) { + cost[i] += Math.min(cost[i + 1], cost[i + 2]); + } + + return Math.min(cost[0], cost[1]); +}; + +// Runtime: 60 ms Beats 37.88% +// Memory: 49.24 MB Beats 86.98% + +// 24m From c205d71e191c70bc81fc4f8498cbfabb092af15e Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:44:39 +0900 Subject: [PATCH 12/40] 49 / Group Anagrams / Medium / 13m 48s --- berrnuda/3week/49_Group_Anagrams.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 berrnuda/3week/49_Group_Anagrams.js diff --git a/berrnuda/3week/49_Group_Anagrams.js b/berrnuda/3week/49_Group_Anagrams.js new file mode 100644 index 0000000..347ca29 --- /dev/null +++ b/berrnuda/3week/49_Group_Anagrams.js @@ -0,0 +1,22 @@ +/** + * @param {string[]} strs + * @return {string[][]} + */ +var groupAnagrams = function (strs) { + const map = new Map(); + + for (let i = 0; i < strs.length; i++) { + const str = strs[i]; + const sortStr = str.split("").sort().join(""); + + if (!map.has(sortStr)) map.set(sortStr, []); + map.get(sortStr).push(str); + } + + return Array.from(map.values()); +}; + +// Runtime: 112 ms Beats 68.50% +// Memory: 63.16 MB Beats 50.94% + +// 13m 48s From 8e8206a09814243bc3ff03b8a5d6a284409e5a12 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:59:05 +0900 Subject: [PATCH 13/40] 190 / Reverse Bits / Easy / 7m 36s" --- berrnuda/3week/190_Reverse_Bits.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 berrnuda/3week/190_Reverse_Bits.js diff --git a/berrnuda/3week/190_Reverse_Bits.js b/berrnuda/3week/190_Reverse_Bits.js new file mode 100644 index 0000000..55aed40 --- /dev/null +++ b/berrnuda/3week/190_Reverse_Bits.js @@ -0,0 +1,19 @@ +/** + * @param {number} n - a positive integer + * @return {number} - a positive integer + */ +var reverseBits = function (n) { + let result = 0; + + for (let i = 0; i < 32; i++) { + result = (result << 1) | (n & 1); + n >>>= 1; + } + + return result >>> 0; +}; + +// Runtime: 63 ms Beats 36.23% +// Memory: 50.85 MB Beats 67.17% + +// 7m 36s From b9c959aca7d3097aefde4f51798eccc1ec7470cc Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:13:02 +0900 Subject: [PATCH 14/40] 125 / Valid Palindrome / Easy / 4m 11s --- berrnuda/3week/125_Valid_Palindrome.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 berrnuda/3week/125_Valid_Palindrome.js diff --git a/berrnuda/3week/125_Valid_Palindrome.js b/berrnuda/3week/125_Valid_Palindrome.js new file mode 100644 index 0000000..1573699 --- /dev/null +++ b/berrnuda/3week/125_Valid_Palindrome.js @@ -0,0 +1,21 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + s = s.toLowerCase().replace(/[^a-z0-9]/g, ""); + + let left = 0; + let right = s.length - 1; + + for (; left < right; left++, right--) { + if (s[left] !== s[right]) return false; + } + + return true; +}; + +// Runtime: 57 ms Beats 83.28% +// Memory: 51.20 MB Beats 90.34% + +// 4m 11s From afc4e82625ce5b2aedea672e2483eb246267a23e Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:32:22 +0900 Subject: [PATCH 15/40] 322 / Coin Change / Medium / 10m 52s --- berrnuda/3week/322_Coin_Change.js | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 berrnuda/3week/322_Coin_Change.js diff --git a/berrnuda/3week/322_Coin_Change.js b/berrnuda/3week/322_Coin_Change.js new file mode 100644 index 0000000..c06cc76 --- /dev/null +++ b/berrnuda/3week/322_Coin_Change.js @@ -0,0 +1,36 @@ +/** + * @param {number[]} coins + * @param {number} amount + * @return {number} + */ +var coinChange = function (coins, amount) { + // let count = 0; + // coins = coins.sort((a, b) => b - a); + + // for (let i = 0; i < coins.length; i++) { + // if (amount >= coins[i]) { + // count += Math.floor(amount / coins[i]) + // amount = amount % coins[i] + // } + + // if (amount === 0) return count; + // } + + // return -1; + + const dp = new Array(amount + 1).fill(Infinity); + dp[0] = 0; + + for (let i = 1; i <= amount; i++) { + for (let j = 0; j < coins.length; j++) { + if (i - coins[j] >= 0) dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1); + } + } + + return dp[amount] === Infinity ? -1 : dp[amount]; +}; + +// Runtime: 100 ms Beats 58.10% +// Memory: 54.62 MB Beats 68.70% + +// 10m 52s From 66ee45c10761161740489c134fc13967c88ad146 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 8 Oct 2024 20:48:09 +0900 Subject: [PATCH 16/40] 206 / Reverse Linked list / Easy / 12m 25s --- berrnuda/3week/206_Reverse_Linked_list.js | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 berrnuda/3week/206_Reverse_Linked_list.js diff --git a/berrnuda/3week/206_Reverse_Linked_list.js b/berrnuda/3week/206_Reverse_Linked_list.js new file mode 100644 index 0000000..6ce45ae --- /dev/null +++ b/berrnuda/3week/206_Reverse_Linked_list.js @@ -0,0 +1,27 @@ +/** + * 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) { + if (head === null || head.next === null) return head; + + let nextHead = reverseList(head.next); + + head.next.next = head; + + head.next = null; + + return nextHead; +}; + +// Runtime: 58 ms Beats 65.93% +// Memory: 52.49 MB Beats 8.56% + +// 12m 25s From fa3523f1be2dccb9938d4cd174f920403926c4c7 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:25:44 +0900 Subject: [PATCH 17/40] 338 / Counting Bits / Easy / 14m 28s --- berrnuda/5week/338_Counting_Bits.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 berrnuda/5week/338_Counting_Bits.js diff --git a/berrnuda/5week/338_Counting_Bits.js b/berrnuda/5week/338_Counting_Bits.js new file mode 100644 index 0000000..6658d3a --- /dev/null +++ b/berrnuda/5week/338_Counting_Bits.js @@ -0,0 +1,18 @@ +/** + * @param {number} n + * @return {number[]} + */ +var countBits = function (n) { + const result = new Array(n + 1).fill(0); + + for (let i = 1; i <= n; i++) { + result[i] = result[i >> 1] + (i & 1); + } + + return result; +}; + +// Runtime: 1 ms Beats 99.45% +// Memory: 56.49 MB Beats 52.28% + +// 14m 28s From 09c77ea16075282ef86345b573df4d4c41220c09 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:32:42 +0900 Subject: [PATCH 18/40] 70 / Climbing Stairs / Easy / 3m 11s --- berrnuda/5week/70_Climbing_Stairs.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 berrnuda/5week/70_Climbing_Stairs.js diff --git a/berrnuda/5week/70_Climbing_Stairs.js b/berrnuda/5week/70_Climbing_Stairs.js new file mode 100644 index 0000000..c3fefca --- /dev/null +++ b/berrnuda/5week/70_Climbing_Stairs.js @@ -0,0 +1,24 @@ +/** + * @param {number} n + * @return {number} + */ +var climbStairs = function (n) { + // dp[i] = dp[i-1] + dp[i-2] + if (n <= 2) return n; + + let dp1 = 1; + let dp2 = 2; + + for (let i = 3; i <= n; i++) { + let temp = dp1 + dp2; + dp1 = dp2; + dp2 = temp; + } + + return dp2; +}; + +// Runtime: 0 ms Beats 100.00% +// Memory: 48.76 MB Beats 52.62% + +// 3m 11s From e27461b7919be437d07a99fee384aa1317c9faca Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:40:09 +0900 Subject: [PATCH 19/40] 21 / Merge Two Sorted Lists / Easy / 5m 28s --- berrnuda/5week/21_Merge_Two_Sorted_Lists.js | 55 +++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 berrnuda/5week/21_Merge_Two_Sorted_Lists.js diff --git a/berrnuda/5week/21_Merge_Two_Sorted_Lists.js b/berrnuda/5week/21_Merge_Two_Sorted_Lists.js new file mode 100644 index 0000000..7a93516 --- /dev/null +++ b/berrnuda/5week/21_Merge_Two_Sorted_Lists.js @@ -0,0 +1,55 @@ +/** + * 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 (list1, list2) { + let head = null; + let current = null; + + for (; list1 !== null && list2 !== null; ) { + let selectedNode; + + if (list1.val <= list2.val) { + selectedNode = list1; + list1 = list1.next; + } else { + selectedNode = list2; + list2 = list2.next; + } + + if (head === null) { + head = selectedNode; + current = head; + } else { + current.next = selectedNode; + current = current.next; + } + } + + if (list1 !== null) { + if (current === null) { + return list1; + } + current.next = list1; + } else if (list2 !== null) { + if (current === null) { + return list2; + } + current.next = list2; + } + + return head; +}; + +// Runtime: 1 ms Beats 97.72% +// Memory: 51.30 MB Beats 82.63% + +// 5m 28s From 5722d0ec9b23b355e8a69c57c5e3942c554f4ed1 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Wed, 23 Oct 2024 08:42:57 +0900 Subject: [PATCH 20/40] 48 / Rotate Image / Medium / 15m 42s --- berrnuda/5week/48_Rotate_Image.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 berrnuda/5week/48_Rotate_Image.js diff --git a/berrnuda/5week/48_Rotate_Image.js b/berrnuda/5week/48_Rotate_Image.js new file mode 100644 index 0000000..0bad776 --- /dev/null +++ b/berrnuda/5week/48_Rotate_Image.js @@ -0,0 +1,20 @@ +/** + * @param {number[][]} matrix + * @return {void} Do not return anything, modify matrix in-place instead. + */ +var rotate = function (matrix) { + const n = matrix.length; + for (let i = 0; i < n; i++) { + for (let j = i + 1; j < n; j++) { + [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]]; + } + } + + for (let i = 0; i < n; i++) { + matrix[i].reverse(); + } +}; + +// Memory: 50.26 MB Beats 30.78% + +// 15m 42s From d73022e70cebe9b5939d49d86079baba71118f2f Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Wed, 23 Oct 2024 08:49:12 +0900 Subject: [PATCH 21/40] 1046 / Last Stone Weight / Easy / 8m 2s --- berrnuda/5week/1046_Last_Stone_Weight.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 berrnuda/5week/1046_Last_Stone_Weight.js diff --git a/berrnuda/5week/1046_Last_Stone_Weight.js b/berrnuda/5week/1046_Last_Stone_Weight.js new file mode 100644 index 0000000..15a4c45 --- /dev/null +++ b/berrnuda/5week/1046_Last_Stone_Weight.js @@ -0,0 +1,24 @@ +/** + * @param {number[]} stones + * @return {number} + */ +var lastStoneWeight = function (stones) { + for (; stones.length > 1; ) { + stones.sort((a, b) => b - a); + + let first = stones[0]; + let second = stones[1]; + + stones.splice(0, 2); + + if (first !== second) { + stones.push(first - second); + } + } + + return stones.length === 0 ? 0 : stones[0]; +}; + +// Memory: 50.41 MB Beats 76.77% + +// 8m 2s From 9ab7aa275f833d5b24eb55182466d6d855f856cb Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:30:15 +0900 Subject: [PATCH 22/40] 271 / Encode and Decode Strings / Medium / 28m --- .../6week/271_Encode_and_Decode_Strings.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 berrnuda/6week/271_Encode_and_Decode_Strings.js diff --git a/berrnuda/6week/271_Encode_and_Decode_Strings.js b/berrnuda/6week/271_Encode_and_Decode_Strings.js new file mode 100644 index 0000000..4028acc --- /dev/null +++ b/berrnuda/6week/271_Encode_and_Decode_Strings.js @@ -0,0 +1,35 @@ +class Solution { + /** + * @param {string[]} strs + * @returns {string} + */ + encode(strs) { + let encodedStr = ""; + + for (let i = 0; i < strs.length; i++) { + encodedStr += strs[i] + "[" + strs[i].length + "]"; + } + + return encodedStr; + } + + /** + * @param {string} str + * @returns {string[]} + */ + decode(str) { + let decodedStrs = []; + + for (let i = 0; i < str.length; ) { + let firstIndex = str.indexOf("[", i); + let lastIndex = str.indexOf("]", firstIndex); + + let word = str.substring(i, firstIndex); + decodedStrs.push(word); + + i = lastIndex + 1; + } + + return decodedStrs; + } +} From 87e10472f2b9e8ca9e45ac0bc12f18c2073ecc4c Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:43:09 +0900 Subject: [PATCH 23/40] 198 / House Robber / Medium / 7m 31s --- berrnuda/6week/198.House_Robber.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 berrnuda/6week/198.House_Robber.js diff --git a/berrnuda/6week/198.House_Robber.js b/berrnuda/6week/198.House_Robber.js new file mode 100644 index 0000000..3ca4ee1 --- /dev/null +++ b/berrnuda/6week/198.House_Robber.js @@ -0,0 +1,16 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + let rob1 = 0; + let rob2 = 0; + + for (let i = 0; i < nums.length; i++) { + let rob = Math.max(rob2 + nums[i], rob1); + rob2 = rob1; + rob1 = rob; + } + + return rob1; +}; From e1adc95f4cabc31be22d8292919cc13e9f1e1080 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 29 Oct 2024 20:01:26 +0900 Subject: [PATCH 24/40] 66 / Plus Onde / Easy / 7m 48s --- berrnuda/6week/66.Plus_One.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 berrnuda/6week/66.Plus_One.js diff --git a/berrnuda/6week/66.Plus_One.js b/berrnuda/6week/66.Plus_One.js new file mode 100644 index 0000000..cb0eb59 --- /dev/null +++ b/berrnuda/6week/66.Plus_One.js @@ -0,0 +1,17 @@ +/** + * @param {number[]} digits + * @return {number[]} + */ +var plusOne = function (digits) { + let l = digits.length; + + for (let i = l - 1; i >= 0; i--) { + digits[i]++; + if (digits[i] == 10) digits[i] = 0; + else return digits; + } + + digits.unshift(1); + + return digits; +}; From 5b12b2a3dfedcffd16d3b719a64797843b1628aa Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 29 Oct 2024 20:48:42 +0900 Subject: [PATCH 25/40] 704 / Binary Search / Easy / 3m 58s --- berrnuda/6week/704.Binary_Search.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 berrnuda/6week/704.Binary_Search.js diff --git a/berrnuda/6week/704.Binary_Search.js b/berrnuda/6week/704.Binary_Search.js new file mode 100644 index 0000000..7e8c49b --- /dev/null +++ b/berrnuda/6week/704.Binary_Search.js @@ -0,0 +1,19 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number} + */ +var search = function (nums, target) { + let first = 0; + let last = nums.length - 1; + + for (; first <= last; ) { + let curr = Math.floor((first + last) / 2); + + if (nums[curr] === target) return curr; + else if (nums[curr] < target) first = curr + 1; + else last = curr - 1; + } + + return -1; +}; From ecd1b7496191ec6db694cb24998661831a38575d Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 29 Oct 2024 21:12:05 +0900 Subject: [PATCH 26/40] 703 / Kth Largest Element in a Stream / Easy / 41m 16s" --- .../703.Kth_Largest_Element_in_a_Stream.js | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 berrnuda/6week/703.Kth_Largest_Element_in_a_Stream.js diff --git a/berrnuda/6week/703.Kth_Largest_Element_in_a_Stream.js b/berrnuda/6week/703.Kth_Largest_Element_in_a_Stream.js new file mode 100644 index 0000000..1ab1c05 --- /dev/null +++ b/berrnuda/6week/703.Kth_Largest_Element_in_a_Stream.js @@ -0,0 +1,29 @@ +/** + * @param {number} k + * @param {number[]} nums + */ +var KthLargest = function (k, nums) { + this.k = k; + this.score = []; + + for (let num of nums) this.add(num); +}; + +/** + * @param {number} val + * @return {number} + */ +KthLargest.prototype.add = function (val) { + if (this.score.length < this.k) this.score.push(val); + else if (val > this.score[this.k - 1]) this.score[this.k - 1] = val; + + this.score.sort((a, b) => b - a); + + return this.score[this.k - 1]; +}; + +/** + * Your KthLargest object will be instantiated and called as such: + * var obj = new KthLargest(k, nums) + * var param_1 = obj.add(val) + */ From 66869a01bee2f5df932c882e059e14e9860c25de Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:22:03 +0900 Subject: [PATCH 27/40] 102 / Binary Tree Level Order Traversal / Medium / 13m --- .../102_Binary_Tree_Level_Order_Traversal.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 berrnuda/9week/102_Binary_Tree_Level_Order_Traversal.js diff --git a/berrnuda/9week/102_Binary_Tree_Level_Order_Traversal.js b/berrnuda/9week/102_Binary_Tree_Level_Order_Traversal.js new file mode 100644 index 0000000..6596f35 --- /dev/null +++ b/berrnuda/9week/102_Binary_Tree_Level_Order_Traversal.js @@ -0,0 +1,36 @@ +/** + * 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 levelOrder = function (root) { + if (!root) return []; + + let result = []; + let queue = [root]; + let start = 0; + + for (; start < queue.length; ) { + let level = queue.length - start; + let curLevel = []; + + for (let i = 0; i < level; i++) { + let curNode = queue[start++]; + curLevel.push(curNode.val); + + if (curNode.left) queue.push(curNode.left); + if (curNode.right) queue.push(curNode.right); + } + + result.push(curLevel); + } + + return result; +}; From e08f1ea12ba6f7dd104889bc3f9265dd3b64a20f Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:32:25 +0900 Subject: [PATCH 28/40] 572 / Subtree of Another Tree / Easy / 08m 59s --- berrnuda/9week/572_Subtree_of_Another_Tree.js | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 berrnuda/9week/572_Subtree_of_Another_Tree.js diff --git a/berrnuda/9week/572_Subtree_of_Another_Tree.js b/berrnuda/9week/572_Subtree_of_Another_Tree.js new file mode 100644 index 0000000..804906b --- /dev/null +++ b/berrnuda/9week/572_Subtree_of_Another_Tree.js @@ -0,0 +1,29 @@ +/** + * 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) { + if (!root || !subRoot) return false; + + const isSame = (t1, t2) => { + if (!t1 && !t2) return true; + if (!t1 || !t2 || t1.val !== t2.val) return false; + + return isSame(t1.left, t2.left) && isSame(t1.right, t2.right); + }; + + return ( + isSame(root, subRoot) || + isSubtree(root.left, subRoot) || + isSubtree(root.right, subRoot) + ); +}; From 938451c03d9d5ab4b47df4ca71e8e7d2273d0e03 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:50:06 +0900 Subject: [PATCH 29/40] 213 / House Robber II / Medium / 11m 23s --- berrnuda/9week/213_House_Robber_II.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 berrnuda/9week/213_House_Robber_II.js diff --git a/berrnuda/9week/213_House_Robber_II.js b/berrnuda/9week/213_House_Robber_II.js new file mode 100644 index 0000000..ac30b4e --- /dev/null +++ b/berrnuda/9week/213_House_Robber_II.js @@ -0,0 +1,23 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + if (nums.length === 1) return nums[0]; + if (nums.length === 2) return Math.max(nums[0], nums[1]); + + const robRange = (start, end) => { + let prev1 = 0; + let prev2 = 0; + + for (let i = start; i <= end; i++) { + let temp = Math.max(prev1, prev2 + nums[i]); + prev2 = prev1; + prev1 = temp; + } + + return prev1; + }; + + return Math.max(robRange(0, nums.length - 2), robRange(1, nums.length - 1)); +}; From 3419dc158519058ca54c10db123b9594ed6fb2e7 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:51:35 +0900 Subject: [PATCH 30/40] 150 / Evaluate Reverse Polish Notation / Meium / 12m 01s --- .../150_Evaluate_Reverse_Polish_Notation.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 berrnuda/9week/150_Evaluate_Reverse_Polish_Notation.js diff --git a/berrnuda/9week/150_Evaluate_Reverse_Polish_Notation.js b/berrnuda/9week/150_Evaluate_Reverse_Polish_Notation.js new file mode 100644 index 0000000..b371571 --- /dev/null +++ b/berrnuda/9week/150_Evaluate_Reverse_Polish_Notation.js @@ -0,0 +1,21 @@ +/** + * @param {string[]} tokens + * @return {number} + */ +var evalRPN = function (tokens) { + const stack = []; + + for (let i = 0; i < tokens.length; i++) { + if (["+", "-", "*", "/"].includes(tokens[i])) { + const second = stack.pop(); + const first = stack.pop(); + + const result = eval(`${first} ${tokens[i]} ${second}`); + stack.push(Math.trunc(result)); + } else { + stack.push(Number(tokens[i])); + } + } + + return stack[0]; +}; From 2110affd7706ad28393d421a62e81b6d3f87891d Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 26 Nov 2024 19:08:46 +0900 Subject: [PATCH 31/40] 56 / Merge Intervals / Medium / 12m 58s --- berrnuda/10week/56_Merge_Intervals.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 berrnuda/10week/56_Merge_Intervals.js diff --git a/berrnuda/10week/56_Merge_Intervals.js b/berrnuda/10week/56_Merge_Intervals.js new file mode 100644 index 0000000..b23d85f --- /dev/null +++ b/berrnuda/10week/56_Merge_Intervals.js @@ -0,0 +1,24 @@ +/** + * @param {number[][]} intervals + * @return {number[][]} + */ +var merge = function (intervals) { + let n = intervals.length; + + intervals.sort((a, b) => a[0] - b[0]); + + let result = []; + let cur = intervals[0]; + + for (let i = 1; i < n; i++) { + if (cur[1] >= intervals[i][0]) cur[1] = Math.max(cur[1], intervals[i][1]); + else { + result.push(cur); + cur = intervals[i]; + } + } + + result.push(cur); + + return result; +}; From 19e1818c058490cd4e6251e0b516599437840c57 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 26 Nov 2024 19:25:08 +0900 Subject: [PATCH 32/40] 235 / Lowest Common Ancestor of a Binary Search Tree / Medium / 14m 45s --- ...Common_Ancestor_of_a_Binary_Search_Tree.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 berrnuda/10week/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js diff --git a/berrnuda/10week/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js b/berrnuda/10week/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js new file mode 100644 index 0000000..16b906d --- /dev/null +++ b/berrnuda/10week/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js @@ -0,0 +1,26 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val) { + * this.val = val; + * this.left = this.right = null; + * } + */ + +/** + * @param {TreeNode} root + * @param {TreeNode} p + * @param {TreeNode} q + * @return {TreeNode} + */ +var lowestCommonAncestor = function (root, p, q) { + while (root) { + if (p.val < root.val && q.val < root.val) { + root = root.left; + } else if (p.val > root.val && q.val > root.val) { + root = root.right; + } else { + return root; + } + } + return null; +}; From 8f8736763c7b8fd85ec04beebbe0437d0e0fee06 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 26 Nov 2024 19:53:52 +0900 Subject: [PATCH 33/40] 139 / Word Break / Medium / 18m 22s --- berrnuda/10week/139_Word_Break.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 berrnuda/10week/139_Word_Break.js diff --git a/berrnuda/10week/139_Word_Break.js b/berrnuda/10week/139_Word_Break.js new file mode 100644 index 0000000..ed24d03 --- /dev/null +++ b/berrnuda/10week/139_Word_Break.js @@ -0,0 +1,26 @@ +/** + * @param {string} s + * @param {string[]} wordDict + * @return {boolean} + */ +var wordBreak = function (s, wordDict) { + const wordSet = new Set(wordDict); + const dp = new Array(s.length + 1).fill(false); + + dp[0] = true; + + for (let i = 1; i <= s.length; i++) { + for (let word of wordSet) { + if ( + i >= word.length && + dp[i - word.length] && + s.slice(i - word.length, i) === word + ) { + dp[i] = true; + break; + } + } + } + + return dp[s.length]; +}; From 2d35cff50304270e357a09013db33b3e42373738 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:04:20 +0900 Subject: [PATCH 34/40] 215 / Kth Largest Element in an Array / Medium / 20m 19s --- .../10week/215_Kth_Largest_Element_in_an_Array.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 berrnuda/10week/215_Kth_Largest_Element_in_an_Array.js diff --git a/berrnuda/10week/215_Kth_Largest_Element_in_an_Array.js b/berrnuda/10week/215_Kth_Largest_Element_in_an_Array.js new file mode 100644 index 0000000..c55cd74 --- /dev/null +++ b/berrnuda/10week/215_Kth_Largest_Element_in_an_Array.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number} + */ +var findKthLargest = function (nums, k) { + const minPriQue = new MinPriorityQueue(); + for (let i = 0; i < nums.length; i++) { + minPriQue.enqueue(nums[i]); + if (minPriQue.size() > k) { + minPriQue.dequeue(); + } + } + return minPriQue.front().element; +}; From 4e952e1304b845afdb3b1e6319961a510cc955e9 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 3 Dec 2024 19:09:41 +0900 Subject: [PATCH 35/40] =?UTF-8?q?=EC=98=A4=ED=83=80=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- berrnuda/6week/{198.House_Robber.js => 198_House_Robber.js} | 0 berrnuda/6week/{66.Plus_One.js => 66_Plus_One.js} | 0 ...ment_in_a_Stream.js => 703_Kth_Largest_Element_in_a_Stream.js} | 0 berrnuda/6week/{704.Binary_Search.js => 704_Binary_Search.js} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename berrnuda/6week/{198.House_Robber.js => 198_House_Robber.js} (100%) rename berrnuda/6week/{66.Plus_One.js => 66_Plus_One.js} (100%) rename berrnuda/6week/{703.Kth_Largest_Element_in_a_Stream.js => 703_Kth_Largest_Element_in_a_Stream.js} (100%) rename berrnuda/6week/{704.Binary_Search.js => 704_Binary_Search.js} (100%) diff --git a/berrnuda/6week/198.House_Robber.js b/berrnuda/6week/198_House_Robber.js similarity index 100% rename from berrnuda/6week/198.House_Robber.js rename to berrnuda/6week/198_House_Robber.js diff --git a/berrnuda/6week/66.Plus_One.js b/berrnuda/6week/66_Plus_One.js similarity index 100% rename from berrnuda/6week/66.Plus_One.js rename to berrnuda/6week/66_Plus_One.js diff --git a/berrnuda/6week/703.Kth_Largest_Element_in_a_Stream.js b/berrnuda/6week/703_Kth_Largest_Element_in_a_Stream.js similarity index 100% rename from berrnuda/6week/703.Kth_Largest_Element_in_a_Stream.js rename to berrnuda/6week/703_Kth_Largest_Element_in_a_Stream.js diff --git a/berrnuda/6week/704.Binary_Search.js b/berrnuda/6week/704_Binary_Search.js similarity index 100% rename from berrnuda/6week/704.Binary_Search.js rename to berrnuda/6week/704_Binary_Search.js From f658377a50dad4d059333f39820d2d39f8eb5ac7 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 3 Dec 2024 19:10:28 +0900 Subject: [PATCH 36/40] 7 / Reverse Interger / Medium / 5m 57s --- berrnuda/11week/7_Reverse_Integer.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 berrnuda/11week/7_Reverse_Integer.js diff --git a/berrnuda/11week/7_Reverse_Integer.js b/berrnuda/11week/7_Reverse_Integer.js new file mode 100644 index 0000000..72ce53d --- /dev/null +++ b/berrnuda/11week/7_Reverse_Integer.js @@ -0,0 +1,12 @@ +/** + * @param {number} x + * @return {number} + */ +var reverse = function (x) { + const sign = x < 0; + const rev = parseInt(String(Math.abs(x)).split("").reverse().join("")); + + if (rev < -Math.pow(2, 31) || rev > Math.pow(2, 31) - 1) return 0; + + return sign ? -rev : rev; +}; From 6ce0a09a3087424a0adfd00bacda4c224537b2e5 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 3 Dec 2024 19:59:45 +0900 Subject: [PATCH 37/40] 743 / Network Delay Time / Medium / 35m 36s --- berrnuda/11week/743_Network_Delay_Time.js | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 berrnuda/11week/743_Network_Delay_Time.js diff --git a/berrnuda/11week/743_Network_Delay_Time.js b/berrnuda/11week/743_Network_Delay_Time.js new file mode 100644 index 0000000..7af3a57 --- /dev/null +++ b/berrnuda/11week/743_Network_Delay_Time.js @@ -0,0 +1,35 @@ +/** + * @param {number[][]} times + * @param {number} n + * @param {number} k + * @return {number} + */ +var networkDelayTime = function (times, n, k) { + const node = Array.from({ length: n + 1 }, () => []); + for (const [u, v, w] of times) node[u].push([v, w]); + + const dist = new Array(n + 1).fill(Infinity); + dist[k] = 0; + + const visited = new Array(n + 1).fill(false); + + for (let i = 1; i <= n; i++) { + let minNode = -1; + for (let j = 1; j <= n; j++) { + if (!visited[j] && (minNode === -1 || dist[j] < dist[minNode])) + minNode = j; + } + + if (dist[minNode] === Infinity) break; + + visited[minNode] = true; + + for (const [neighbor, weight] of node[minNode]) { + const newDist = dist[minNode] + weight; + if (newDist < dist[neighbor]) dist[neighbor] = newDist; + } + } + + const maxDist = Math.max(...dist.slice(1)); + return maxDist === Infinity ? -1 : maxDist; +}; From 9d9ee1489beb2311b270a01249d2ec7c709aff69 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:24:15 +0900 Subject: [PATCH 38/40] 39 / Combination Sum / Medium / 21m 41s --- berrnuda/11week/39_Combination_Sum.js | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 berrnuda/11week/39_Combination_Sum.js diff --git a/berrnuda/11week/39_Combination_Sum.js b/berrnuda/11week/39_Combination_Sum.js new file mode 100644 index 0000000..37596ac --- /dev/null +++ b/berrnuda/11week/39_Combination_Sum.js @@ -0,0 +1,30 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function (candidates, target) { + const result = []; + const stack = [[[], 0, 0]]; + + while (stack.length > 0) { + const [currentCombination, currentSum, startIndex] = stack.pop(); + + if (currentSum === target) { + result.push(currentCombination); + continue; + } + + if (currentSum > target) continue; + + for (let i = startIndex; i < candidates.length; i++) { + stack.push([ + [...currentCombination, candidates[i]], + currentSum + candidates[i], + i, + ]); + } + } + + return result; +}; From 1510888f5677feaabace0c263a02e5157565fe48 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:50:06 +0900 Subject: [PATCH 39/40] 2013 / Detect Squares / Medium / 31m 15s --- berrnuda/11week/2013_Detect_Squares.js | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 berrnuda/11week/2013_Detect_Squares.js diff --git a/berrnuda/11week/2013_Detect_Squares.js b/berrnuda/11week/2013_Detect_Squares.js new file mode 100644 index 0000000..90721b6 --- /dev/null +++ b/berrnuda/11week/2013_Detect_Squares.js @@ -0,0 +1,43 @@ +var DetectSquares = function () { + this.ptsCount = new Map(); +}; + +/** + * @param {number[]} point + * @return {void} + */ +DetectSquares.prototype.add = function (point) { + const key = `${point[0]}/${point[1]}`; + this.ptsCount.set(key, (this.ptsCount.get(key) || 0) + 1); +}; + +/** + * @param {number[]} point + * @return {number} + */ +DetectSquares.prototype.count = function (point) { + const [qx, qy] = point; + let result = 0; + + for (const key of this.ptsCount.keys()) { + const [px, py] = key.split("/").map(Number); + + if (Math.abs(px - qx) === Math.abs(py - qy) && px !== qx && py !== qy) { + const key1 = `${px}/${qy}`; + const key2 = `${qx}/${py}`; + result += + (this.ptsCount.get(key) || 0) * + (this.ptsCount.get(key1) || 0) * + (this.ptsCount.get(key2) || 0); + } + } + + return result; +}; + +/** + * Your DetectSquares object will be instantiated and called as such: + * var obj = new DetectSquares() + * obj.add(point) + * var param_2 = obj.count(point) + */ From d69159a6113da2aeb947716bd7b03113b69c99b4 Mon Sep 17 00:00:00 2001 From: Berrnuda <162148781+Berrnuda@users.noreply.github.com> Date: Tue, 3 Dec 2024 21:23:55 +0900 Subject: [PATCH 40/40] 57 / Insert Interval / Medium / 20m 29s --- berrnuda/11week/57_Insert_Interval.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 berrnuda/11week/57_Insert_Interval.js diff --git a/berrnuda/11week/57_Insert_Interval.js b/berrnuda/11week/57_Insert_Interval.js new file mode 100644 index 0000000..c6a2692 --- /dev/null +++ b/berrnuda/11week/57_Insert_Interval.js @@ -0,0 +1,24 @@ +/** + * @param {number[][]} intervals + * @param {number[]} newInterval + * @return {number[][]} + */ +var insert = function (intervals, newInterval) { + intervals.push(newInterval); + intervals.sort((a, b) => a[0] - b[0]); + + let res = [intervals[0]]; + + for (let i = 1; i < intervals.length; i++) { + if (res[res.length - 1][1] >= intervals[i][0]) { + res[res.length - 1][1] = Math.max( + res[res.length - 1][1], + intervals[i][1] + ); + } else { + res.push(intervals[i]); + } + } + + return res; +};