diff --git a/apps/docs/content/(01-linear-structures)/binary-search/meta.ts b/apps/docs/content/(01-linear-structures)/binary-search/meta.ts index 0fa763f..dfb9611 100644 --- a/apps/docs/content/(01-linear-structures)/binary-search/meta.ts +++ b/apps/docs/content/(01-linear-structures)/binary-search/meta.ts @@ -1,8 +1,3 @@ import { defineMeta } from "blume"; -export default defineMeta({ - title: "Binary Search", - order: 5, - icon: "search", - display: "group", -}); +export default defineMeta({ title: "Binary Search", order: 5, icon: "search", display: "group" }); diff --git a/apps/docs/content/(01-linear-structures)/hash-table/meta.ts b/apps/docs/content/(01-linear-structures)/hash-table/meta.ts index 794209e..6a323fe 100644 --- a/apps/docs/content/(01-linear-structures)/hash-table/meta.ts +++ b/apps/docs/content/(01-linear-structures)/hash-table/meta.ts @@ -1,8 +1,3 @@ import { defineMeta } from "blume"; -export default defineMeta({ - title: "Hash Table", - order: 1, - icon: "hash", - display: "group", -}); +export default defineMeta({ title: "Hash Table", order: 1, icon: "hash", display: "group" }); diff --git a/apps/docs/content/(05-decision-space)/intervals/435-non-overlapping-intervals.mdx b/apps/docs/content/(05-decision-space)/intervals/435-non-overlapping-intervals.mdx new file mode 100644 index 0000000..63c89ed --- /dev/null +++ b/apps/docs/content/(05-decision-space)/intervals/435-non-overlapping-intervals.mdx @@ -0,0 +1,53 @@ +--- +title: '435. Non-overlapping Intervals' +description: Given an array of intervals intervals where intervals[i] = [starti, endi], return the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping +icon: dot +topics: + - { name: "Array", slug: "array" } + - { name: "Dynamic Programming", slug: "dynamic-programming" } + - { name: "Greedy", slug: "greedy" } + - { name: "Sorting", slug: "sorting" } +sidebar: + label: 'Non-overlapping Intervals' + badge: 'Medium' +--- + +### Example 1: +- Input: `intervals = [[1,2],[2,3],[3,4],[1,3]]` +- Output: `1` +- Explanation: `[1,3]` can be removed and the rest of the `intervals` are non-overlapping. + +### Example 2: +- Input: `intervals = [[1,2],[1,2],[1,2]]` +- Output: `2` +- Explanation: You need to remove two `[1,2]` to make the rest of the `intervals` non-overlapping. + +### Example 3: +- Input: `intervals = [[1,2],[2,3]]` +- Output: `0` +- Explanation: You don't need to remove any of the `intervals` since they're already non-overlapping. + +### Constraints: + +- `1 <= intervals.length <= 10^5` +- `intervals[i].length == 2` +- `-5 * 10^4 <= starti < endi <= 5 * 10^4` + +## Solution + +```py +class Solution: + def eraseOverlapIntervals(self, intervals: list[list[int]]) -> int: + intervals.sort(key=lambda x: x[0]) + result = [] + + for start, end in intervals: + # Use '<' to avoid intervals which touch + if result and start < result[-1][1]: + result[-1][1] = min(result[-1][1], end) + else: + result.append([start, end]) + + # Difference between original and result is to remove + return len(intervals) - len(result) +``` diff --git a/apps/docs/content/guides/(1-data-structures)/array.mdx b/apps/docs/content/guides/(1-data-structures)/array.mdx index 67c4418..c881c6b 100644 --- a/apps/docs/content/guides/(1-data-structures)/array.mdx +++ b/apps/docs/content/guides/(1-data-structures)/array.mdx @@ -3,7 +3,7 @@ title: "Array" list: "https://leetcode.com/problem-list/array/" icon: list-ordered sidebar: - badge: '40' + badge: '41' --- :::note diff --git a/apps/docs/content/guides/(2-algorithms)/sorting.mdx b/apps/docs/content/guides/(2-algorithms)/sorting.mdx index a230872..97739ad 100644 --- a/apps/docs/content/guides/(2-algorithms)/sorting.mdx +++ b/apps/docs/content/guides/(2-algorithms)/sorting.mdx @@ -3,7 +3,7 @@ title: "Sorting" list: "https://leetcode.com/problem-list/sorting/" icon: arrow-down-wide-narrow sidebar: - badge: '11' + badge: '12' --- :::note