From b3d60cc2f8befabed843b61a70548bdaa96a6dbd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 7 Jul 2025 09:28:50 +0800 Subject: [PATCH] Add solution and test-cases for problem 1353 --- .../1.png | Bin 0 -> 9111 bytes .../README.md | 34 +++++----- .../Solution.go | 59 +++++++++++++++++- .../Solution_test.go | 13 ++-- 4 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/1.png diff --git a/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/1.png b/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/1.png new file mode 100644 index 0000000000000000000000000000000000000000..619e0f4837d1775a3cef87ecc5a69e8a1602313a GIT binary patch literal 9111 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 QiQx23SlE~s96?_DC!jR|LI3~& literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/README.md b/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/README.md index 8e41f3931..1f23238a8 100644 --- a/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/README.md +++ b/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/README.md @@ -1,28 +1,32 @@ # [1353.Maximum Number of Events That Can Be Attended][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an array of `events` where `events[i] = [startDayi, endDayi]`. Every event `i` starts at `startDayi` and ends at `endDayi`. -**Example 1:** +You can attend an event `i` at any day `d` where `startTimei <= d <= endTimei`. You can only attend one event at any time `d`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Return the maximum number of events you can attend. -## 题意 -> ... +**Example 1:** -## 题解 +![1](./1.png) -### 思路1 -> ... -Maximum Number of Events That Can Be Attended -```go +``` +Input: events = [[1,2],[2,3],[3,4]] +Output: 3 +Explanation: You can attend all the three events. +One way to attend them all is as shown. +Attend the first event on day 1. +Attend the second event on day 2. +Attend the third event on day 3. ``` +**Example 2:** + +``` +Input: events= [[1,2],[2,3],[3,4],[1,2]] +Output: 4 +``` ## 结语 diff --git a/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution.go b/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution.go index d115ccf5e..bc066669a 100644 --- a/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution.go +++ b/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "sort" +) + +func Solution(events [][]int) int { + n := len(events) + maxDay := 0 + for _, event := range events { + if event[1] > maxDay { + maxDay = event[1] + } + } + sort.Slice(events, func(i, j int) bool { + return events[i][0] < events[j][0] + }) + pq := &IntHeap{} + heap.Init(pq) + ans := 0 + for i, j := 1, 0; i <= maxDay; i++ { + for j < n && events[j][0] <= i { + heap.Push(pq, events[j][1]) + j++ + } + for pq.Len() > 0 && (*pq)[0] < i { + heap.Pop(pq) + } + if pq.Len() > 0 { + heap.Pop(pq) + ans++ + } + } + return ans +} + +type IntHeap []int + +func (h IntHeap) Len() int { + return len(h) +} + +func (h IntHeap) Less(i, j int) bool { + return h[i] < h[j] +} + +func (h IntHeap) Swap(i, j int) { + h[i], h[j] = h[j], h[i] +} + +func (h *IntHeap) Push(x any) { + *h = append(*h, x.(int)) +} + +func (h *IntHeap) Pop() any { + old := *h + n := len(old) + x := old[n-1] + *h = old[0 : n-1] return x } diff --git a/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution_test.go b/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution_test.go index 14ff50eb4..da616ba7e 100644 --- a/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution_test.go +++ b/leetcode/1301-1400/1353.Maximum-Number-of-Events-That-Can-Be-Attended/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}, {2, 3}, {3, 4}}, 3}, + {"TestCase2", [][]int{{1, 2}, {2, 3}, {3, 4}, {1, 3}}, 4}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }