From c39a312d624d10deb941f735d27ff57371e2aa0a Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Thu, 20 Aug 2026 13:37:21 -0400 Subject: [PATCH] docs(docs): add new solution pages, rename guide and solution files, update titles --- .../{02-hashing.mdx => 02-hash-tables.mdx} | 2 +- .../121-best-time-to-buy-and-sell-stock.mdx | 37 ++++++++++ ...alindrome.mdx => 125-valid-palindrome.mdx} | 0 ...s-are-smaller-than-the-current-number.mdx} | 0 ...alue-to-get-positive-step-by-step-sum.mdx} | 0 ...lements.mdx => 1426-counting-elements.mdx} | 0 ...y.mdx => 1480-running-sum-of-1d-array.mdx} | 0 docs/solutions/{03-3sum.mdx => 15-3sum.mdx} | 0 ...36-sort-array-by-increasing-frequency.mdx} | 0 ... 167-two-sum-ii-input-array-is-sorted.mdx} | 0 ...1832-check-if-the-sentence-is-pangram.mdx} | 0 ...-rotate-array.mdx => 189-rotate-array.mdx} | 0 ...dx => 2090-k-radius-subarray-averages.mdx} | 0 ...plicate.mdx => 217-contains-duplicate.mdx} | 0 ...x => 238-product-of-array-except-self.mdx} | 0 ...alid-anagram.mdx => 242-valid-anagram.mdx} | 0 ...sing-number.mdx => 268-missing-number.mdx} | 0 ....mdx => 303-range-sum-query-immutable.mdx} | 0 .../33-search-in-rotated-sorted-array.mdx | 70 +++++++++++++++++++ ...erse-string.mdx => 344-reverse-string.mdx} | 0 ...ts.mdx => 347-top-k-frequent-elements.mdx} | 0 ...87-first-unique-character-in-a-string.mdx} | 0 ...n-water.mdx => 42-trapping-rain-water.mdx} | 0 ...x => 451-sort-characters-by-frequency.mdx} | 0 ...oup-anagrams.mdx => 49-group-anagrams.mdx} | 0 ...ls-k.mdx => 560-subarray-sum-equals-k.mdx} | 0 docs/solutions/704-binary-search.mdx | 55 +++++++++++++++ docs/solutions/875-koko-eating-bananas.mdx | 61 ++++++++++++++++ ....mdx => 977-squares-of-a-sorted-array.mdx} | 0 29 files changed, 224 insertions(+), 1 deletion(-) rename docs/guides/(data-structures)/{02-hashing.mdx => 02-hash-tables.mdx} (98%) create mode 100644 docs/solutions/121-best-time-to-buy-and-sell-stock.mdx rename docs/solutions/{06-valid-palindrome.mdx => 125-valid-palindrome.mdx} (100%) rename docs/solutions/{18-how-many-numbers-are-smaller-than-the-current-number.mdx => 1365-how-many-numbers-are-smaller-than-the-current-number.mdx} (100%) rename docs/solutions/{19-minimum-value-to-get-positive-step-by-step-sum.mdx => 1413-minimum-value-to-get-positive-step-by-step-sum.mdx} (100%) rename docs/solutions/{20-counting-elements.mdx => 1426-counting-elements.mdx} (100%) rename docs/solutions/{21-running-sum-of-1d-array.mdx => 1480-running-sum-of-1d-array.mdx} (100%) rename docs/solutions/{03-3sum.mdx => 15-3sum.mdx} (100%) rename docs/solutions/{22-sort-array-by-increasing-frequency.mdx => 1636-sort-array-by-increasing-frequency.mdx} (100%) rename docs/solutions/{07-two-sum-ii-input-array-is-sorted.mdx => 167-two-sum-ii-input-array-is-sorted.mdx} (100%) rename docs/solutions/{23-check-if-the-sentence-is-pangram.mdx => 1832-check-if-the-sentence-is-pangram.mdx} (100%) rename docs/solutions/{08-rotate-array.mdx => 189-rotate-array.mdx} (100%) rename docs/solutions/{24-k-radius-subarray-averages.mdx => 2090-k-radius-subarray-averages.mdx} (100%) rename docs/solutions/{09-contains-duplicate.mdx => 217-contains-duplicate.mdx} (100%) rename docs/solutions/{10-product-of-array-except-self.mdx => 238-product-of-array-except-self.mdx} (100%) rename docs/solutions/{11-valid-anagram.mdx => 242-valid-anagram.mdx} (100%) rename docs/solutions/{12-missing-number.mdx => 268-missing-number.mdx} (100%) rename docs/solutions/{13-range-sum-query-immutable.mdx => 303-range-sum-query-immutable.mdx} (100%) create mode 100644 docs/solutions/33-search-in-rotated-sorted-array.mdx rename docs/solutions/{01-reverse-string.mdx => 344-reverse-string.mdx} (100%) rename docs/solutions/{14-top-k-frequent-elements.mdx => 347-top-k-frequent-elements.mdx} (100%) rename docs/solutions/{15-first-unique-character-in-a-string.mdx => 387-first-unique-character-in-a-string.mdx} (100%) rename docs/solutions/{04-trapping-rain-water.mdx => 42-trapping-rain-water.mdx} (100%) rename docs/solutions/{16-sort-characters-by-frequency.mdx => 451-sort-characters-by-frequency.mdx} (100%) rename docs/solutions/{05-group-anagrams.mdx => 49-group-anagrams.mdx} (100%) rename docs/solutions/{17-subarray-sum-equals-k.mdx => 560-subarray-sum-equals-k.mdx} (100%) create mode 100644 docs/solutions/704-binary-search.mdx create mode 100644 docs/solutions/875-koko-eating-bananas.mdx rename docs/solutions/{02-squares-of-a-sorted-array.mdx => 977-squares-of-a-sorted-array.mdx} (100%) diff --git a/docs/guides/(data-structures)/02-hashing.mdx b/docs/guides/(data-structures)/02-hash-tables.mdx similarity index 98% rename from docs/guides/(data-structures)/02-hashing.mdx rename to docs/guides/(data-structures)/02-hash-tables.mdx index 45716b1..e31ca62 100644 --- a/docs/guides/(data-structures)/02-hashing.mdx +++ b/docs/guides/(data-structures)/02-hash-tables.mdx @@ -1,5 +1,5 @@ --- -title: 'Hashing' +title: 'Hash Tables' description: 'In algorithms, arrays and strings are very similar. They are both ordered collections of elements. The difference is that arrays are mutable, while strings are immutable.' --- diff --git a/docs/solutions/121-best-time-to-buy-and-sell-stock.mdx b/docs/solutions/121-best-time-to-buy-and-sell-stock.mdx new file mode 100644 index 0000000..0046d3b --- /dev/null +++ b/docs/solutions/121-best-time-to-buy-and-sell-stock.mdx @@ -0,0 +1,37 @@ +--- +title: '121. Best Time to Buy and Sell Stock' +description: You are given an array prices where prices[i] is the price of a given stock on the i^th day +sidebar: + badge: 'Easy' +--- + +Sliding Window + +### Example 1: +- Input: `prices = [7,1,5,3,6,4]` +- Output: `5` +- Explanation: Buy on day `2` (price = `1`) and sell on day `5` (price = `6`), profit = `6-1 = 5`. Note that buying on day `2` and selling on day `1` is not allowed because you must buy before you sell. + +### Example 2: +- Input: `prices = [7,6,4,3,1]` +- Output: `0` +- Explanation: In this case, no transactions are done and the max profit = `0`. + +### Constraints: + +- `1 <= prices.length <= 10^5` +- `0 <= prices[i] <= 10^4` + +## Solution + +```py +class Solution: + def maxProfit(self, prices: List[int]) -> int: + left = min(prices) + for right in range(len(prices)): + while curr > left: + curr -= prices[left] + left += 1 + ans = max(ans, curr) + return ans +``` diff --git a/docs/solutions/06-valid-palindrome.mdx b/docs/solutions/125-valid-palindrome.mdx similarity index 100% rename from docs/solutions/06-valid-palindrome.mdx rename to docs/solutions/125-valid-palindrome.mdx diff --git a/docs/solutions/18-how-many-numbers-are-smaller-than-the-current-number.mdx b/docs/solutions/1365-how-many-numbers-are-smaller-than-the-current-number.mdx similarity index 100% rename from docs/solutions/18-how-many-numbers-are-smaller-than-the-current-number.mdx rename to docs/solutions/1365-how-many-numbers-are-smaller-than-the-current-number.mdx diff --git a/docs/solutions/19-minimum-value-to-get-positive-step-by-step-sum.mdx b/docs/solutions/1413-minimum-value-to-get-positive-step-by-step-sum.mdx similarity index 100% rename from docs/solutions/19-minimum-value-to-get-positive-step-by-step-sum.mdx rename to docs/solutions/1413-minimum-value-to-get-positive-step-by-step-sum.mdx diff --git a/docs/solutions/20-counting-elements.mdx b/docs/solutions/1426-counting-elements.mdx similarity index 100% rename from docs/solutions/20-counting-elements.mdx rename to docs/solutions/1426-counting-elements.mdx diff --git a/docs/solutions/21-running-sum-of-1d-array.mdx b/docs/solutions/1480-running-sum-of-1d-array.mdx similarity index 100% rename from docs/solutions/21-running-sum-of-1d-array.mdx rename to docs/solutions/1480-running-sum-of-1d-array.mdx diff --git a/docs/solutions/03-3sum.mdx b/docs/solutions/15-3sum.mdx similarity index 100% rename from docs/solutions/03-3sum.mdx rename to docs/solutions/15-3sum.mdx diff --git a/docs/solutions/22-sort-array-by-increasing-frequency.mdx b/docs/solutions/1636-sort-array-by-increasing-frequency.mdx similarity index 100% rename from docs/solutions/22-sort-array-by-increasing-frequency.mdx rename to docs/solutions/1636-sort-array-by-increasing-frequency.mdx diff --git a/docs/solutions/07-two-sum-ii-input-array-is-sorted.mdx b/docs/solutions/167-two-sum-ii-input-array-is-sorted.mdx similarity index 100% rename from docs/solutions/07-two-sum-ii-input-array-is-sorted.mdx rename to docs/solutions/167-two-sum-ii-input-array-is-sorted.mdx diff --git a/docs/solutions/23-check-if-the-sentence-is-pangram.mdx b/docs/solutions/1832-check-if-the-sentence-is-pangram.mdx similarity index 100% rename from docs/solutions/23-check-if-the-sentence-is-pangram.mdx rename to docs/solutions/1832-check-if-the-sentence-is-pangram.mdx diff --git a/docs/solutions/08-rotate-array.mdx b/docs/solutions/189-rotate-array.mdx similarity index 100% rename from docs/solutions/08-rotate-array.mdx rename to docs/solutions/189-rotate-array.mdx diff --git a/docs/solutions/24-k-radius-subarray-averages.mdx b/docs/solutions/2090-k-radius-subarray-averages.mdx similarity index 100% rename from docs/solutions/24-k-radius-subarray-averages.mdx rename to docs/solutions/2090-k-radius-subarray-averages.mdx diff --git a/docs/solutions/09-contains-duplicate.mdx b/docs/solutions/217-contains-duplicate.mdx similarity index 100% rename from docs/solutions/09-contains-duplicate.mdx rename to docs/solutions/217-contains-duplicate.mdx diff --git a/docs/solutions/10-product-of-array-except-self.mdx b/docs/solutions/238-product-of-array-except-self.mdx similarity index 100% rename from docs/solutions/10-product-of-array-except-self.mdx rename to docs/solutions/238-product-of-array-except-self.mdx diff --git a/docs/solutions/11-valid-anagram.mdx b/docs/solutions/242-valid-anagram.mdx similarity index 100% rename from docs/solutions/11-valid-anagram.mdx rename to docs/solutions/242-valid-anagram.mdx diff --git a/docs/solutions/12-missing-number.mdx b/docs/solutions/268-missing-number.mdx similarity index 100% rename from docs/solutions/12-missing-number.mdx rename to docs/solutions/268-missing-number.mdx diff --git a/docs/solutions/13-range-sum-query-immutable.mdx b/docs/solutions/303-range-sum-query-immutable.mdx similarity index 100% rename from docs/solutions/13-range-sum-query-immutable.mdx rename to docs/solutions/303-range-sum-query-immutable.mdx diff --git a/docs/solutions/33-search-in-rotated-sorted-array.mdx b/docs/solutions/33-search-in-rotated-sorted-array.mdx new file mode 100644 index 0000000..cd8b8db --- /dev/null +++ b/docs/solutions/33-search-in-rotated-sorted-array.mdx @@ -0,0 +1,70 @@ +--- +title: '33. Search in Rotated Sorted Array' +description: There is an integer array nums sorted in ascending order (with distinct values) +sidebar: + badge: 'Medium' +--- + +Binary Search + +::::warning +You must write an algorithm with O(log n) runtime complexity. +:::: + +### Example 1: +- Input: `nums = [4,5,6,7,0,1,2], target = 0` +- Output: `4` + +### Example 2: +- Input: `nums = [4,5,6,7,0,1,2], target = 3` +- Output: `-1` + +### Example 3: +- Input: `nums = [1], target = 0` +- Output: `-1` + +### Constraints: + +- `1 <= nums.length <= 5000` +- `-10^4 <= nums[i] <= 10^4` +- All values of `nums` are unique. +- `nums` is an ascending array that is possibly rotated. +- `-10^4 <= target <= 10^4` + +## Solution + +```js +/** + * @param {number[]} nums + * @param {number} target + * @return {number} + */ +var search = function(nums, target) { + let l = 0, r = nums.length - 1; + + while (l <= r){ + let mid = Math.floor((l + r)/2); + if (target === nums[mid]) { + return mid + } + + // Left sorted portion + if (nums[l] <= nums[mid]){ + if (target > nums[mid] || target < nums[l]){ + l = mid + 1; + }else{ + r = mid - 1; + } + } + // Right sorted portion + else{ + if(target < nums[mid] || target > nums[r]){ + r = mid - 1; + }else{ + l = mid + 1; + } + } + } + return -1; +}; +``` diff --git a/docs/solutions/01-reverse-string.mdx b/docs/solutions/344-reverse-string.mdx similarity index 100% rename from docs/solutions/01-reverse-string.mdx rename to docs/solutions/344-reverse-string.mdx diff --git a/docs/solutions/14-top-k-frequent-elements.mdx b/docs/solutions/347-top-k-frequent-elements.mdx similarity index 100% rename from docs/solutions/14-top-k-frequent-elements.mdx rename to docs/solutions/347-top-k-frequent-elements.mdx diff --git a/docs/solutions/15-first-unique-character-in-a-string.mdx b/docs/solutions/387-first-unique-character-in-a-string.mdx similarity index 100% rename from docs/solutions/15-first-unique-character-in-a-string.mdx rename to docs/solutions/387-first-unique-character-in-a-string.mdx diff --git a/docs/solutions/04-trapping-rain-water.mdx b/docs/solutions/42-trapping-rain-water.mdx similarity index 100% rename from docs/solutions/04-trapping-rain-water.mdx rename to docs/solutions/42-trapping-rain-water.mdx diff --git a/docs/solutions/16-sort-characters-by-frequency.mdx b/docs/solutions/451-sort-characters-by-frequency.mdx similarity index 100% rename from docs/solutions/16-sort-characters-by-frequency.mdx rename to docs/solutions/451-sort-characters-by-frequency.mdx diff --git a/docs/solutions/05-group-anagrams.mdx b/docs/solutions/49-group-anagrams.mdx similarity index 100% rename from docs/solutions/05-group-anagrams.mdx rename to docs/solutions/49-group-anagrams.mdx diff --git a/docs/solutions/17-subarray-sum-equals-k.mdx b/docs/solutions/560-subarray-sum-equals-k.mdx similarity index 100% rename from docs/solutions/17-subarray-sum-equals-k.mdx rename to docs/solutions/560-subarray-sum-equals-k.mdx diff --git a/docs/solutions/704-binary-search.mdx b/docs/solutions/704-binary-search.mdx new file mode 100644 index 0000000..d637de1 --- /dev/null +++ b/docs/solutions/704-binary-search.mdx @@ -0,0 +1,55 @@ +--- +title: '704. Binary Search' +description: Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1 +sidebar: + badge: 'Easy' +--- + +Binary Search + +::::warning +You must write an algorithm with O(log n) runtime complexity. +:::: + +### Example 1: +- Input: `nums = [-1,0,3,5,9,12], target = 9` +- Output: `4` +- Explanation: `9` exists in `nums` and its index is `4` + +### Example 2: +- Input: `nums = [-1,0,3,5,9,12], target = 2` +- Output: `-1` +- Explanation: `2` does not exist in `nums` so return `-1` + +### Constraints: + +- `1 <= nums.length <= 10^4` +- `-10^4 < nums[i], target < 10^4` +- All the integers in `nums` are unique. +- `nums` is sorted in ascending order. + +## Solution + +```js +/** + * @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 mid = left + Math.floor((right - left) / 2); + if (nums[mid] === target) { + return mid; + } else if(nums[mid] < target){ + left = mid + 1; + } else if (nums[mid] > target) { + right = mid - 1; + } + } + return -1; +}; +``` diff --git a/docs/solutions/875-koko-eating-bananas.mdx b/docs/solutions/875-koko-eating-bananas.mdx new file mode 100644 index 0000000..efeaa37 --- /dev/null +++ b/docs/solutions/875-koko-eating-bananas.mdx @@ -0,0 +1,61 @@ +--- +title: '875. Koko Eating Bananas' +description: Koko loves to eat bananas. There are n piles of bananas, the i^th pile has piles[i] bananas. The guards have gone and will come back in h hours +sidebar: + badge: 'Medium' +--- + +Binary Search + +### Example 1: +- Input: `piles = [3,6,7,11], h = 8` +- Output: `4` + +### Example 2: +- Input: `piles = [30,11,23,4,20], h = 5` +- Output: `30` + +### Example 3: +- Input: `piles = [30,11,23,4,20], h = 6` +- Output: `23` + +### Constraints: + +- `1 <= piles.length <= 10^4` +- `piles.length <= h <= 10^9` +- `1 <= piles[i] <= 10^9` + +## Solution + +```js +/** + * @param {number[]} piles + * @param {number} h + * @return {number} + */ +var minEatingSpeed = function(piles, h) { + // Function to determine if K works for the H + function kWorks(k){ + let hours = 0; + for (let p of piles){ + hours += Math.ceil(p/k) + } + return hours <= h; + } + + // Setup Binary Search + let l = 1; + let r = Math.max(...piles); + + // Find the K value which works for H and consumes all bananas + while (l < r){ + const mid = Math.floor((l + r) / 2); + if (kWorks(mid)){ + r = mid; + }else{ + l = mid + 1; + } + } + return l; +}; +``` diff --git a/docs/solutions/02-squares-of-a-sorted-array.mdx b/docs/solutions/977-squares-of-a-sorted-array.mdx similarity index 100% rename from docs/solutions/02-squares-of-a-sorted-array.mdx rename to docs/solutions/977-squares-of-a-sorted-array.mdx