diff --git a/docs/(01-linear-structures)/binary-search/(problems)/4_median-of-two-sorted-arrays.mdx b/docs/(01-linear-structures)/binary-search/(problems)/4_median-of-two-sorted-arrays.mdx new file mode 100644 index 0000000..0e5494d --- /dev/null +++ b/docs/(01-linear-structures)/binary-search/(problems)/4_median-of-two-sorted-arrays.mdx @@ -0,0 +1,39 @@ +--- +title: '4. Median of Two Sorted Arrays' +description: Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays +icon: dot +topics: + - { name: "Array", slug: "array" } + - { name: "Binary Search", slug: "binary-search" } + - { name: "Divide and Conquer", slug: "divide-and-conquer" } +issue: "https://github.com/prdlk/leetcode/issues/66" +sidebar: + label: 'Median of Two Sorted Arrays' + badge: 'Hard' +--- + +### Example 1: +- Input: `nums1 = [1,3], nums2 = [2]` +- Output: `2.00000` +- Explanation: merged array = `[1,2,3]` and median is `2`. + +### Example 2: +- Input: `nums1 = [1,2], nums2 = [3,4]` +- Output: `2.50000` +- Explanation: merged array = `[1,2,3,4]` and median is `(2 + 3`) / `2 = 2.5`. + +### Constraints: + +- `nums1.length == m` +- `nums2.length == n` +- `0 <= m <= 1000` +- `0 <= n <= 1000` +- `1 <= m + n <= 2000` +- `-10^6 <= nums1[i], nums2[i] <= 10^6` + +## Solution + +```py +class Solution: + def findMedianSortedArrays(self, nums1: list[int], nums2: list[int]) -> float: +``` diff --git a/docs/(01-linear-structures)/monotonic-stack/(problems)/84_largest-rectangle-in-histogram.mdx b/docs/(01-linear-structures)/monotonic-stack/(problems)/84_largest-rectangle-in-histogram.mdx new file mode 100644 index 0000000..012cf9d --- /dev/null +++ b/docs/(01-linear-structures)/monotonic-stack/(problems)/84_largest-rectangle-in-histogram.mdx @@ -0,0 +1,51 @@ +--- +title: '84. Largest Rectangle in Histogram' +description: Given an array of integers heights representing the histogram's bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram +icon: dot +topics: + - { name: "Array", slug: "array" } + - { name: "Stack", slug: "stack" } + - { name: "Monotonic Stack", slug: "monotonic-stack" } + - { name: "Range Minimum/Maximum Query", slug: "range-minimum-maximum-query" } +issue: "https://github.com/prdlk/leetcode/issues/76" +sidebar: + label: 'Largest Rectangle in Histogram' + badge: 'Hard' +--- + +### Example 1: +- Input: `heights = [2,1,5,6,2,3]` +- Output: `10` +- Explanation: The above is a histogram where width of each bar is `1`. The largest rectangle is shown in the red area, which has an area = `10` units. + +### Example 2: +- Input: `heights = [2,4]` +- Output: `4` + +### Constraints: + +- `1 <= heights.length <= 10^5` +- `0 <= heights[i] <= 10^4` + +## Solution + +```py +class Solution: + def largestRectangleArea(self, heights: list[int]) -> int: + maxArea = 0 + stack = [] + + for i, h in enumerate(heights): + start = i + while stack and stack[-1][1] > h: + index, height = stack.pop() + width = i - index + maxArea = max(maxArea, height * width) + start = index + stack.append((start, h)) + + for i, h in stack: + maxArea = max(maxArea, h * (len(heights) - i)) + + return maxArea +``` diff --git a/docs/site.json b/docs/site.json index 53553c0..49735c3 100644 --- a/docs/site.json +++ b/docs/site.json @@ -178,6 +178,10 @@ "from": "/3", "to": "/sliding-window/longest-substring-without-repeating-characters" }, + { + "from": "/4", + "to": "/binary-search/median-of-two-sorted-arrays" + }, { "from": "/11", "to": "/two-pointers/container-with-most-water" @@ -278,6 +282,10 @@ "from": "/78", "to": "/backtracking/subsets" }, + { + "from": "/84", + "to": "/monotonic-stack/largest-rectangle-in-histogram" + }, { "from": "/98", "to": "/binary-search-tree/validate-binary-search-tree"