From 17a6538031c49fcf26f2fdc867a5cfe107f81837 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 1 Oct 2024 14:25:52 +0900 Subject: [PATCH 01/46] 242 / Valid Anagram / Easy / 7m30s --- JooKangsan/242_Valid_Anagram.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 JooKangsan/242_Valid_Anagram.js diff --git a/JooKangsan/242_Valid_Anagram.js b/JooKangsan/242_Valid_Anagram.js new file mode 100644 index 0000000..59fcd27 --- /dev/null +++ b/JooKangsan/242_Valid_Anagram.js @@ -0,0 +1,11 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ +var isAnagram = function(s, t) { + if (s.length !== t.length) return false; + let S = s.split('').sort().join('') + let T = t.split('').sort().join('') + return S === T +} \ No newline at end of file From 8c2be397e0d7697ca580009b55c295b0d3a5380d Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 1 Oct 2024 19:20:37 +0900 Subject: [PATCH 02/46] 191 / Number_of_1_Bits / Easy / 5m --- JooKangsan/191_Number_of_1_Bits.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 JooKangsan/191_Number_of_1_Bits.js diff --git a/JooKangsan/191_Number_of_1_Bits.js b/JooKangsan/191_Number_of_1_Bits.js new file mode 100644 index 0000000..c2e5262 --- /dev/null +++ b/JooKangsan/191_Number_of_1_Bits.js @@ -0,0 +1,13 @@ +/** + * @param {number} n + * @return {number} + */ +var hammingWeight = function(n) { + let byte = n.toString(2) + let nArr = byte.split('') + let count = 0 + for(let i = 0;i Date: Tue, 1 Oct 2024 19:39:42 +0900 Subject: [PATCH 03/46] 100 / Same Tree / Easy / 12m20s --- JooKangsan/100_Same_Tree.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 JooKangsan/100_Same_Tree.js diff --git a/JooKangsan/100_Same_Tree.js b/JooKangsan/100_Same_Tree.js new file mode 100644 index 0000000..b3fb1a0 --- /dev/null +++ b/JooKangsan/100_Same_Tree.js @@ -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} p + * @param {TreeNode} q + * @return {boolean} + */ +var isSameTree = function(p, q) { + if (!p && !q) return true; + if (!p || !q ) return false + if (p.val !== q.val) return false; + +return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); +}; \ No newline at end of file From 61b108925ed7d527cd691beab8376001246894b3 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 1 Oct 2024 20:28:22 +0900 Subject: [PATCH 04/46] 746 / Min Cost Climbing Stairs / Easy / 26m --- JooKangsan/746_Min_Cost_Climbing_Stairs.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 JooKangsan/746_Min_Cost_Climbing_Stairs.js diff --git a/JooKangsan/746_Min_Cost_Climbing_Stairs.js b/JooKangsan/746_Min_Cost_Climbing_Stairs.js new file mode 100644 index 0000000..32e7f31 --- /dev/null +++ b/JooKangsan/746_Min_Cost_Climbing_Stairs.js @@ -0,0 +1,14 @@ +/** + * @param {number[]} cost + * @return {number} + */ +var minCostClimbingStairs = function(cost) { + let n = cost.length; + let dp = new Array(n + 1).fill(0); + + for (let i = 2; i <= n; i++) { + dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]); + } + + return dp[n]; +}; From 5c13dbb343154a90181aab492c537e3722b3e61f Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 1 Oct 2024 20:53:49 +0900 Subject: [PATCH 05/46] 238 / Product of Array Except Self / Easy / 25m --- .../238_Product_of_Array_Except_Self.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 JooKangsan/238_Product_of_Array_Except_Self.js diff --git a/JooKangsan/238_Product_of_Array_Except_Self.js b/JooKangsan/238_Product_of_Array_Except_Self.js new file mode 100644 index 0000000..2d24f66 --- /dev/null +++ b/JooKangsan/238_Product_of_Array_Except_Self.js @@ -0,0 +1,22 @@ + + + /** + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function(nums) { + let n = nums.length; + let product = new Array(n).fill(1); + let leftValue = 1; + for (let i = 0; i < n; i++) { + product[i] = leftValue; + leftValue *= nums[i]; + } + let rightValue = 1; + for (let i = n - 1; i >= 0; i--) { + product[i] *= rightValue; + rightValue *= nums[i]; + } + + return product; +}; \ No newline at end of file From a466fab7dc00b7c55cf5be1ff59a8782722749b4 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 8 Oct 2024 19:50:11 +0900 Subject: [PATCH 06/46] 49 / Gropu Anagrams / Medium / 37m --- JooKangsan/49_Group_Anagrams.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 JooKangsan/49_Group_Anagrams.js diff --git a/JooKangsan/49_Group_Anagrams.js b/JooKangsan/49_Group_Anagrams.js new file mode 100644 index 0000000..f149ea4 --- /dev/null +++ b/JooKangsan/49_Group_Anagrams.js @@ -0,0 +1,24 @@ +/** + * @param {string[]} strs + * @return {string[][]} + */ +var groupAnagrams = function(strs) { + const anagramGroups = {}; + const arr = []; + + for (let i = 0; i < strs.length; i++) { + const sortedWord = strs[i].split('').sort().join(''); + if (anagramGroups[sortedWord]) { + anagramGroups[sortedWord].push(strs[i]); + } else { + anagramGroups[sortedWord] = [strs[i]]; + } + } + + for (let group in anagramGroups) { + arr.push(anagramGroups[group]); + } + + return arr; + }; + \ No newline at end of file From eb3ee6f95808f98ae302573eac4ae1b97745951d Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 8 Oct 2024 20:11:30 +0900 Subject: [PATCH 07/46] 190 / Reverse Bits / Easy / 12m --- JooKangsan/190_Reverse_Bits.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 JooKangsan/190_Reverse_Bits.js diff --git a/JooKangsan/190_Reverse_Bits.js b/JooKangsan/190_Reverse_Bits.js new file mode 100644 index 0000000..51e1c54 --- /dev/null +++ b/JooKangsan/190_Reverse_Bits.js @@ -0,0 +1,20 @@ +/** + * @param {number} n - a positive integer + * @return {number} - a positive integer + */ +var reverseBits = function(n) { + const arr = []; + const bits = n.toString(2).padStart(32, '0'); + for (let i = 31; i >= 0; i--) { + arr.push(bits[i]); + } + const answer = parseInt(arr.join(''), 2); + return answer; +}; + +var reverseBits = function(n) { + const bits = n.toString(2).padStart(32, '0'); + const reversedBits = bits.split('').reverse().join(''); + const answer = parseInt(reversedBits, 2); + return answer +}; From 1161b4aa9d4aa342eb13d4e8321e7df85f3a5631 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 8 Oct 2024 20:25:48 +0900 Subject: [PATCH 08/46] 125 / Valid Palindrome / Easy / 10m --- JooKangsan/125_Valid_Palindrome.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 JooKangsan/125_Valid_Palindrome.js diff --git a/JooKangsan/125_Valid_Palindrome.js b/JooKangsan/125_Valid_Palindrome.js new file mode 100644 index 0000000..789a3f1 --- /dev/null +++ b/JooKangsan/125_Valid_Palindrome.js @@ -0,0 +1,13 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function(s) { + s= s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); + for(let i = 0; i Date: Tue, 8 Oct 2024 22:48:37 +0900 Subject: [PATCH 09/46] 206 / Reverse Linked List / Easy / 40m --- JooKangsan/206_Reverse_Linked_List.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 JooKangsan/206_Reverse_Linked_List.js diff --git a/JooKangsan/206_Reverse_Linked_List.js b/JooKangsan/206_Reverse_Linked_List.js new file mode 100644 index 0000000..de285a7 --- /dev/null +++ b/JooKangsan/206_Reverse_Linked_List.js @@ -0,0 +1,26 @@ +/** + * 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 list = head.next; + let fast = list.next; + head.next = null; + while(list) { + list.next = head; + head = list; + list = fast; + if(!fast) break; + fast = fast.next; + } + return head; +}; + From aaaa8543a22d9d7038771ee42e7fb25ed1568ad0 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 9 Oct 2024 03:18:46 +0900 Subject: [PATCH 10/46] 322 / Coin Change / Medium / 60m --- JooKangsan/322_Coin_Change.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 JooKangsan/322_Coin_Change.js diff --git a/JooKangsan/322_Coin_Change.js b/JooKangsan/322_Coin_Change.js new file mode 100644 index 0000000..c9d2581 --- /dev/null +++ b/JooKangsan/322_Coin_Change.js @@ -0,0 +1,20 @@ +/** + * @param {number[]} coins + * @param {number} amount + * @return {number} + */ +var coinChange = function (coins, amount) { + let dp = new Array(amount + 1).fill(amount + 1); + + dp[0] = 0; + + for (let i = 1; i <= amount; i++) { + for (let coin of coins) { + if (coin <= i) { + dp[i] = Math.min(dp[i], dp[i - coin] + 1); + } + } + } + + return dp[amount] > amount ? -1 : dp[amount]; + }; \ No newline at end of file From fd2a34ef9da99c315a32fac38d2d01f1982a2ceb Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 15 Oct 2024 19:26:01 +0900 Subject: [PATCH 11/46] 104/ Maximum Depth of Binary Tree / Easy / 7m20s --- alexgoni/104_Maximum_Depth_of_Binary_Tree.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 alexgoni/104_Maximum_Depth_of_Binary_Tree.js diff --git a/alexgoni/104_Maximum_Depth_of_Binary_Tree.js b/alexgoni/104_Maximum_Depth_of_Binary_Tree.js new file mode 100644 index 0000000..29c77a2 --- /dev/null +++ b/alexgoni/104_Maximum_Depth_of_Binary_Tree.js @@ -0,0 +1,16 @@ +/** + * 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 = function(root) { + if (!root) return 0; + return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1; +}; \ No newline at end of file From f3d76c69243fb15a7d1fc731fa4f38f87065e952 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 15 Oct 2024 19:27:59 +0900 Subject: [PATCH 12/46] 1 / Two Sum / Easy / 12m --- alexgoni/1_Two_Sum.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 alexgoni/1_Two_Sum.js diff --git a/alexgoni/1_Two_Sum.js b/alexgoni/1_Two_Sum.js new file mode 100644 index 0000000..762576c --- /dev/null +++ b/alexgoni/1_Two_Sum.js @@ -0,0 +1,26 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + // 원본 배열을 복사하여 정렬 + const sortedNums = nums.map((num, index) => [num, index]).sort((a, b) => a[0] - b[0]); + + let left = 0; + let right = sortedNums.length - 1; + + while (left < right) { + const sum = sortedNums[left][0] + sortedNums[right][0]; + + if (sum === target) { + return [sortedNums[left][1], sortedNums[right][1]]; + } else if (sum < target) { + left++; + } else { + right--; + } + } + + return []; +}; \ No newline at end of file From 60e0c6613ae541a5198f9ea35a405784c3a78bc2 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 15 Oct 2024 20:21:51 +0900 Subject: [PATCH 13/46] 202 / Happy Number / Easy / 30m --- alexgoni/202_Happy_Number.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 alexgoni/202_Happy_Number.js diff --git a/alexgoni/202_Happy_Number.js b/alexgoni/202_Happy_Number.js new file mode 100644 index 0000000..8a2f57c --- /dev/null +++ b/alexgoni/202_Happy_Number.js @@ -0,0 +1,34 @@ +/** + * @param {number} n + * @return {boolean} + */ +var isHappy = function (n) { + let sum; + if (n === 1 || n === 7 ) return true; + while (n > 9) { + sum = 0; + const strN = String(n); + for (let i = 0; i < strN.length; i++) { + sum += strN[i] * strN[i]; + } + n = sum; + if (n === 1 || n === 7 ) return true; + } + return n === 1 || n === 7; +}; + +// 기존 코드 +var isHappy = function (n) { + let sum; + if (n === 1) return true; + while (n > 1) { + sum = 0; + const strN = String(n); + for (let i = 0; i < strN.length; i++) { + sum += strN[i] * strN[i]; + } + n = sum; + if (n === 1) return true; + } + return n === 1 +}; \ No newline at end of file From 9966ff6a1dc997a8154764760e62227537c7604c Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 15 Oct 2024 20:36:16 +0900 Subject: [PATCH 14/46] 20 / Valid Parentheses / Easy / 12m/40s --- alexgoni/20_Valid_Parentheses.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 alexgoni/20_Valid_Parentheses.js diff --git a/alexgoni/20_Valid_Parentheses.js b/alexgoni/20_Valid_Parentheses.js new file mode 100644 index 0000000..40071d8 --- /dev/null +++ b/alexgoni/20_Valid_Parentheses.js @@ -0,0 +1,22 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isValid = function(s) { + const stack = []; + + for (let i = 0 ; i < s.length ; i++) { + if(s[i] == '('){ + stack.push(')'); + }else if(s[i] == '['){ + stack.push(']'); + }else if(s[i] == '{'){ + stack.push('}'); + }else{ + if (s[i] !== stack.pop()) { + return false; + } + } + } + return stack.length === 0; +}; \ No newline at end of file From cfd419e543be64b51065be5030b49d24e52448b1 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 15 Oct 2024 21:00:19 +0900 Subject: [PATCH 15/46] 141 / Linked List Cycle / Easy / X --- alexgoni/141_Linked_List_Cycle.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 alexgoni/141_Linked_List_Cycle.js diff --git a/alexgoni/141_Linked_List_Cycle.js b/alexgoni/141_Linked_List_Cycle.js new file mode 100644 index 0000000..7c66212 --- /dev/null +++ b/alexgoni/141_Linked_List_Cycle.js @@ -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) { + if (!head || !head.next) return false; + let slow = head; + let fast = head; + while (fast && fast.next) { + slow = slow.next; + fast = fast.next.next; + if (slow === fast) { + return true; + } + } + return false; +}; From 234dd69a56abad4f911f061294dc60ca6ced00df Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 15 Oct 2024 21:02:44 +0900 Subject: [PATCH 16/46] =?UTF-8?q?=20fix=20:=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=EC=8B=A4=EC=88=98=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 --- {alexgoni => JooKangsan}/104_Maximum_Depth_of_Binary_Tree.js | 0 {alexgoni => JooKangsan}/141_Linked_List_Cycle.js | 0 {alexgoni => JooKangsan}/1_Two_Sum.js | 0 {alexgoni => JooKangsan}/202_Happy_Number.js | 0 {alexgoni => JooKangsan}/20_Valid_Parentheses.js | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {alexgoni => JooKangsan}/104_Maximum_Depth_of_Binary_Tree.js (100%) rename {alexgoni => JooKangsan}/141_Linked_List_Cycle.js (100%) rename {alexgoni => JooKangsan}/1_Two_Sum.js (100%) rename {alexgoni => JooKangsan}/202_Happy_Number.js (100%) rename {alexgoni => JooKangsan}/20_Valid_Parentheses.js (100%) diff --git a/alexgoni/104_Maximum_Depth_of_Binary_Tree.js b/JooKangsan/104_Maximum_Depth_of_Binary_Tree.js similarity index 100% rename from alexgoni/104_Maximum_Depth_of_Binary_Tree.js rename to JooKangsan/104_Maximum_Depth_of_Binary_Tree.js diff --git a/alexgoni/141_Linked_List_Cycle.js b/JooKangsan/141_Linked_List_Cycle.js similarity index 100% rename from alexgoni/141_Linked_List_Cycle.js rename to JooKangsan/141_Linked_List_Cycle.js diff --git a/alexgoni/1_Two_Sum.js b/JooKangsan/1_Two_Sum.js similarity index 100% rename from alexgoni/1_Two_Sum.js rename to JooKangsan/1_Two_Sum.js diff --git a/alexgoni/202_Happy_Number.js b/JooKangsan/202_Happy_Number.js similarity index 100% rename from alexgoni/202_Happy_Number.js rename to JooKangsan/202_Happy_Number.js diff --git a/alexgoni/20_Valid_Parentheses.js b/JooKangsan/20_Valid_Parentheses.js similarity index 100% rename from alexgoni/20_Valid_Parentheses.js rename to JooKangsan/20_Valid_Parentheses.js From 50081de99476d305402d9ead1410a0eecf740b5c Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 22 Oct 2024 20:28:20 +0900 Subject: [PATCH 17/46] 70 / Climbing Stairs / Easy / 5m30 --- JooKangsan/ 338_Counting_Bits.js | 0 JooKangsan/338_Counting_Bits.js | 13 +++++++++++++ JooKangsan/70_Climbing_Stairs.js | 14 ++++++++++++++ 3 files changed, 27 insertions(+) delete mode 100644 JooKangsan/ 338_Counting_Bits.js create mode 100644 JooKangsan/338_Counting_Bits.js create mode 100644 JooKangsan/70_Climbing_Stairs.js diff --git a/JooKangsan/ 338_Counting_Bits.js b/JooKangsan/ 338_Counting_Bits.js deleted file mode 100644 index e69de29..0000000 diff --git a/JooKangsan/338_Counting_Bits.js b/JooKangsan/338_Counting_Bits.js new file mode 100644 index 0000000..128e1c1 --- /dev/null +++ b/JooKangsan/338_Counting_Bits.js @@ -0,0 +1,13 @@ +/** + * @param {number} n + * @return {number[]} + */ +var countBits = function (n) { + const ans = new Array(n + 1).fill(0); + + for (let i = 1; i <= n; i++) { + ans[i] = ans[Math.floor(i / 2)] + (i % 2); + } + + return ans; +}; diff --git a/JooKangsan/70_Climbing_Stairs.js b/JooKangsan/70_Climbing_Stairs.js new file mode 100644 index 0000000..93ddac8 --- /dev/null +++ b/JooKangsan/70_Climbing_Stairs.js @@ -0,0 +1,14 @@ +/** + * @param {number} n + * @return {number} + */ +var climbStairs = function (n) { + if (n <= 2) return n; + const step = new Array(n + 1).fill(0); + step[1] = 1; + step[2] = 2; + for (let i = 3; i <= n; i++) { + step[i] = step[i - 1] + step[i - 2]; + } + return step[n]; +}; From d82f3c894b4e6be631fca436fa88645ae2d86d90 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 22 Oct 2024 20:34:59 +0900 Subject: [PATCH 18/46] 21 / Merge Two Sorted Lists / Easy / 4m40s --- JooKangsan/21_Merge_Two_Sorted_Lists.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 JooKangsan/21_Merge_Two_Sorted_Lists.js diff --git a/JooKangsan/21_Merge_Two_Sorted_Lists.js b/JooKangsan/21_Merge_Two_Sorted_Lists.js new file mode 100644 index 0000000..5cd4c48 --- /dev/null +++ b/JooKangsan/21_Merge_Two_Sorted_Lists.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} list1 + * @param {ListNode} list2 + * @return {ListNode} + */ +var mergeTwoLists = function (list1, list2) { + if (list1 == null) return list2; + if (list2 == null) return list1; + if (list1.val < list2.val) { + list1.next = mergeTwoLists(list1.next, list2); + return list1; + } else { + list2.next = mergeTwoLists(list1, list2.next); + return list2; + } +}; From 4c9cfdd49b14ed89b1a87ad20225af3ed8d19bce Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 22 Oct 2024 20:58:46 +0900 Subject: [PATCH 19/46] 48 / Rotate Image / Easy / 7m40s --- JooKangsan/21_Merge_Two_Sorted_Lists.js | 2 +- JooKangsan/48_Rotate_Image.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 JooKangsan/48_Rotate_Image.js diff --git a/JooKangsan/21_Merge_Two_Sorted_Lists.js b/JooKangsan/21_Merge_Two_Sorted_Lists.js index 5cd4c48..37aec34 100644 --- a/JooKangsan/21_Merge_Two_Sorted_Lists.js +++ b/JooKangsan/21_Merge_Two_Sorted_Lists.js @@ -13,7 +13,7 @@ var mergeTwoLists = function (list1, list2) { if (list1 == null) return list2; if (list2 == null) return list1; - if (list1.val < list2.val) { + if (list1.val <= list2.val) { list1.next = mergeTwoLists(list1.next, list2); return list1; } else { diff --git a/JooKangsan/48_Rotate_Image.js b/JooKangsan/48_Rotate_Image.js new file mode 100644 index 0000000..aec7e05 --- /dev/null +++ b/JooKangsan/48_Rotate_Image.js @@ -0,0 +1,14 @@ +/** + * @param {number[][]} matrix + * @return {void} Do not return anything, modify matrix in-place instead. + */ +var rotate = function (matrix) { + for (let i = 0; i < matrix.length; i++) { + for (let j = i + 1; j < matrix.length; j++) { + [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]]; + } + } + for (let i = 0; i < matrix.length; i++) { + matrix[i].reverse(); + } +}; From a38a9cc8bccf3f13034fc98c45eb251fe8d2b92e Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 22 Oct 2024 21:10:30 +0900 Subject: [PATCH 20/46] 1046 / Last Stone Weight / Easy / 3m10s --- JooKangsan/1046_Last_Stone_Weight.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 JooKangsan/1046_Last_Stone_Weight.js diff --git a/JooKangsan/1046_Last_Stone_Weight.js b/JooKangsan/1046_Last_Stone_Weight.js new file mode 100644 index 0000000..a8e11c3 --- /dev/null +++ b/JooKangsan/1046_Last_Stone_Weight.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} stones + * @return {number} + */ +var lastStoneWeight = function (stones) { + while (stones.length > 1) { + stones.sort((a, b) => b - a); + const first = stones.shift(); + const second = stones.shift(); + if (first !== second) { + stones.push(first - second); + } + } + return stones.length === 0 ? 0 : stones[0]; +}; From 5f427a144cee9a8d6c7647d0963285664112f9b0 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 29 Oct 2024 19:11:31 +0900 Subject: [PATCH 21/46] 271 / Encode and Decode String / Easy / 8m10s --- JooKangsan/271_Encode_and_Decode_Strings.js | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 JooKangsan/271_Encode_and_Decode_Strings.js diff --git a/JooKangsan/271_Encode_and_Decode_Strings.js b/JooKangsan/271_Encode_and_Decode_Strings.js new file mode 100644 index 0000000..0bf15a0 --- /dev/null +++ b/JooKangsan/271_Encode_and_Decode_Strings.js @@ -0,0 +1,27 @@ +class Solution { + /** + * @param {string[]} strs + * @returns {string} + */ + encode(strs) { + return strs.map((s) => `${s.length}#${s}`).join(""); + } + + /** + * @param {string} str + * @returns {string[]} + */ + decode(str) { + let i = 0; + const result = []; + + while (i < str.length) { + let j = str.indexOf("#", i); + let length = parseInt(str.slice(i, j), 10); + result.push(str.slice(j + 1, j + 1 + length)); + i = j + 1 + length; + } + + return result; + } +} From f0d2ea7b8d5428dc055d5df24c60d567388ab451 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 29 Oct 2024 19:24:07 +0900 Subject: [PATCH 22/46] 198 / House Robber / medium / 4m30s --- JooKangsan/198_House_Robber.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 JooKangsan/198_House_Robber.js diff --git a/JooKangsan/198_House_Robber.js b/JooKangsan/198_House_Robber.js new file mode 100644 index 0000000..a4443db --- /dev/null +++ b/JooKangsan/198_House_Robber.js @@ -0,0 +1,18 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + let n = nums.length; + if (n === 0) return 0; + if (n === 1) return nums[0]; + + let dp = new Array(n + 1).fill(0); + dp[1] = nums[0]; + + for (let i = 2; i <= n; i++) { + dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]); + } + + return dp[n]; +}; From c9a380c2e2abbcefc1606bdaf296cde41df30487 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 29 Oct 2024 19:33:43 +0900 Subject: [PATCH 23/46] 66 / Plus One / easy / 2m20s --- JooKangsan/66_Plus_One.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 JooKangsan/66_Plus_One.js diff --git a/JooKangsan/66_Plus_One.js b/JooKangsan/66_Plus_One.js new file mode 100644 index 0000000..81c2f98 --- /dev/null +++ b/JooKangsan/66_Plus_One.js @@ -0,0 +1,8 @@ +/** + * @param {number[]} digits + * @return {number[]} + */ +var plusOne = function (digits) { + const join = BigInt(digits.join("")) + 1n; + return join.toString().split("").map(Number); +}; From 90b5ae7a246cf435ded149017b97e94697e1d6fe Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 29 Oct 2024 20:02:47 +0900 Subject: [PATCH 24/46] 704 / Binary Search / 4m50s --- JooKangsan/704_Binary_Search.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 JooKangsan/704_Binary_Search.js diff --git a/JooKangsan/704_Binary_Search.js b/JooKangsan/704_Binary_Search.js new file mode 100644 index 0000000..3f0a314 --- /dev/null +++ b/JooKangsan/704_Binary_Search.js @@ -0,0 +1,22 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number} + */ +var search = function(nums, target) { + let left = 0; + let right = nums.length - 1; + while (left <= right) { + const center = Math.floor((left + right) / 2); + + if (nums[center] === target) { + return center; + } else if (nums[center] < target) { + left = center + 1; + } else { + right = center - 1; + } + } + + return -1; +} \ No newline at end of file From f8fc1f729e2a41b33300d710891533e8d5a6f0a2 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 29 Oct 2024 20:56:01 +0900 Subject: [PATCH 25/46] 703 / Kth Largest Element in a Stream / easy / 47m --- .../ 703_Kth_Largest_Element_in_a_Stream.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js diff --git a/JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js b/JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js new file mode 100644 index 0000000..96d1565 --- /dev/null +++ b/JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js @@ -0,0 +1,28 @@ +/** + * @param {number} k + * @param {number[]} nums + */ +var KthLargest = function(k, nums) { + this.k = k; +this.nums = nums.sort((a, b) => a - b).slice(-k); +}; + +/** +* @param {number} val +* @return {number} +*/ +KthLargest.prototype.add = function(val) { +if (this.nums.length < this.k) { +this.nums.push(val); +this.nums.sort((a, b) => a - b); +} else if (val > this.nums[0]) { +this.nums[0] = val; +this.nums.sort((a, b) => a - b); +} +return this.nums[0]; +} +/** +* Your KthLargest object will be instantiated and called as such: +* var obj = new KthLargest(k, nums) +* var param_1 = obj.add(val) +*/ From 7cc687169bb2196841163e2f939c95a1d602491d Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 12 Nov 2024 20:07:01 +0900 Subject: [PATCH 26/46] =?UTF-8?q?fix:=20=EC=A3=BC=EC=B0=A8=EB=B3=84?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ 703_Kth_Largest_Element_in_a_Stream.js | 28 --------- .../121_Best_Time_to_Buy_and_Sell_Stock.js" | 0 .../1\354\243\274\354\260\250/15_3Sum.js" | 0 .../217_Contains_Duplicate.js" | 0 .../268_Missing_Number.js" | 0 .../Meeting Schedule.js" | 0 .../100_Same_Tree.js" | 0 .../191_Number_of_1_Bits.js" | 0 .../238_Product_of_Array_Except_Self.js" | 0 .../242_Valid_Anagram.js" | 0 .../746_Min_Cost_Climbing_Stairs.js" | 0 .../125_Valid_Palindrome.js" | 0 .../190_Reverse_Bits.js" | 0 .../206_Reverse_Linked_List.js" | 0 .../322_Coin_Change.js" | 0 .../49_Group_Anagrams.js" | 0 .../104_Maximum_Depth_of_Binary_Tree.js" | 0 .../141_Linked_List_Cycle.js" | 0 .../4\354\243\274\354\260\250/1_Two_Sum.js" | 0 .../202_Happy_Number.js" | 0 .../20_Valid_Parentheses.js" | 0 .../1046_Last_Stone_Weight.js" | 0 .../21_Merge_Two_Sorted_Lists.js" | 0 .../338_Counting_Bits.js" | 0 .../48_Rotate_Image.js" | 0 .../70_Climbing_Stairs.js" | 0 .../ 703_Kth_Largest_Element_in_a_Stream.js" | 63 +++++++++++++++++++ .../198_House_Robber.js" | 0 .../271_Encode_and_Decode_Strings.js" | 0 .../6\354\243\274\354\260\250/66_Plus_One.js" | 0 .../704_Binary_Search.js" | 0 31 files changed, 63 insertions(+), 28 deletions(-) delete mode 100644 JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js rename JooKangsan/121_Best_Time_to_Buy_and_Sell_Stock.js => "JooKangsan/1\354\243\274\354\260\250/121_Best_Time_to_Buy_and_Sell_Stock.js" (100%) rename JooKangsan/15_3Sum.js => "JooKangsan/1\354\243\274\354\260\250/15_3Sum.js" (100%) rename JooKangsan/217_Contains_Duplicate.js => "JooKangsan/1\354\243\274\354\260\250/217_Contains_Duplicate.js" (100%) rename JooKangsan/268_Missing_Number.js => "JooKangsan/1\354\243\274\354\260\250/268_Missing_Number.js" (100%) rename JooKangsan/Meeting Schedule.js => "JooKangsan/1\354\243\274\354\260\250/Meeting Schedule.js" (100%) rename JooKangsan/100_Same_Tree.js => "JooKangsan/2\354\243\274\354\260\250/100_Same_Tree.js" (100%) rename JooKangsan/191_Number_of_1_Bits.js => "JooKangsan/2\354\243\274\354\260\250/191_Number_of_1_Bits.js" (100%) rename JooKangsan/238_Product_of_Array_Except_Self.js => "JooKangsan/2\354\243\274\354\260\250/238_Product_of_Array_Except_Self.js" (100%) rename JooKangsan/242_Valid_Anagram.js => "JooKangsan/2\354\243\274\354\260\250/242_Valid_Anagram.js" (100%) rename JooKangsan/746_Min_Cost_Climbing_Stairs.js => "JooKangsan/2\354\243\274\354\260\250/746_Min_Cost_Climbing_Stairs.js" (100%) rename JooKangsan/125_Valid_Palindrome.js => "JooKangsan/3\354\243\274\354\260\250/125_Valid_Palindrome.js" (100%) rename JooKangsan/190_Reverse_Bits.js => "JooKangsan/3\354\243\274\354\260\250/190_Reverse_Bits.js" (100%) rename JooKangsan/206_Reverse_Linked_List.js => "JooKangsan/3\354\243\274\354\260\250/206_Reverse_Linked_List.js" (100%) rename JooKangsan/322_Coin_Change.js => "JooKangsan/3\354\243\274\354\260\250/322_Coin_Change.js" (100%) rename JooKangsan/49_Group_Anagrams.js => "JooKangsan/3\354\243\274\354\260\250/49_Group_Anagrams.js" (100%) rename JooKangsan/104_Maximum_Depth_of_Binary_Tree.js => "JooKangsan/4\354\243\274\354\260\250/104_Maximum_Depth_of_Binary_Tree.js" (100%) rename JooKangsan/141_Linked_List_Cycle.js => "JooKangsan/4\354\243\274\354\260\250/141_Linked_List_Cycle.js" (100%) rename JooKangsan/1_Two_Sum.js => "JooKangsan/4\354\243\274\354\260\250/1_Two_Sum.js" (100%) rename JooKangsan/202_Happy_Number.js => "JooKangsan/4\354\243\274\354\260\250/202_Happy_Number.js" (100%) rename JooKangsan/20_Valid_Parentheses.js => "JooKangsan/4\354\243\274\354\260\250/20_Valid_Parentheses.js" (100%) rename JooKangsan/1046_Last_Stone_Weight.js => "JooKangsan/5\354\243\274\354\260\250/1046_Last_Stone_Weight.js" (100%) rename JooKangsan/21_Merge_Two_Sorted_Lists.js => "JooKangsan/5\354\243\274\354\260\250/21_Merge_Two_Sorted_Lists.js" (100%) rename JooKangsan/338_Counting_Bits.js => "JooKangsan/5\354\243\274\354\260\250/338_Counting_Bits.js" (100%) rename JooKangsan/48_Rotate_Image.js => "JooKangsan/5\354\243\274\354\260\250/48_Rotate_Image.js" (100%) rename JooKangsan/70_Climbing_Stairs.js => "JooKangsan/5\354\243\274\354\260\250/70_Climbing_Stairs.js" (100%) create mode 100644 "JooKangsan/6\354\243\274\354\260\250/ 703_Kth_Largest_Element_in_a_Stream.js" rename JooKangsan/198_House_Robber.js => "JooKangsan/6\354\243\274\354\260\250/198_House_Robber.js" (100%) rename JooKangsan/271_Encode_and_Decode_Strings.js => "JooKangsan/6\354\243\274\354\260\250/271_Encode_and_Decode_Strings.js" (100%) rename JooKangsan/66_Plus_One.js => "JooKangsan/6\354\243\274\354\260\250/66_Plus_One.js" (100%) rename JooKangsan/704_Binary_Search.js => "JooKangsan/6\354\243\274\354\260\250/704_Binary_Search.js" (100%) diff --git a/JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js b/JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js deleted file mode 100644 index 96d1565..0000000 --- a/JooKangsan/ 703_Kth_Largest_Element_in_a_Stream.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @param {number} k - * @param {number[]} nums - */ -var KthLargest = function(k, nums) { - this.k = k; -this.nums = nums.sort((a, b) => a - b).slice(-k); -}; - -/** -* @param {number} val -* @return {number} -*/ -KthLargest.prototype.add = function(val) { -if (this.nums.length < this.k) { -this.nums.push(val); -this.nums.sort((a, b) => a - b); -} else if (val > this.nums[0]) { -this.nums[0] = val; -this.nums.sort((a, b) => a - b); -} -return this.nums[0]; -} -/** -* Your KthLargest object will be instantiated and called as such: -* var obj = new KthLargest(k, nums) -* var param_1 = obj.add(val) -*/ diff --git a/JooKangsan/121_Best_Time_to_Buy_and_Sell_Stock.js "b/JooKangsan/1\354\243\274\354\260\250/121_Best_Time_to_Buy_and_Sell_Stock.js" similarity index 100% rename from JooKangsan/121_Best_Time_to_Buy_and_Sell_Stock.js rename to "JooKangsan/1\354\243\274\354\260\250/121_Best_Time_to_Buy_and_Sell_Stock.js" diff --git a/JooKangsan/15_3Sum.js "b/JooKangsan/1\354\243\274\354\260\250/15_3Sum.js" similarity index 100% rename from JooKangsan/15_3Sum.js rename to "JooKangsan/1\354\243\274\354\260\250/15_3Sum.js" diff --git a/JooKangsan/217_Contains_Duplicate.js "b/JooKangsan/1\354\243\274\354\260\250/217_Contains_Duplicate.js" similarity index 100% rename from JooKangsan/217_Contains_Duplicate.js rename to "JooKangsan/1\354\243\274\354\260\250/217_Contains_Duplicate.js" diff --git a/JooKangsan/268_Missing_Number.js "b/JooKangsan/1\354\243\274\354\260\250/268_Missing_Number.js" similarity index 100% rename from JooKangsan/268_Missing_Number.js rename to "JooKangsan/1\354\243\274\354\260\250/268_Missing_Number.js" diff --git a/JooKangsan/Meeting Schedule.js "b/JooKangsan/1\354\243\274\354\260\250/Meeting Schedule.js" similarity index 100% rename from JooKangsan/Meeting Schedule.js rename to "JooKangsan/1\354\243\274\354\260\250/Meeting Schedule.js" diff --git a/JooKangsan/100_Same_Tree.js "b/JooKangsan/2\354\243\274\354\260\250/100_Same_Tree.js" similarity index 100% rename from JooKangsan/100_Same_Tree.js rename to "JooKangsan/2\354\243\274\354\260\250/100_Same_Tree.js" diff --git a/JooKangsan/191_Number_of_1_Bits.js "b/JooKangsan/2\354\243\274\354\260\250/191_Number_of_1_Bits.js" similarity index 100% rename from JooKangsan/191_Number_of_1_Bits.js rename to "JooKangsan/2\354\243\274\354\260\250/191_Number_of_1_Bits.js" diff --git a/JooKangsan/238_Product_of_Array_Except_Self.js "b/JooKangsan/2\354\243\274\354\260\250/238_Product_of_Array_Except_Self.js" similarity index 100% rename from JooKangsan/238_Product_of_Array_Except_Self.js rename to "JooKangsan/2\354\243\274\354\260\250/238_Product_of_Array_Except_Self.js" diff --git a/JooKangsan/242_Valid_Anagram.js "b/JooKangsan/2\354\243\274\354\260\250/242_Valid_Anagram.js" similarity index 100% rename from JooKangsan/242_Valid_Anagram.js rename to "JooKangsan/2\354\243\274\354\260\250/242_Valid_Anagram.js" diff --git a/JooKangsan/746_Min_Cost_Climbing_Stairs.js "b/JooKangsan/2\354\243\274\354\260\250/746_Min_Cost_Climbing_Stairs.js" similarity index 100% rename from JooKangsan/746_Min_Cost_Climbing_Stairs.js rename to "JooKangsan/2\354\243\274\354\260\250/746_Min_Cost_Climbing_Stairs.js" diff --git a/JooKangsan/125_Valid_Palindrome.js "b/JooKangsan/3\354\243\274\354\260\250/125_Valid_Palindrome.js" similarity index 100% rename from JooKangsan/125_Valid_Palindrome.js rename to "JooKangsan/3\354\243\274\354\260\250/125_Valid_Palindrome.js" diff --git a/JooKangsan/190_Reverse_Bits.js "b/JooKangsan/3\354\243\274\354\260\250/190_Reverse_Bits.js" similarity index 100% rename from JooKangsan/190_Reverse_Bits.js rename to "JooKangsan/3\354\243\274\354\260\250/190_Reverse_Bits.js" diff --git a/JooKangsan/206_Reverse_Linked_List.js "b/JooKangsan/3\354\243\274\354\260\250/206_Reverse_Linked_List.js" similarity index 100% rename from JooKangsan/206_Reverse_Linked_List.js rename to "JooKangsan/3\354\243\274\354\260\250/206_Reverse_Linked_List.js" diff --git a/JooKangsan/322_Coin_Change.js "b/JooKangsan/3\354\243\274\354\260\250/322_Coin_Change.js" similarity index 100% rename from JooKangsan/322_Coin_Change.js rename to "JooKangsan/3\354\243\274\354\260\250/322_Coin_Change.js" diff --git a/JooKangsan/49_Group_Anagrams.js "b/JooKangsan/3\354\243\274\354\260\250/49_Group_Anagrams.js" similarity index 100% rename from JooKangsan/49_Group_Anagrams.js rename to "JooKangsan/3\354\243\274\354\260\250/49_Group_Anagrams.js" diff --git a/JooKangsan/104_Maximum_Depth_of_Binary_Tree.js "b/JooKangsan/4\354\243\274\354\260\250/104_Maximum_Depth_of_Binary_Tree.js" similarity index 100% rename from JooKangsan/104_Maximum_Depth_of_Binary_Tree.js rename to "JooKangsan/4\354\243\274\354\260\250/104_Maximum_Depth_of_Binary_Tree.js" diff --git a/JooKangsan/141_Linked_List_Cycle.js "b/JooKangsan/4\354\243\274\354\260\250/141_Linked_List_Cycle.js" similarity index 100% rename from JooKangsan/141_Linked_List_Cycle.js rename to "JooKangsan/4\354\243\274\354\260\250/141_Linked_List_Cycle.js" diff --git a/JooKangsan/1_Two_Sum.js "b/JooKangsan/4\354\243\274\354\260\250/1_Two_Sum.js" similarity index 100% rename from JooKangsan/1_Two_Sum.js rename to "JooKangsan/4\354\243\274\354\260\250/1_Two_Sum.js" diff --git a/JooKangsan/202_Happy_Number.js "b/JooKangsan/4\354\243\274\354\260\250/202_Happy_Number.js" similarity index 100% rename from JooKangsan/202_Happy_Number.js rename to "JooKangsan/4\354\243\274\354\260\250/202_Happy_Number.js" diff --git a/JooKangsan/20_Valid_Parentheses.js "b/JooKangsan/4\354\243\274\354\260\250/20_Valid_Parentheses.js" similarity index 100% rename from JooKangsan/20_Valid_Parentheses.js rename to "JooKangsan/4\354\243\274\354\260\250/20_Valid_Parentheses.js" diff --git a/JooKangsan/1046_Last_Stone_Weight.js "b/JooKangsan/5\354\243\274\354\260\250/1046_Last_Stone_Weight.js" similarity index 100% rename from JooKangsan/1046_Last_Stone_Weight.js rename to "JooKangsan/5\354\243\274\354\260\250/1046_Last_Stone_Weight.js" diff --git a/JooKangsan/21_Merge_Two_Sorted_Lists.js "b/JooKangsan/5\354\243\274\354\260\250/21_Merge_Two_Sorted_Lists.js" similarity index 100% rename from JooKangsan/21_Merge_Two_Sorted_Lists.js rename to "JooKangsan/5\354\243\274\354\260\250/21_Merge_Two_Sorted_Lists.js" diff --git a/JooKangsan/338_Counting_Bits.js "b/JooKangsan/5\354\243\274\354\260\250/338_Counting_Bits.js" similarity index 100% rename from JooKangsan/338_Counting_Bits.js rename to "JooKangsan/5\354\243\274\354\260\250/338_Counting_Bits.js" diff --git a/JooKangsan/48_Rotate_Image.js "b/JooKangsan/5\354\243\274\354\260\250/48_Rotate_Image.js" similarity index 100% rename from JooKangsan/48_Rotate_Image.js rename to "JooKangsan/5\354\243\274\354\260\250/48_Rotate_Image.js" diff --git a/JooKangsan/70_Climbing_Stairs.js "b/JooKangsan/5\354\243\274\354\260\250/70_Climbing_Stairs.js" similarity index 100% rename from JooKangsan/70_Climbing_Stairs.js rename to "JooKangsan/5\354\243\274\354\260\250/70_Climbing_Stairs.js" diff --git "a/JooKangsan/6\354\243\274\354\260\250/ 703_Kth_Largest_Element_in_a_Stream.js" "b/JooKangsan/6\354\243\274\354\260\250/ 703_Kth_Largest_Element_in_a_Stream.js" new file mode 100644 index 0000000..7f92245 --- /dev/null +++ "b/JooKangsan/6\354\243\274\354\260\250/ 703_Kth_Largest_Element_in_a_Stream.js" @@ -0,0 +1,63 @@ +/** + * @param {number} k + * @param {number[]} nums + */ +var KthLargest = function(k, nums) { + this.k = k; + this.h = []; + + // populate the array + const limit = Math.min(this.k, nums.length); + for(let i = 0; i < limit; i++) { + this.h.push(nums[i]); + } + this.heapifyBottomUp(); + // add remaining elements + for(let i = k; i < nums.length; i++) { + this.add(nums[i]); + } +}; + +KthLargest.prototype.heapifyBottomUp = function() { + const firstLeafAt = Math.floor(this.h.length/2); + for(let i = firstLeafAt - 1; i >= 0; i--) { + this.heapify(i); + } +} + +KthLargest.prototype.heapify = function(i) { + const l = 2*i + 1; + const r = 2*i + 2; + + let min = i; + + if(l < this.h.length && this.h[l] < this.h[min]) { + min = l + } + + if(r < this.h.length && this.h[r] < this.h[min]) { + min = r; + } + + if(min != i) { + [this.h[i], this.h[min]] = [this.h[min], this.h[i]]; + this.heapify(min) + } +}; + +/** +* @param {number} val +* @return {number} +*/ +KthLargest.prototype.add = function(val) { + if(this.h.length < this.k) { // heap is not full + this.h.push(val); + this.heapifyBottomUp(); + } else { + if(val > this.h[0]) { + this.h[0] = val; + this.heapify(0) + } + } + return this.h[0]; +}; \ No newline at end of file diff --git a/JooKangsan/198_House_Robber.js "b/JooKangsan/6\354\243\274\354\260\250/198_House_Robber.js" similarity index 100% rename from JooKangsan/198_House_Robber.js rename to "JooKangsan/6\354\243\274\354\260\250/198_House_Robber.js" diff --git a/JooKangsan/271_Encode_and_Decode_Strings.js "b/JooKangsan/6\354\243\274\354\260\250/271_Encode_and_Decode_Strings.js" similarity index 100% rename from JooKangsan/271_Encode_and_Decode_Strings.js rename to "JooKangsan/6\354\243\274\354\260\250/271_Encode_and_Decode_Strings.js" diff --git a/JooKangsan/66_Plus_One.js "b/JooKangsan/6\354\243\274\354\260\250/66_Plus_One.js" similarity index 100% rename from JooKangsan/66_Plus_One.js rename to "JooKangsan/6\354\243\274\354\260\250/66_Plus_One.js" diff --git a/JooKangsan/704_Binary_Search.js "b/JooKangsan/6\354\243\274\354\260\250/704_Binary_Search.js" similarity index 100% rename from JooKangsan/704_Binary_Search.js rename to "JooKangsan/6\354\243\274\354\260\250/704_Binary_Search.js" From 2e07e799136ccbab093bd2909c245d3a97a1c89a Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 12 Nov 2024 20:30:56 +0900 Subject: [PATCH 27/46] 128 / Longest Consecutive Sequence / medium / 26m40s --- .../128_Longest_Consecutive_Sequence.js" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" diff --git "a/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" "b/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" new file mode 100644 index 0000000..f48d7a0 --- /dev/null +++ "b/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" @@ -0,0 +1,21 @@ +/** + * @param {number[]} nums + * @return {number} + */ +function longestConsecutive(nums) { + const numSet = new Set(nums); + let longestStreak = 0; + for (let i = 0; i < numSet.length; i++) { + if (!numSet.has(num - 1)) { + let currentNum = num; + let currentStreak = 1; + while (numSet.has(currentNum + 1)) { + currentNum += 1; + currentStreak += 1; + } + longestStreak = Math.max(longestStreak, currentStreak); + } + } + + return longestStreak; +} From 6d005a109b2a63a93ebc251644af95f34fbb9655 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 12 Nov 2024 20:47:30 +0900 Subject: [PATCH 28/46] 371 / Sum of Two Integer / medium / 15m --- .../371_Sum_of_Two_Integers.js" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "JooKangsan/8\354\243\274\354\260\250/371_Sum_of_Two_Integers.js" diff --git "a/JooKangsan/8\354\243\274\354\260\250/371_Sum_of_Two_Integers.js" "b/JooKangsan/8\354\243\274\354\260\250/371_Sum_of_Two_Integers.js" new file mode 100644 index 0000000..ce07cff --- /dev/null +++ "b/JooKangsan/8\354\243\274\354\260\250/371_Sum_of_Two_Integers.js" @@ -0,0 +1,13 @@ +/** + * @param {number} a + * @param {number} b + * @return {number} + */ +var getSum = function(a, b) { + while (b !== 0) { + let carry = a & b; + a = a ^ b; + b = carry << 1; + } + return a; +}; \ No newline at end of file From 4bbefe7352d21d761f1db391800a70090169096c Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 12 Nov 2024 21:21:06 +0900 Subject: [PATCH 29/46] 226 / Invert Binary Tree / easy / 12m30s --- .../226_Invert_Binary_Tree.js" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "JooKangsan/8\354\243\274\354\260\250/226_Invert_Binary_Tree.js" diff --git "a/JooKangsan/8\354\243\274\354\260\250/226_Invert_Binary_Tree.js" "b/JooKangsan/8\354\243\274\354\260\250/226_Invert_Binary_Tree.js" new file mode 100644 index 0000000..c4e8981 --- /dev/null +++ "b/JooKangsan/8\354\243\274\354\260\250/226_Invert_Binary_Tree.js" @@ -0,0 +1,22 @@ +/** + * 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 === null) return null; + + let temp = root.left; + + root.left = invertTree(root.right); + root.right = invertTree(temp); + + return root; +}; From 9295af191a567eda77a1b9cac0bd11d8fe839235 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 12 Nov 2024 21:39:55 +0900 Subject: [PATCH 30/46] 543 / Diameter of Binary Tree / easy / 14m40s --- .../543_Diameter_of_Binary_Tree.js" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "JooKangsan/8\354\243\274\354\260\250/543_Diameter_of_Binary_Tree.js" diff --git "a/JooKangsan/8\354\243\274\354\260\250/543_Diameter_of_Binary_Tree.js" "b/JooKangsan/8\354\243\274\354\260\250/543_Diameter_of_Binary_Tree.js" new file mode 100644 index 0000000..7068f26 --- /dev/null +++ "b/JooKangsan/8\354\243\274\354\260\250/543_Diameter_of_Binary_Tree.js" @@ -0,0 +1,30 @@ +/** + * 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 diameterOfBinaryTree = function(root) { + let maxDiameter = 0; + +function getHeight(node) { + if (!node) return -1; + + let leftHeight = getHeight(node.left); + let rightHeight = getHeight(node.right); + + maxDiameter = Math.max(maxDiameter, leftHeight + rightHeight + 2); + + return Math.max(leftHeight, rightHeight) + 1; +} + +getHeight(root); + +return maxDiameter; +}; \ No newline at end of file From 913fc63968b72d0ba9b690dd04b51056acb98739 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 12 Nov 2024 21:53:55 +0900 Subject: [PATCH 31/46] =?UTF-8?q?128=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../128_Longest_Consecutive_Sequence.js" | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git "a/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" "b/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" index f48d7a0..493121a 100644 --- "a/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" +++ "b/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" @@ -1,11 +1,7 @@ -/** - * @param {number[]} nums - * @return {number} - */ function longestConsecutive(nums) { const numSet = new Set(nums); let longestStreak = 0; - for (let i = 0; i < numSet.length; i++) { + for (const num of numSet) { if (!numSet.has(num - 1)) { let currentNum = num; let currentStreak = 1; @@ -16,6 +12,5 @@ function longestConsecutive(nums) { longestStreak = Math.max(longestStreak, currentStreak); } } - return longestStreak; } From 3a1fae2ab58631d1c5890392e1402d38894c072c Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 13 Nov 2024 16:22:49 +0900 Subject: [PATCH 32/46] 136 / Single Number / easy / 3m30s --- .../136_Single_Numver.js" | 10 +++++++ .../128_Longest_Consecutive_Sequence.js" | 30 +++++++++++-------- 2 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 "JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" diff --git "a/JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" "b/JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" new file mode 100644 index 0000000..48bcea1 --- /dev/null +++ "b/JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" @@ -0,0 +1,10 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var singleNumber = function (nums) { + nums.sort((a, b) => a - b); + for (let i = 0; i < nums.length; i += 2) { + if(nums[i] !== nums[i+1]) return nums[i] + } +}; \ No newline at end of file diff --git "a/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" "b/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" index 493121a..31eafb4 100644 --- "a/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" +++ "b/JooKangsan/8\354\243\274\354\260\250/128_Longest_Consecutive_Sequence.js" @@ -1,16 +1,20 @@ -function longestConsecutive(nums) { +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function(nums) { const numSet = new Set(nums); - let longestStreak = 0; - for (const num of numSet) { - if (!numSet.has(num - 1)) { - let currentNum = num; - let currentStreak = 1; - while (numSet.has(currentNum + 1)) { - currentNum += 1; - currentStreak += 1; - } - longestStreak = Math.max(longestStreak, currentStreak); - } +let longestStreak = 0; +for (const num of numSet) { +if (!numSet.has(num - 1)) { + let currentNum = num; + let currentStreak = 1; + while (numSet.has(currentNum + 1)) { + currentNum += 1; + currentStreak += 1; } - return longestStreak; + longestStreak = Math.max(longestStreak, currentStreak); } +} +return longestStreak; +}; From c3e1b0fc709764e527576678d49b9bc665eb7d93 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 13 Nov 2024 16:28:25 +0900 Subject: [PATCH 33/46] 110 / Balanced Binary Tree / eay / 12m40s --- .../110_Balanced_Binary_Tree.js" | 38 +++++++++++++++++++ .../136_Single_Numver.js" | 4 +- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 "JooKangsan/7\354\243\274\354\260\250/110_Balanced_Binary_Tree.js" diff --git "a/JooKangsan/7\354\243\274\354\260\250/110_Balanced_Binary_Tree.js" "b/JooKangsan/7\354\243\274\354\260\250/110_Balanced_Binary_Tree.js" new file mode 100644 index 0000000..8158c2e --- /dev/null +++ "b/JooKangsan/7\354\243\274\354\260\250/110_Balanced_Binary_Tree.js" @@ -0,0 +1,38 @@ +/** + * 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} + */ +/** + * 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) + * } + */ +var isBalanced = function (root) { + function checkHeight(node) { + if (!node) return 0; + + const leftHeight = checkHeight(node.left); + + if (leftHeight === -1) return -1; + + const rightHeight = checkHeight(node.right); + + if (rightHeight === -1) return -1; + + if (Math.abs(leftHeight - rightHeight) > 1) return -1; + + return Math.max(leftHeight, rightHeight) + 1; + } + return checkHeight(root) !== -1; +}; diff --git "a/JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" "b/JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" index 48bcea1..e2bed4b 100644 --- "a/JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" +++ "b/JooKangsan/7\354\243\274\354\260\250/136_Single_Numver.js" @@ -5,6 +5,6 @@ var singleNumber = function (nums) { nums.sort((a, b) => a - b); for (let i = 0; i < nums.length; i += 2) { - if(nums[i] !== nums[i+1]) return nums[i] + if (nums[i] !== nums[i + 1]) return nums[i]; } -}; \ No newline at end of file +}; From a85cc915cd5fb06d1a8056c7ced95e0adea71c04 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 13 Nov 2024 16:38:04 +0900 Subject: [PATCH 34/46] 54 / Spiral Matrix / medium / 20m30s --- .../54_Spiral_Matrix.js" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "JooKangsan/7\354\243\274\354\260\250/54_Spiral_Matrix.js" diff --git "a/JooKangsan/7\354\243\274\354\260\250/54_Spiral_Matrix.js" "b/JooKangsan/7\354\243\274\354\260\250/54_Spiral_Matrix.js" new file mode 100644 index 0000000..56b582d --- /dev/null +++ "b/JooKangsan/7\354\243\274\354\260\250/54_Spiral_Matrix.js" @@ -0,0 +1,27 @@ +/** + * @param {number[][]} matrix + * @return {number[]} + */ +var spiralOrder = function(matrix) { + const result = []; + + while(matrix.length > 0) { + if(matrix.length > 0) { + result.push(...matrix.shift()); + } + for(let i = 0; i < matrix.length; i++) { + if(matrix[i].length > 0) { + result.push(matrix[i].pop()); + } + } + if(matrix.length > 0) { + result.push(...matrix.pop().reverse()); + } + for(let i = matrix.length - 1; i >= 0; i--) { + if(matrix[i].length > 0) { + result.push(matrix[i].shift()); + } + } + } + return result; +} \ No newline at end of file From d4d95fbb72feb3b9cb2b1865c5d7fd81100eede2 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 13 Nov 2024 17:00:49 +0900 Subject: [PATCH 35/46] 973 / K Closest Points to Origin / medium / 8m20s --- .../973_K_Closest_Points_to_Origin.js" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "JooKangsan/7\354\243\274\354\260\250/973_K_Closest_Points_to_Origin.js" diff --git "a/JooKangsan/7\354\243\274\354\260\250/973_K_Closest_Points_to_Origin.js" "b/JooKangsan/7\354\243\274\354\260\250/973_K_Closest_Points_to_Origin.js" new file mode 100644 index 0000000..1817da2 --- /dev/null +++ "b/JooKangsan/7\354\243\274\354\260\250/973_K_Closest_Points_to_Origin.js" @@ -0,0 +1,17 @@ +/** + * @param {number[][]} points + * @param {number} k + * @return {number[][]} + */ +var kClosest = function(points, k) { + const result = []; + + for(let i = 0; i < points.length; i++) { + result.push([ + points[i][0]**2 + points[i][1]**2, + i + ]); + } + result.sort((a, b) => a[0] - b[0]); + return result.slice(0, k).map(item => points[item[1]]); +}; \ No newline at end of file From 5fb80f214895a0a54e5483b340eec64a8177a331 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 13 Nov 2024 17:08:41 +0900 Subject: [PATCH 36/46] 155 / Min Stack / medium / 14m10s --- .../155_Min_Stack.js" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" diff --git "a/JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" "b/JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" new file mode 100644 index 0000000..b1f4618 --- /dev/null +++ "b/JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" @@ -0,0 +1,33 @@ +class MinStack { + constructor() { + this.stack = []; + this.minStack = []; + } + push(val) { + this.stack.push(val); + + if (this.minStack.length === 0 || val <= this.getMin()) { + this.minStack.push(val); + } + } + pop() { + if (this.stack.pop() === this.getMin()) { + this.minStack.pop(); + } + } + top() { + return this.stack[this.stack.length - 1]; + } + getMin() { + return this.minStack[this.minStack.length - 1]; + } +} + +/** +* Your MinStack object will be instantiated and called as such: +* var obj = new MinStack() +* obj.push(val) +* obj.pop() +* var param_3 = obj.top() +* var param_4 = obj.getMin() +*/ \ No newline at end of file From 2f6feb9c8d3fb0075de004d727a1138e72f54915 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 13 Nov 2024 17:41:03 +0900 Subject: [PATCH 37/46] 208 / Implement Trie (Prefix Tree) / medium --- .../155_Min_Stack.js" | 2 +- .../208_Implement_Trie(PrefixTree).js" | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 "JooKangsan/8\354\243\274\354\260\250/208_Implement_Trie(PrefixTree).js" diff --git "a/JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" "b/JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" index b1f4618..1702683 100644 --- "a/JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" +++ "b/JooKangsan/7\354\243\274\354\260\250/155_Min_Stack.js" @@ -30,4 +30,4 @@ class MinStack { * obj.pop() * var param_3 = obj.top() * var param_4 = obj.getMin() -*/ \ No newline at end of file +*/ diff --git "a/JooKangsan/8\354\243\274\354\260\250/208_Implement_Trie(PrefixTree).js" "b/JooKangsan/8\354\243\274\354\260\250/208_Implement_Trie(PrefixTree).js" new file mode 100644 index 0000000..f41c597 --- /dev/null +++ "b/JooKangsan/8\354\243\274\354\260\250/208_Implement_Trie(PrefixTree).js" @@ -0,0 +1,61 @@ +var Trie = function() { + this.root = { + children : {}, + isEnd : false + } +}; + +/** +* @param {string} word +* @return {void} +*/ +Trie.prototype.insert = function(word) { + let node = this.root; + + for(let char of word) { + if(!node.children[char]) { + node.children[char] = { + children: {}, + isEnd: false + }; + } + node = node.children[char]; + } + + node.isEnd = true; +}; + +/** +* @param {string} word +* @return {boolean} +*/ +Trie.prototype.search = function(word) { + let node = this.root; + + // 단어의 각 문자에 대해 + for(let char of word) { + if(!node.children[char]) { + return false; + } + node = node.children[char]; + } + + return node.isEnd; +}; + +/** +* @param {string} prefix +* @return {boolean} +*/ +Trie.prototype.startsWith = function(prefix) { + let node = this.root; + + for(let char of prefix) { + if(!node.children[char]) { + return false; + } + node = node.children[char]; + } + + return true; +}; \ No newline at end of file From 54bd9de0cf094f9667f148abe817c56da34bafd0 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 26 Nov 2024 01:17:10 +0900 Subject: [PATCH 38/46] 150 / Evaluate Reverse Polish Notation / medium / 17m40s --- .../150_Evaluate_Reverse_Polish_Notation.js" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 "JooKangsan/9\354\243\274\354\260\250/150_Evaluate_Reverse_Polish_Notation.js" diff --git "a/JooKangsan/9\354\243\274\354\260\250/150_Evaluate_Reverse_Polish_Notation.js" "b/JooKangsan/9\354\243\274\354\260\250/150_Evaluate_Reverse_Polish_Notation.js" new file mode 100644 index 0000000..19ea93e --- /dev/null +++ "b/JooKangsan/9\354\243\274\354\260\250/150_Evaluate_Reverse_Polish_Notation.js" @@ -0,0 +1,38 @@ +/** + * @param {string[]} tokens + * @return {number} + */ +var evalRPN = function (tokens) { + while (tokens.length > 1) { + for (let i = 0; i < tokens.length; i++) { + if (["+", "-", "*", "/"].includes(tokens[i])) { + const num1 = Number(tokens[i - 2]); + const num2 = Number(tokens[i - 1]); + const operator = tokens[i]; + let result; + + switch (operator) { + case "+": + result = num1 + num2; + break; + case "-": + result = num1 - num2; + break; + case "*": + result = num1 * num2; + break; + case "/": + result = + num1 / num2 > 0 + ? Math.floor(num1 / num2) + : Math.ceil(num1 / num2); + break; + } + + tokens.splice(i - 2, 3, result.toString()); + break; + } + } + } + return Number(tokens[0]); +}; From cf163341d46854877e9f4e9234e7dc006fc3d690 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 26 Nov 2024 01:17:54 +0900 Subject: [PATCH 39/46] 203 / House Robber II / medium / 21m40s --- .../203_House_Robber_II.js" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "JooKangsan/9\354\243\274\354\260\250/203_House_Robber_II.js" diff --git "a/JooKangsan/9\354\243\274\354\260\250/203_House_Robber_II.js" "b/JooKangsan/9\354\243\274\354\260\250/203_House_Robber_II.js" new file mode 100644 index 0000000..397ea13 --- /dev/null +++ "b/JooKangsan/9\354\243\274\354\260\250/203_House_Robber_II.js" @@ -0,0 +1,32 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + let n = nums.length; + if (n === 0) return 0; + if (n === 1) return nums[0]; + if (n === 2) return Math.max(nums[0], nums[1]); + + let firstCase = [...nums]; + firstCase.pop(); + let first = robHelper(firstCase); + + let secondCase = [...nums]; + secondCase.shift(); + let second = robHelper(secondCase); + + return Math.max(first, second); +}; + +function robHelper(houses) { + let n = houses.length; + let dp = new Array(n).fill(0); + dp[0] = houses[0]; + dp[1] = Math.max(houses[0], houses[1]); + + for (let i = 2; i < n; i++) { + dp[i] = Math.max(dp[i - 1], dp[i - 2] + houses[i]); + } + return dp[n - 1]; +} From 94b14d9fbdc09780ed1259ac0a70b52117fad81f Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 26 Nov 2024 01:19:04 +0900 Subject: [PATCH 40/46] 102 / House Robber II / medium / 14m20s --- .../102_Binary Tree_Level_Order_Traversal.js" | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 "JooKangsan/9\354\243\274\354\260\250/102_Binary Tree_Level_Order_Traversal.js" diff --git "a/JooKangsan/9\354\243\274\354\260\250/102_Binary Tree_Level_Order_Traversal.js" "b/JooKangsan/9\354\243\274\354\260\250/102_Binary Tree_Level_Order_Traversal.js" new file mode 100644 index 0000000..4d4c116 --- /dev/null +++ "b/JooKangsan/9\354\243\274\354\260\250/102_Binary Tree_Level_Order_Traversal.js" @@ -0,0 +1,35 @@ +/** + * 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 []; + + const result = []; + const queue = [root]; + + while (queue.length > 0) { + const levelSize = queue.length; + const currentLevel = []; + + for (let i = 0; i < levelSize; i++) { + const node = queue.shift(); + currentLevel.push(node.val); + + if (node.left) queue.push(node.left); + if (node.right) queue.push(node.right); + } + + result.push(currentLevel); + } + + return result; +}; \ No newline at end of file From 2caae01b5d672dafaf7873b39894d65d16212e09 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Tue, 26 Nov 2024 01:19:53 +0900 Subject: [PATCH 41/46] 572 / Subtree of Another Tree / medium / 24m --- .../572_Subtree_of_Another_Tree.js" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "JooKangsan/9\354\243\274\354\260\250/572_Subtree_of_Another_Tree.js" diff --git "a/JooKangsan/9\354\243\274\354\260\250/572_Subtree_of_Another_Tree.js" "b/JooKangsan/9\354\243\274\354\260\250/572_Subtree_of_Another_Tree.js" new file mode 100644 index 0000000..a1c3b9d --- /dev/null +++ "b/JooKangsan/9\354\243\274\354\260\250/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 (!subRoot) return true; + if (!root) return false; + + const isSameTree = (tree1, tree2) => { + if (!tree1 && !tree2) return true; + if (!tree1 || !tree2) return false; + if (tree1.val !== tree2.val) return false; + return isSameTree(tree1.left, tree2.left) && + isSameTree(tree1.right, tree2.right); + }; + + return isSameTree(root, subRoot) || + isSubtree(root.left, subRoot) || + isSubtree(root.right, subRoot); +}; \ No newline at end of file From 5414c8bdac4d2b3efb814f5ba8a40c5dbb364647 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 27 Nov 2024 15:29:39 +0900 Subject: [PATCH 42/46] 56 / Merge Intervals / medium / 12m10s --- .../56_Merge_Intervals.js" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "JooKangsan/10\354\243\274\354\260\250/56_Merge_Intervals.js" diff --git "a/JooKangsan/10\354\243\274\354\260\250/56_Merge_Intervals.js" "b/JooKangsan/10\354\243\274\354\260\250/56_Merge_Intervals.js" new file mode 100644 index 0000000..bfc6c78 --- /dev/null +++ "b/JooKangsan/10\354\243\274\354\260\250/56_Merge_Intervals.js" @@ -0,0 +1,18 @@ +/** + * @param {number[][]} intervals + * @return {number[][]} + */ +var merge = function (intervals) { + intervals.sort((a, b) => a[0] - b[0]); + + for (let i = 1; i < intervals.length; i++) { + if (intervals[i][0] <= intervals[i - 1][1]) { + intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]); + intervals[i][0] = intervals[i - 1][0]; + intervals.splice(i - 1, 1); + i--; + } + } + + return intervals; +}; From 19a1b8edb57000a23cb034ef32760a838c9ec32b Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 27 Nov 2024 17:08:47 +0900 Subject: [PATCH 43/46] 139 / Word Break / medium / 27m50s --- .../139_Word_Break.js" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "JooKangsan/10\354\243\274\354\260\250/139_Word_Break.js" diff --git "a/JooKangsan/10\354\243\274\354\260\250/139_Word_Break.js" "b/JooKangsan/10\354\243\274\354\260\250/139_Word_Break.js" new file mode 100644 index 0000000..955cf04 --- /dev/null +++ "b/JooKangsan/10\354\243\274\354\260\250/139_Word_Break.js" @@ -0,0 +1,32 @@ + + +/** + * @param {string} s + * @param {string[]} wordDict + * @return {boolean} + */ +var wordBreak = function(s, wordDict) { + const memo = new Map(); + + function dp(str, i = 0) { + if (str.length === 0) return true; + if (i >= wordDict.length) return false; + + const key = str + ',' + i; + if (memo.has(key)) return memo.get(key); + + let word = wordDict[i]; + if (str.slice(0, word.length) === word) { + if (dp(str.slice(word.length), 0)) { + memo.set(key, true); + return true; + } + } + + const result = dp(str, i + 1); + memo.set(key, result); + return result; + } + + return dp(s); +}; \ No newline at end of file From bce27be55799564c4b06eca9463dec0a28601053 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 27 Nov 2024 17:49:53 +0900 Subject: [PATCH 44/46] 251 / Kth Largest Element in an Array / medium / 42m50s --- .../215_Kth_Largest_Element_in_an_Array.js" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "JooKangsan/10\354\243\274\354\260\250/215_Kth_Largest_Element_in_an_Array.js" diff --git "a/JooKangsan/10\354\243\274\354\260\250/215_Kth_Largest_Element_in_an_Array.js" "b/JooKangsan/10\354\243\274\354\260\250/215_Kth_Largest_Element_in_an_Array.js" new file mode 100644 index 0000000..319a06e --- /dev/null +++ "b/JooKangsan/10\354\243\274\354\260\250/215_Kth_Largest_Element_in_an_Array.js" @@ -0,0 +1,29 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number} + */ +var findKthLargest = function(nums, k) { + let [min, max] = nums.reduce(([min, max], num) => + [Math.min(min, num), Math.max(max, num)], + [Infinity, -Infinity] + ); + + const offset = min >= 0 ? 0 : -min; + const count = new Array(max + 1 + offset).fill(0); + + for(let num of nums) { + count[num + offset]++; + } + + let kthLargest; + for(let i = count.length - 1; i >= 0; i--) { + k -= count[i]; + if(k <= 0) { + kthLargest = i - offset; + break; + } + } + + return kthLargest; +}; \ No newline at end of file From 6e897a5930a2b9e75f664d92af768a1a0a3d39ba Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 27 Nov 2024 18:37:56 +0900 Subject: [PATCH 45/46] 235 / Lowest Common Ancestor of a Binary Search Tree / medium / 32m20s --- ...ommon_Ancestor_of_a_Binary_Search_Tree.js" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "JooKangsan/10\354\243\274\354\260\250/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js" diff --git "a/JooKangsan/10\354\243\274\354\260\250/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js" "b/JooKangsan/10\354\243\274\354\260\250/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js" new file mode 100644 index 0000000..8ae1d92 --- /dev/null +++ "b/JooKangsan/10\354\243\274\354\260\250/235_Lowest_Common_Ancestor_of_a_Binary_Search_Tree.js" @@ -0,0 +1,27 @@ +/** + * 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) { + let min = Math.min(p.val, q.val) + let max = Math.max(p.val, q.val) + + if(min > root.val) { + return lowestCommonAncestor(root.right, p, q) + } else if(max < root.val) { + return lowestCommonAncestor(root.left, p, q) + } else { + return root + } +}; \ No newline at end of file From 13d140097664518abc8d8ba5f6532be1b926da86 Mon Sep 17 00:00:00 2001 From: JooKangSan Date: Wed, 27 Nov 2024 20:34:25 +0900 Subject: [PATCH 46/46] 1584 / Min Cost to Connect / medium --- .../1584_Min_Cost_to_Connect_All_Points.js" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "JooKangsan/10\354\243\274\354\260\250/1584_Min_Cost_to_Connect_All_Points.js" diff --git "a/JooKangsan/10\354\243\274\354\260\250/1584_Min_Cost_to_Connect_All_Points.js" "b/JooKangsan/10\354\243\274\354\260\250/1584_Min_Cost_to_Connect_All_Points.js" new file mode 100644 index 0000000..2ffa792 --- /dev/null +++ "b/JooKangsan/10\354\243\274\354\260\250/1584_Min_Cost_to_Connect_All_Points.js" @@ -0,0 +1,34 @@ +/** + * @param {number[][]} points + * @return {number} + */ +var minCostConnectPoints = function (points) { + const n = points.length; + const visited = new Array(n).fill(false); + const minDist = new Array(n).fill(Infinity); + minDist[0] = 0; + let result = 0; + + for (let i = 0; i < n; i++) { + let x = -1; + for (let j = 0; j < n; j++) { + if (!visited[j] && (x === -1 || minDist[j] < minDist[x])) { + x = j; + } + } + + visited[x] = true; + result += minDist[x]; + + for (let k = 0; k < n; k++) { + if (!visited[k]) { + const dist = + Math.abs(points[x][0] - points[k][0]) + + Math.abs(points[x][1] - points[k][1]); + minDist[k] = Math.min(minDist[k], dist); + } + } + } + + return result; +};