From de684439a95a23a683958760ac9be1c3846578e8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 2 Jul 2024 08:44:34 +0800 Subject: [PATCH 001/450] Add solution and test-cases for problem 350 --- .../README.md | 22 +++++++------------ .../Solution.go | 15 +++++++++++-- .../Solution_test.go | 19 ++++++++-------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/README.md b/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/README.md index 6b910a36a..637dc50b9 100644 --- a/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/README.md +++ b/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/README.md @@ -1,28 +1,22 @@ # [350.Intersection of Two Arrays II][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 +Given two integer arrays `nums1` and `nums2`, return an array of their intersection. Each element in the result must appear as many times as it shows in both arrays and you may return the result in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [1,2,2,1], nums2 = [2,2] +Output: [2,2] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Intersection of Two Arrays II -```go ``` - +Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4] +Output: [4,9] +Explanation: [9,4] is also accepted. +``` ## 结语 diff --git a/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution.go b/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution.go index d115ccf5e..b190eeda1 100644 --- a/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution.go +++ b/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int) []int { + in := [1001]int{} + for _, n := range nums1 { + in[n]++ + } + ans := make([]int, 0) + for _, n := range nums2 { + if in[n] > 0 { + ans = append(ans, n) + in[n]-- + } + } + return ans } diff --git a/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution_test.go b/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution_test.go index 14ff50eb4..1b3447bf5 100644 --- a/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution_test.go +++ b/leetcode/301-400/0350.Intersection-of-Two-Arrays-II/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n1, n2 []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 2, 1}, []int{2, 2}, []int{2, 2}}, + {"TestCase2", []int{4, 9, 5}, []int{9, 4, 9, 8, 4}, []int{9, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n1, c.n2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n1, c.n2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1af027e00a104ce2c29b7778a1853bcd0d8132e9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 3 Jul 2024 09:07:40 +0800 Subject: [PATCH 002/450] Add solution and test-cases for problem 1509 --- .../README.md | 46 +++++++++++++------ .../Solution.go | 28 ++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 66 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md index f11b69b0a..ab6c8eee1 100755 --- a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md +++ b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md @@ -1,28 +1,48 @@ # [1509.Minimum Difference Between Largest and Smallest Value in Three Moves][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 integer array `nums`. + +In one move, you can choose one element of `nums` and change it to **any value**. + +Return the minimum difference between the largest and smallest value of `nums` **after performing at most three moves**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [5,3,2,4] +Output: 0 +Explanation: We can make at most 3 moves. +In the first move, change 2 to 3. nums becomes [5,3,3,4]. +In the second move, change 4 to 3. nums becomes [5,3,3,3]. +In the third move, change 5 to 3. nums becomes [3,3,3,3]. +After performing 3 moves, the difference between the minimum and maximum is 3 - 3 = 0. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Difference Between Largest and Smallest Value in Three Moves -```go ``` +Input: nums = [1,5,0,10,14] +Output: 1 +Explanation: We can make at most 3 moves. +In the first move, change 5 to 0. nums becomes [1,0,0,10,14]. +In the second move, change 10 to 0. nums becomes [1,0,0,0,14]. +In the third move, change 14 to 1. nums becomes [1,0,0,0,1]. +After performing 3 moves, the difference between the minimum and maximum is 1 - 0 = 1. +It can be shown that there is no way to make the difference 0 in 3 moves. +``` + +**Example 3:** +``` +Input: nums = [3,100,20] +Output: 0 +Explanation: We can make at most 3 moves. +In the first move, change 100 to 7. nums becomes [3,7,20]. +In the second move, change 20 to 7. nums becomes [3,7,7]. +In the third move, change 3 to 7. nums becomes [7,7,7]. +After performing 3 moves, the difference between the minimum and maximum is 7 - 7 = 0. +``` ## 结语 diff --git a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go index d115ccf5e..cc6bf9e84 100644 --- a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go +++ b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "sort" +) + +func Solution(nums []int) int { + l := len(nums) + if l <= 4 { + return 0 + } + sort.Ints(nums) + // 如果最后元素全都变了,那就是nums[l-4]-num[0]了 + // 如果不是处理最后三个元素而至最后两个,然后把最小的给干掉,将最小的数值提升,然后看 + // 0,1,1, 4, 6, 6, 6, 6 + // 如果处理最后三个最大的就是nums[l-4], 然后是nums[l-3], ... + // 如果处理后面两个,那就是提升最小的值, + // ... 如果最后面的数据一个都不处理,那就是直接提升最小值 + left := 0 + ans := math.MaxInt + for i := l - 4; i < l; i++ { + ans = min(ans, nums[i]-nums[left]) + left++ + } + + return ans + //return nums[len(nums)-4] - nums[0] } diff --git a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go index 14ff50eb4..6b4b49664 100644 --- a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go +++ b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go @@ -10,12 +10,12 @@ 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{5, 3, 2, 4}, 0}, + {"TestCase2", []int{1, 5, 0, 10, 14}, 1}, + {"TestCase3", []int{3, 100, 20}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5fbfe0bf5f594830997625079b0c3174f472cf85 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 4 Jul 2024 09:12:48 +0800 Subject: [PATCH 003/450] Add solution and test-cases for problem 825 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 40 +++++++++++++++++- .../Solution_test.go | 15 +++---- 3 files changed, 74 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/README.md b/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/README.md index ab785c8ca..3c4f6ec8b 100644 --- a/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/README.md +++ b/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/README.md @@ -1,28 +1,43 @@ # [825.Friends Of Appropriate Ages][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 +There are `n` persons on a social media website. You are given an integer array `ages` where `ages[i]` is the age of the ith person. + +A Person `x` will not send a friend request to a person `y` (`x != y`) if any of the following conditions is true: + +- `age[y] <= 0.5 * age[x] + 7` +- `age[y] > age[x]` +- `age[y] > 100 && age[x] < 100` + +Otherwise, `x` will send a friend request to `y`. + +Note that if `x` sends a request to `y`, `y` will not necessarily send a request to `x`. Also, a person will not send a friend request to themself. + +Return the total number of friend requests made. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: ages = [16,16] +Output: 2 +Explanation: 2 people friend request each other. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Friends Of Appropriate Ages -```go ``` +Input: ages = [16,17,18] +Output: 2 +Explanation: Friend requests are made 17 -> 16, 18 -> 17. +``` + +**Example 3:** +``` +Input: ages = [20,30,100,110,120] +Output: 3 +Explanation: Friend requests are made 110 -> 100, 120 -> 110, 120 -> 100. +``` ## 结语 diff --git a/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution.go b/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution.go index d115ccf5e..4341d953f 100644 --- a/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution.go +++ b/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(ages []int) int { + count := make(map[int]int) + distinctAges := make([]int, 0) + for _, n := range ages { + count[n]++ + if count[n] == 1 { + distinctAges = append(distinctAges, n) + } + } + sort.Ints(distinctAges) + + ans := 0 + for i := 1; i < len(distinctAges); i++ { + c := 0 + for pre := i - 1; pre >= 0; pre-- { + if distinctAges[pre] <= distinctAges[i]/2+7 { + continue + } + if distinctAges[pre] > 100 && distinctAges[i] < 100 { + continue + } + c += count[distinctAges[pre]] + } + ans += c * count[distinctAges[i]] + } + for n, c := range count { + if c == 1 { + continue + } + if n <= n/2+7 { + continue + } + ans += (c - 1) * c + } + + return ans } diff --git a/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution_test.go b/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution_test.go index 14ff50eb4..40bbd1b9d 100644 --- a/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution_test.go +++ b/leetcode/801-900/0825.Friends-Of-Appropriate-Ages/Solution_test.go @@ -10,12 +10,13 @@ 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{16, 16}, 2}, + {"TestCase2", []int{16, 17, 18}, 2}, + {"TestCase3", []int{20, 30, 100, 110, 120}, 3}, + {"TestCase4", []int{54, 23, 102, 90, 40, 74, 112, 74, 76, 21}, 22}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 988b4d30c32f924afa4931f23facb4d3c523be7f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 5 Jul 2024 08:52:57 +0800 Subject: [PATCH 004/450] Add solution and test-cases for problem 1679 --- .../1679.Max-Number-of-K-Sum-Pairs/README.md | 32 +++++++++++-------- .../Solution.go | 22 +++++++++++-- .../Solution_test.go | 20 ++++++------ 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md index fe89109e8..84f078fcf 100755 --- a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md +++ b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md @@ -1,28 +1,32 @@ # [1679.Max Number of K-Sum Pairs][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 integer array `nums` and an integer `k`. + +In one operation, you can pick two numbers from the array whose sum equals `k` and remove them from the array. + +Return the maximum number of operations you can perform on the array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4], k = 5 +Output: 2 +Explanation: Starting with nums = [1,2,3,4]: +- Remove numbers 1 and 4, then nums = [2,3] +- Remove numbers 2 and 3, then nums = [] +There are no more pairs that sum up to 5, hence a total of 2 operations. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Max Number of K-Sum Pairs -```go ``` - +Input: nums = [3,1,3,4,3], k = 6 +Output: 1 +Explanation: Starting with nums = [3,1,3,4,3]: +- Remove the first two 3's, then nums = [1,4,3] +There are no more pairs that sum up to 6, hence a total of 1 operation. +``` ## 结语 diff --git a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go index d115ccf5e..3abe9cb12 100644 --- a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go +++ b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int) int { + sort.Ints(nums) + s, e := 0, len(nums)-1 + ans := 0 + for s < e { + sum := nums[s] + nums[e] + if sum == k { + ans++ + s, e = s+1, e-1 + continue + } + if sum < k { + s++ + } else { + e-- + } + } + return ans } diff --git a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go index 14ff50eb4..b21ab5560 100644 --- a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go +++ b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4}, 5, 2}, + {"TestCase2", []int{3, 1, 3, 4, 3}, 6, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ed84a32ee27ec5eb5422a36afdef1f959e0ae224 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 6 Jul 2024 13:06:02 +0800 Subject: [PATCH 005/450] Add solution and test-cases for problem 2582 --- .../2501-2600/2582.Pass-the-Pillow/README.md | 33 +++++++++++++++++++ .../2582.Pass-the-Pillow/Solution.go | 18 ++++++++-- .../2582.Pass-the-Pillow/Solution_test.go | 19 +++++------ 3 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2582.Pass-the-Pillow/README.md diff --git a/leetcode/2501-2600/2582.Pass-the-Pillow/README.md b/leetcode/2501-2600/2582.Pass-the-Pillow/README.md new file mode 100644 index 000000000..c92a5f6e0 --- /dev/null +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/README.md @@ -0,0 +1,33 @@ +# [2582.Pass the Pillow][title] + +## Description +There are `n` people standing in a line labeled from `1` to `n`. The first person in the line is holding a pillow initially. Every second, the person holding the pillow passes it to the next person standing in the line. Once the pillow reaches the end of the line, the direction changes, and people continue passing the pillow in the opposite direction. + +- For example, once the pillow reaches the nth person they pass it to the `n - 1th` person, then to the `n - 2th` person and so on. + +Given the two positive integers `n` and `time`, return the index of the person holding the pillow after `time` seconds. + +**Example 1:** + +``` +Input: n = 4, time = 5 +Output: 2 +Explanation: People pass the pillow in the following way: 1 -> 2 -> 3 -> 4 -> 3 -> 2. +After five seconds, the 2nd person is holding the pillow. +``` + +**Example 2:** + +``` +Input: n = 3, time = 2 +Output: 3 +Explanation: People pass the pillow in the following way: 1 -> 2 -> 3. +After two seconds, the 3rd person is holding the pillow. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/pass-the-pillow +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go index d115ccf5e..d4e8525b1 100755 --- a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, time int) int { + need := n - 1 + + loop := time / need + left := time % need + if left != 0 { + loop++ + } + + if left == 0 { + left = need + } + if loop&1 != 0 { + return left + 1 + } + return need - left + 1 } diff --git a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go index 14ff50eb4..aae452f94 100755 --- a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + a, b int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, 5, 2}, + {"TestCase2", 3, 2, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a, c.b) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.a, c.b) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8f7cafc2581b398266265d4bd2ad812e5b7b94ce Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 7 Jul 2024 12:51:07 +0800 Subject: [PATCH 006/450] Add solution and test-cases for problem 1348 --- .../1348.Tweet-Counts-Per-Frequency/README.md | 50 ++++++++----- .../Solution.go | 71 ++++++++++++++++++- .../Solution_test.go | 20 ++++-- 3 files changed, 116 insertions(+), 25 deletions(-) diff --git a/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/README.md b/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/README.md index e6a661284..c769f56fa 100644 --- a/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/README.md +++ b/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/README.md @@ -1,28 +1,46 @@ # [1348.Tweet Counts Per Frequency][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 +A social media company is trying to monitor activity on their site by analyzing the number of tweets that occur in select periods of time. These periods can be partitioned into smaller **time chunks** based on a certain frequency (every **minute**, **hour**, or **day**). -**Example 1:** +For example, the period `[10, 10000]` (in **seconds**) would be partitioned into the following **time chunks** with these frequencies: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- Every **minute** (60-second chunks): `[10,69]`, `[70,129]`, `[130,189]`, ..., `[9970,10000]` +- Every **hour** (3600-second chunks): `[10,3609]`, `[3610,7209]`, `[7210,10000]` +- Every **day** (86400-second chunks): `[10,10000]` -## 题意 -> ... +Notice that the last chunk may be shorter than the specified frequency's chunk size and will always end with the end time of the period (`10000` in the above example). -## 题解 +Design and implement an API to help the company with their analysis. -### 思路1 -> ... -Tweet Counts Per Frequency -```go -``` +Implement the `TweetCounts` class: + +- `TweetCounts()` Initializes the `TweetCounts` object. +- `void recordTweet(String tweetName, int time)` Stores the `tweetName` at the recorded time (in **seconds**). +- `List getTweetCountsPerFrequency(String freq, String tweetName, int startTime, int endTime)` Returns a list of integers representing the number of tweets with `tweetName` in each **time chunk** for the given period of time `[startTime, endTime]` (in **seconds**) and frequency `freq`. + - `freq` is one of `"minute"`, `"hour"`, or `"day"` representing a frequency of every **minute**, **hour**, or **day** respectively. + +**Example 1:** + +``` +Input +["TweetCounts","recordTweet","recordTweet","recordTweet","getTweetCountsPerFrequency","getTweetCountsPerFrequency","recordTweet","getTweetCountsPerFrequency"] +[[],["tweet3",0],["tweet3",60],["tweet3",10],["minute","tweet3",0,59],["minute","tweet3",0,60],["tweet3",120],["hour","tweet3",0,210]] + +Output +[null,null,null,null,[2],[2,1],null,[4]] + +Explanation +TweetCounts tweetCounts = new TweetCounts(); +tweetCounts.recordTweet("tweet3", 0); // New tweet "tweet3" at time 0 +tweetCounts.recordTweet("tweet3", 60); // New tweet "tweet3" at time 60 +tweetCounts.recordTweet("tweet3", 10); // New tweet "tweet3" at time 10 +tweetCounts.getTweetCountsPerFrequency("minute", "tweet3", 0, 59); // return [2]; chunk [0,59] had 2 tweets +tweetCounts.getTweetCountsPerFrequency("minute", "tweet3", 0, 60); // return [2,1]; chunk [0,59] had 2 tweets, chunk [60,60] had 1 tweet +tweetCounts.recordTweet("tweet3", 120); // New tweet "tweet3" at time 120 +tweetCounts.getTweetCountsPerFrequency("hour", "tweet3", 0, 210); // return [4]; chunk [0,210] had 4 tweets +``` ## 结语 diff --git a/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution.go b/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution.go index d115ccf5e..0261810e9 100644 --- a/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution.go +++ b/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution.go @@ -1,5 +1,72 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type TweetCounts struct { + data map[string][]int +} + +func Constructor() TweetCounts { + t := TweetCounts{ + data: make(map[string][]int), + } + return t +} + +func (this *TweetCounts) RecordTweet(tweetName string, time int) { + this.data[tweetName] = append(this.data[tweetName], time) + sort.Ints(this.data[tweetName]) +} + +func (this *TweetCounts) GetTweetCountsPerFrequency(freq string, tweetName string, startTime int, endTime int) []int { + interval := 60 + if freq == "hour" { + interval = 3600 + } + if freq == "day" { + interval = 86400 + } + + s := startTime + ans := make([]int, 0) + data := this.data[tweetName] + for s <= endTime { + e := s + interval - 1 + e = min(endTime, e) + l := sort.Search(len(data), func(i int) bool { + return data[i] >= s + }) + c := 0 + if l != len(data) { + r := sort.Search(len(data), func(i int) bool { + return data[i] > e + }) + c = r - l + } + ans = append(ans, c) + s = s + interval + } + return ans +} + +type opt struct { + name string + tname string + cname string + + ttime int + s, e int +} + +func Solution(opts []opt) [][]int { + ans := make([][]int, 0) + c := Constructor() + for _, o := range opts { + if o.name == "r" { + c.RecordTweet(o.tname, o.ttime) + continue + } + ans = append(ans, c.GetTweetCountsPerFrequency(o.cname, o.tname, o.s, o.e)) + } + return ans } diff --git a/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution_test.go b/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution_test.go index 14ff50eb4..0459a9550 100644 --- a/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution_test.go +++ b/leetcode/1301-1400/1348.Tweet-Counts-Per-Frequency/Solution_test.go @@ -10,12 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []opt + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []opt{ + {"r", "tweet3", "", 0, 0, 0}, + {"r", "tweet3", "", 60, 0, 0}, + {"r", "tweet3", "", 10, 0, 0}, + {"", "tweet3", "minute", 0, 0, 59}, + {"", "tweet3", "minute", 0, 0, 60}, + {"r", "tweet3", "", 120, 0, 0}, + {"", "tweet3", "hour", 0, 0, 210}, + }, [][]int{{2}, {2, 1}, {4}}}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4e81b11c715b388bac61847cdbdecca45aa4653d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 7 Jul 2024 22:38:01 +0800 Subject: [PATCH 007/450] Add solution and test-cases for problem 1418 --- .../README.md | 46 +++++++++++++++++++ .../Solution.go | 45 +++++++++++++++++- .../Solution_test.go | 43 ++++++++++++++--- 3 files changed, 125 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/README.md diff --git a/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/README.md b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/README.md new file mode 100644 index 000000000..b43a972d1 --- /dev/null +++ b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/README.md @@ -0,0 +1,46 @@ +# [1418.Display Table of Food Orders in a Restaurant][title] + +## Description +Given the array `orders`, which represents the orders that customers have done in a restaurant. More specifically `orders[i]=[customerNamei,tableNumberi,foodItemi]` where `customerNamei` is the name of the customer, `tableNumberi` is the table customer sit at, and `foodItemi` is the item customer orders. + +Return the restaurant's “**display table**”. The “**display table**” is a table whose row entries denote how many of each food item each table ordered. The first column is the table number and the remaining columns correspond to each food item in alphabetical order. The first row should be a header whose first column is “Table”, followed by the names of the food items. Note that the customer names are not part of the table. Additionally, the rows should be sorted in numerically increasing order. + +**Example 1:** + +``` +Input: orders = [["David","3","Ceviche"],["Corina","10","Beef Burrito"],["David","3","Fried Chicken"],["Carla","5","Water"],["Carla","5","Ceviche"],["Rous","3","Ceviche"]] +Output: [["Table","Beef Burrito","Ceviche","Fried Chicken","Water"],["3","0","2","1","0"],["5","0","1","0","1"],["10","1","0","0","0"]] +Explanation: +The displaying table looks like: +Table,Beef Burrito,Ceviche,Fried Chicken,Water +3 ,0 ,2 ,1 ,0 +5 ,0 ,1 ,0 ,1 +10 ,1 ,0 ,0 ,0 +For the table 3: David orders "Ceviche" and "Fried Chicken", and Rous orders "Ceviche". +For the table 5: Carla orders "Water" and "Ceviche". +For the table 10: Corina orders "Beef Burrito". +``` + +**Example 2:** + +``` +Input: orders = [["James","12","Fried Chicken"],["Ratesh","12","Fried Chicken"],["Amadeus","12","Fried Chicken"],["Adam","1","Canadian Waffles"],["Brianna","1","Canadian Waffles"]] +Output: [["Table","Canadian Waffles","Fried Chicken"],["1","2","0"],["12","0","3"]] +Explanation: +For the table 1: Adam and Brianna order "Canadian Waffles". +For the table 12: James, Ratesh and Amadeus order "Fried Chicken". +``` + +**Example 3:** + +``` +Input: orders = [["Laura","2","Bean Burrito"],["Jhon","2","Beef Burrito"],["Melissa","2","Soda"]] +Output: [["Table","Bean Burrito","Beef Burrito","Soda"],["2","1","1","1"]] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/display-table-of-food-orders-in-a-restaurant +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go index d115ccf5e..42b4ccd01 100755 --- a/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go +++ b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" + "strconv" +) + +func Solution(orders [][]string) [][]string { + foodHeaders := make([]string, 0) + foodHeaderIndex := make(map[string]struct{}) + tables := make([]string, 0) + tableFood := make(map[string]map[string]int) + + for _, order := range orders { + t, f := order[1], order[2] + if _, ok := foodHeaderIndex[f]; !ok { + foodHeaders = append(foodHeaders, f) + foodHeaderIndex[f] = struct{}{} + } + + if _, ok := tableFood[t]; !ok { + tables = append(tables, t) + tableFood[t] = make(map[string]int) + } + tableFood[t][f]++ + } + sort.Strings(foodHeaders) + foodHeaders = append([]string{"Table"}, foodHeaders...) + sort.Slice(tables, func(i, j int) bool { + a, _ := strconv.Atoi(tables[i]) + b, _ := strconv.Atoi(tables[j]) + return a < b + }) + + ans := make([][]string, 0) + ans = append(ans, foodHeaders) + for _, t := range tables { + line := make([]string, len(foodHeaders)) + line[0] = t + for i := 1; i < len(line); i++ { + line[i] = strconv.Itoa(tableFood[t][foodHeaders[i]]) + } + ans = append(ans, line) + } + return ans } diff --git a/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go index 14ff50eb4..26d8024ec 100755 --- a/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go +++ b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go @@ -10,12 +10,41 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]string + expect [][]string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]string{ + {"David", "3", "Ceviche"}, + {"Corina", "10", "Beef Burrito"}, + {"David", "3", "Fried Chicken"}, + {"Carla", "5", "Water"}, + {"Carla", "5", "Ceviche"}, + {"Rous", "3", "Ceviche"}, + }, [][]string{ + {"Table", "Beef Burrito", "Ceviche", "Fried Chicken", "Water"}, + {"3", "0", "2", "1", "0"}, + {"5", "0", "1", "0", "1"}, + {"10", "1", "0", "0", "0"}, + }}, + {"TestCase2", [][]string{ + {"James", "12", "Fried Chicken"}, + {"Ratesh", "12", "Fried Chicken"}, + {"Amadeus", "12", "Fried Chicken"}, + {"Adam", "1", "Canadian Waffles"}, + {"Brianna", "1", "Canadian Waffles"}, + }, [][]string{ + {"Table", "Canadian Waffles", "Fried Chicken"}, + {"1", "2", "0"}, + {"12", "0", "3"}, + }}, + {"TestCase3", [][]string{ + {"Laura", "2", "Bean Burrito"}, + {"Jhon", "2", "Beef Burrito"}, + {"Melissa", "2", "Soda"}, + }, [][]string{ + {"Table", "Bean Burrito", "Beef Burrito", "Soda"}, + {"2", "1", "1", "1"}, + }}, } // 开始测试 @@ -30,10 +59,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a31c795aa2fb01638245a6d2efa49b21c79a2711 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 9 Jul 2024 09:03:24 +0800 Subject: [PATCH 008/450] Add solution and test-cases for problem 1701 --- .../1701.Average-Waiting-Time/README.md | 39 ++++++++++++------- .../1701.Average-Waiting-Time/Solution.go | 13 ++++++- .../Solution_test.go | 28 ++++++++----- 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/leetcode/1701-1800/1701.Average-Waiting-Time/README.md b/leetcode/1701-1800/1701.Average-Waiting-Time/README.md index 5d4bbb1c9..423f20e05 100755 --- a/leetcode/1701-1800/1701.Average-Waiting-Time/README.md +++ b/leetcode/1701-1800/1701.Average-Waiting-Time/README.md @@ -1,28 +1,39 @@ # [1701.Average Waiting Time][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 +There is a restaurant with a single chef. You are given an array `customers`, where `customers[i] = [arrivali, timei]`: + +- `arrivali` is the arrival time of the ith customer. The arrival times are sorted in **non-decreasing** order. +- `timei` is the time needed to prepare the order of the ith customer. + +When a customer arrives, he gives the chef his order, and the chef starts preparing it once he is idle. The customer waits till the chef finishes preparing his order. The chef does not prepare food for more than one customer at a time. The chef prepares food for customers **in the order they were given in the input**. + +Return the **average** waiting time of all customers. Solutions within `10^-5` from the actual answer are considered accepted. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: customers = [[1,2],[2,5],[4,3]] +Output: 5.00000 +Explanation: +1) The first customer arrives at time 1, the chef takes his order and starts preparing it immediately at time 1, and finishes at time 3, so the waiting time of the first customer is 3 - 1 = 2. +2) The second customer arrives at time 2, the chef takes his order and starts preparing it at time 3, and finishes at time 8, so the waiting time of the second customer is 8 - 2 = 6. +3) The third customer arrives at time 4, the chef takes his order and starts preparing it at time 8, and finishes at time 11, so the waiting time of the third customer is 11 - 4 = 7. +So the average waiting time = (2 + 6 + 7) / 3 = 5. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Average Waiting Time -```go ``` - +Input: customers = [[5,2],[5,4],[10,3],[20,1]] +Output: 3.25000 +Explanation: +1) The first customer arrives at time 5, the chef takes his order and starts preparing it immediately at time 5, and finishes at time 7, so the waiting time of the first customer is 7 - 5 = 2. +2) The second customer arrives at time 5, the chef takes his order and starts preparing it at time 7, and finishes at time 11, so the waiting time of the second customer is 11 - 5 = 6. +3) The third customer arrives at time 10, the chef takes his order and starts preparing it at time 11, and finishes at time 14, so the waiting time of the third customer is 14 - 10 = 4. +4) The fourth customer arrives at time 20, the chef takes his order and starts preparing it immediately at time 20, and finishes at time 21, so the waiting time of the fourth customer is 21 - 20 = 1. +So the average waiting time = (2 + 6 + 4 + 1) / 4 = 3.25. +``` ## 结语 diff --git a/leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go index d115ccf5e..924fea05c 100644 --- a/leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go +++ b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(customers [][]int) float64 { + sum, end := 0, 0 + for _, c := range customers { + sum += c[1] + if c[0] < end { + sum += end - c[0] + } + + end = max(end+c[1], c[0]+c[1]) + } + return float64(sum) / float64(len(customers)) } diff --git a/leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go index 14ff50eb4..f81532911 100644 --- a/leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go +++ b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go @@ -1,28 +1,38 @@ package Solution import ( - "reflect" "strconv" "testing" ) +const ( + within = 1e-5 +) + func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 2}, {2, 5}, {4, 3}, + }, 5.00000}, + {"TestCase2", [][]int{ + {5, 2}, {5, 4}, {10, 3}, {20, 1}, + }, 3.25000}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { + diff := got - c.expect + if diff < 0 { + diff = -diff + } + if diff > within { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } @@ -30,10 +40,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 05fc2d0e3f6d43d56a102a6e0fdc59c180e9e4c9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 10 Jul 2024 08:56:37 +0800 Subject: [PATCH 009/450] Add solution and test-cases for problem 1598 --- .../1598.Crawler-Log-Folder/README.md | 43 ++++++++++++------ .../1598.Crawler-Log-Folder/Solution.go | 15 +++++- .../1598.Crawler-Log-Folder/Solution_test.go | 14 +++--- .../sample_11_1957.png | Bin 0 -> 13309 bytes .../sample_22_1957.png | Bin 0 -> 19882 bytes 5 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 leetcode/1501-1600/1598.Crawler-Log-Folder/sample_11_1957.png create mode 100644 leetcode/1501-1600/1598.Crawler-Log-Folder/sample_22_1957.png diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/README.md b/leetcode/1501-1600/1598.Crawler-Log-Folder/README.md index 991c31dc1..290d32908 100755 --- a/leetcode/1501-1600/1598.Crawler-Log-Folder/README.md +++ b/leetcode/1501-1600/1598.Crawler-Log-Folder/README.md @@ -1,28 +1,45 @@ # [1598.Crawler Log Folder][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 +The Leetcode file system keeps a log each time some user performs a change folder operation. + +The operations are described below: + +- `"../"` : Move to the parent folder of the current folder. (If you are already in the main folder, **remain in the same folder**). +- `"./"` : Remain in the same folder. +- `"x/"` : Move to the child folder named x (This folder is **guaranteed to always exist**). + +You are given a list of strings `logs` where `logs[i]` is the operation performed by the user at the ith step. + +The file system starts in the main folder, then the operations in `logs` are performed. + +Return the minimum number of operations needed to go back to the main folder after the change folder operations. -**Example 1:** +**Example 1:** + +![1](./sample_11_1957.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: logs = ["d1/","d2/","../","d21/","./"] +Output: 2 +Explanation: Use this change folder operation "../" 2 times and go back to the main folder. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./sample_22_1957.png) -### 思路1 -> ... -Crawler Log Folder -```go ``` +Input: logs = ["d1/","d2/","./","d3/","../","d31/"] +Output: 3 +``` + +**Example 3:** +``` +Input: logs = ["d1/","../","../","../"] +Output: 0 +``` ## 结语 diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go index d115ccf5e..2a0f82d01 100644 --- a/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go +++ b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(logs []string) int { + deep := 0 + for _, op := range logs { + if op == "./" { + continue + } + if op == "../" { + deep = max(0, deep-1) + continue + } + deep++ + } + return deep } diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go index 14ff50eb4..4e582509d 100644 --- a/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go +++ b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"d1/", "d2/", "../", "d21/", "./"}, 2}, + {"TestCase2", []string{"d1/", "d2/", "./", "d3/", "../", "d31/"}, 3}, + {"TestCase3", []string{"d1/", "../", "../", "../"}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/sample_11_1957.png b/leetcode/1501-1600/1598.Crawler-Log-Folder/sample_11_1957.png new file mode 100644 index 0000000000000000000000000000000000000000..c428cc71b599ca15f28b3e98e8e786514d86cf10 GIT binary patch literal 13309 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 literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/sample_22_1957.png b/leetcode/1501-1600/1598.Crawler-Log-Folder/sample_22_1957.png new file mode 100644 index 0000000000000000000000000000000000000000..2d7ef62e34bf7f1019947add5a6c605f7a7afe78 GIT binary patch literal 19882 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 Date: Thu, 11 Jul 2024 09:29:33 +0800 Subject: [PATCH 010/450] Add solution and test-cases for problem 1190 --- .../README.md | 32 ++++++++------- .../Solution.go | 39 ++++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 63 insertions(+), 22 deletions(-) diff --git a/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/README.md b/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/README.md index b58cd9741..1ae7dc123 100644 --- a/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/README.md +++ b/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/README.md @@ -1,28 +1,34 @@ # [1190.Reverse Substrings Between Each Pair of Parentheses][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 a string `s` that consists of lower case English letters and brackets. + +Reverse the strings in each pair of matching parentheses, starting from the innermost one. + +Your result should **not** contain any brackets. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "(abcd)" +Output: "dcba" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reverse Substrings Between Each Pair of Parentheses -```go ``` +Input: s = "(u(love)i)" +Output: "iloveu" +Explanation: The substring "love" is reversed first, then the whole string is reversed. +``` + +**Example 3:** +``` +Input: s = "(ed(et(oc))el)" +Output: "leetcode" +Explanation: First, we reverse the substring "oc", then "etco", and finally, the whole string. +``` ## 结语 diff --git a/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution.go b/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution.go index d115ccf5e..33c409735 100644 --- a/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution.go +++ b/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "bytes" +) + +func Solution(s string) string { + stack := make([][]byte, 0) + buf := bytes.NewBuffer([]byte{}) + for idx := 0; idx < len(s); idx++ { + if s[idx] == '(' { + dst := make([]byte, len(buf.Bytes())) + copy(dst, buf.Bytes()) + + stack = append(stack, dst) + buf.Reset() + continue + } + if s[idx] == ')' { + tmp := buf.Bytes() + tmpl := len(tmp) + bs := make([]byte, tmpl) + buf.Reset() + for i := tmpl - 1; i >= 0; i-- { + bs[tmpl-i-1] = tmp[i] + } + + l := len(stack) - 1 + top := stack[l] + stack = stack[:l] + + top = append(top, bs...) + buf.Write(top) + continue + } + buf.WriteByte(s[idx]) + } + + return buf.String() } diff --git a/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution_test.go b/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution_test.go index 14ff50eb4..96dcd82b7 100644 --- a/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution_test.go +++ b/leetcode/1101-1200/1190.Reverse-Substrings-Between-Each-Pair-of-Parentheses/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "(u(love)i)", "iloveu"}, + {"TestCase2", "(abcd)", "dcba"}, + {"TestCase3", "(ed(et(oc))el)", "leetcode"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 95829291dabd3df0aa0b12ea94c72b1ae9c9f653 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 13 Jul 2024 14:51:15 +0800 Subject: [PATCH 011/450] Add solution and test-cases for problem 2751 --- .../2701-2800/2751.Robot-Collisions/1.png | Bin 0 -> 14210 bytes .../2701-2800/2751.Robot-Collisions/2.png | Bin 0 -> 13852 bytes .../2701-2800/2751.Robot-Collisions/3.png | Bin 0 -> 9859 bytes .../2701-2800/2751.Robot-Collisions/README.md | 53 +++++++++++++ .../2751.Robot-Collisions/Solution.go | 72 +++++++++++++++++- .../2751.Robot-Collisions/Solution_test.go | 21 ++--- 6 files changed, 134 insertions(+), 12 deletions(-) create mode 100644 leetcode/2701-2800/2751.Robot-Collisions/1.png create mode 100644 leetcode/2701-2800/2751.Robot-Collisions/2.png create mode 100644 leetcode/2701-2800/2751.Robot-Collisions/3.png create mode 100644 leetcode/2701-2800/2751.Robot-Collisions/README.md diff --git a/leetcode/2701-2800/2751.Robot-Collisions/1.png b/leetcode/2701-2800/2751.Robot-Collisions/1.png new file mode 100644 index 0000000000000000000000000000000000000000..7111feea7ac62a4b4a55271ea9f0ada9369f7c77 GIT binary patch literal 14210 zcmb`uby(Eh*DgM&Afl8KA|;@JN{Vy}Qi4c#$BZ=6As~&UbT>-p00Rsm(hbtx-5o>x zHqZ0C=e*DNy?*C9f1J?^2H4mB?7jBdYu)#~)_jwd5y!@Qf(3yB0LP zObqb#*DeV@_;$xeSW*!ayuM%>`h%ZIY(-UV6)d5)4tmx`5SWFfxe=p{fwhs5h0P~R z+nw9>0$>o6v7)N2h_#WPt+A!WQ$=HQBk)TIq%XYR^C>IG)4rO%;{MR5uUTHRJ!N6# zVdVt>NnV=`K_E{dlJDLsIwo#SIXEgRU197x(8k%y)A{rz7`=UKON@^G4*xz!A7N*8 zen4j-;al$^pVSL0JLBzKRV()FQ9YG+c%J%qiSP)t-pj_v8UDFX6&HShqLGoPVgvsi zEZR{{$xgJ>yeE@vaU&viE72toyrl-^)s4_e`QB0vO--h6WS6IIjAI0GCaC$`rk*KK5JF$1Oqa`VF zii_`zC0{_Eb|?FGbv>}%na0*GA|{E8^A8LZ)zl=Tra6OE;krM1_YR{)jfa|g3zKTr zmMEjT`bldDdE+@Q=WJkaeN)2)rIGney}MwddxMpx^BI>R%t2IM{^1|CKfIT*=J-5( zt({x;8FkY>0Rh&7BS<_#BM~q;Bo(ZMDTcJaUryrVM?bLcZs*7pr1}wE@uxZYn!R(4fHIc@M$UPUyE`J%(htHTBJ|4bdpeu#_RX92@n*Uw zAuYXms6^M^I2jgZ6&=#$YrsOHBr5vc?R-x>-*Jh(=B$M`cXOd7!SdIRMJgcV! zeE3ULAKQof1XOnd0t4sv9Cv$v^y;qkXr0=hI8c?dJGRAfnXc+ia&A$)6BDCmWDNEq zl+@pDli-pPhc>dt2IZ!uq20wbcl zH6J}7;}=>M{4wYBE^lN^l%G+Gy~~qnN0d?~%4YwL#sXJ2SaOH08IT;2sjV@KTj6f~xVPabRW=dJZ ze>)#7x2w0(HOm-Wfr;u4=#cM8Q-qeaD4uiN)gn6;MZ)MjYFtX5pk9GXO*k4BWc%#k z^7MS8;Ph-Ig?;0;53!B7*n%z3-Ui&)R5=kMw6&+6=+bjW|MKOZd|X2uGOzYkx2rQ) z&FO_y^$QtDYU(c!_u9z7bYYv&{#;`E=H}<8n{ejc(`){m;BfgvE^PlP0f5e z6$vA7CLh4^G_Csy<5PqoZ?qHLn=A9e+@I=f6n=mE`2lUlfg>M16H`NgiuOSDEAyHQ zd8YU8rGOKaZ3mbrGRo%W<`$ntbjNbLR>ULkb=*GbZCXij{Wh+?1*MnN0@GuIBbNq8 zPC`ILq<8Mh#ycoxZ?AH(wR7!<%UKg@SvTc-GE(?E<6z~bwbo#n3oNy-X#t))lFEfe zR{3R8sTzfDzcG!yQ{;*}Ha4d2;G_5p*w&GcVsq?(pNZ7v$FNpdB*KYbhX07b4aL{q z0vxumu8v}-=7@=6Qz*=Jd@W0VDd80!G35wU3s`T`dcg2v_wt(O&j-GvLuyT%t)ZVa zIp0jgWji`MN~llRr?6!qy9XsHCHv)w-}apNSd_~lL1N$3c-Z4yqeCK_S!26Wi;FQg zM$A`bNo`j6|0pKbT&Seei9zd`JS*Ew&_miv^TnmSA;b{Q@ z0SaDwOEk!r^LE(jLL@SNn7{r)E$E3W8br6NO-i<};nsrRCGx{rb7n5t+nmC}7IE@? zzM^_PYN+6(z4Bgunn>~dk-OeR5A$BjMA3Y}E9U!7l%#?kB1T3^;?Co+pt&4{) z2lb|Vj_zBz-;aUwhCYPbLh#7RgYQBo{X+ML=kv@{=5n%#Gh9Nqu?~yF;$UkM+$KQ{ z?d_80Ez`@Pq_kR;hXPy}3QsK%q@=?R46U`OLzD9}bQYPIWvRF;C)gJ-9mjkt6Bub9kBzRafT%tfih7_5%L=K4PReI7T? z(x02Bvl<#&5E<`XSK7&_4)BUp%Z@?@1wD91OPija{!ow-Rkb!}>uWFmcsbMvBR3`VqLXn33K*Du^Y|9h=+v6fn8F;td(hR%N{$p;?7VS zf{62W$IpNTU0zM?TT%V^cpAs?)>J6|N=S>pjrhWkrJ^#`k$U&~pDDb~hj$1 zg@ef84A41RJ#v=YWN7K9Y4w~wP8-A3-+XQm54}>Kv9Q@UM^N+dJaO09b*R}dBILUE zoKwBpKd4;jnb^H@7r=CO_jBX%4hVQ}=+G$!QfA*ogj;qTvhMO60rPz(evj+&6WD78HeaN zjg6e?gF+BRMKd&Ho?!Eya5_3Q2cB+E@So~-`@P)>1)H@_KfXie<3n!JxUiR6mRZ)l zZ%U^b+;1R;1`$9V-Y4U?E)zkaJ+XYBw&VcI5#6JqFE1}Y9g(V{GS^U02n5Qz^T z8WNpCXB+$|e#Lq9VpbJFY{YLiDYPR{iw2o-Mcy468iIWN$iYq#Ri!)VkAv7T7*^wv z_l-BOvH{Uub+^eNyC|>KYXH`;apYU}F{EKJwAtisn8;WHA4q2U690Ea4c_lTU`1QWJPn&V>0(VpQhRv?E4=e)hSXuie&X)+h{)E4V z1ha7{MJY-2N{GLIkJTYu$tM2c19om+Zdh#F0CA9X!6cecy<0GP2iV0M#)K~u1t6t0 zsvca8e?M-Y47<5R@rBsjHoGJeGBUy-Pm6_;U_;v4BzCM&-6sYBsr|-flg<-WC!Tz9n$Rhf6AWg@>47 zB@tRUL%nC+U?6`X(#<;BnrzWZX>rZ}@>SkMGw@>M^}dPdsvA3rJXjZ)DH86ACGbF#hubAUty#P5roygZSS{CpgQO+y>L z>c!wp*!S;W!{;Af99JiltWUYW>T8THMcT73^_w?;+{>kB77xSnip0A`NEiit)?>;- z+{lO!nCyFG;vEP`kN0w>e*dOcR8mSa9SQLZE6Y&c&R2fre6)TKa=Ml!0(o+`==|LI z23@^wy6+puD-Xg8_s@^KPNvE;{Kuj6R%o)aCmHgmxezdh! z^t(Ue;pOI&Tq~2T$GZMI?6KWk8%Ggpy^|4(fL`l^ldZ;{Ld~QFaW&NFgSYK&Bx(6fV9y2963W|?Yg%EoKV@Kh zxyJR`Alt4ZA60qhWSC`iVMa&itKF?_{^G2OlC_AV)5FdWm5!T_FAfK&7GJOoZ2l8m zu8(gAyYHd}i=#)iQGts{$H<7?D4sZx#^HQry)4QV^!PIc!1Ik2^;Y2Cy*GSkxFA@K ztW&Bs{sOll-mY3USMoYOD}NI^)gtddy;?eR5&sw zW+6AP2)G5$O_EWu(b?%E4rg`9Y+^|2Jw#D91;ydc{$|b4ErDzd7q)s{yOcJrtZ~Br z@oW~z;r7&N_hf6xRlbA^0D_bW-M%FYOxv=gH^ZyTHwf3|bPZay%sO_m}e+KwUR}&Pjx0roDzR>kgMuSLC6FPB_kYVOLoyeN!%WDT(TKk45l~9!oV^KgS zUIP4JJcTWf31D`k8qe!T0DaMdP;Ai7%-P(Z@%&oV-(m_0Mhs=kr`oRlL66b-ob%+v ztM%~DF;8DKS*Frm0@m>9hAREOd9+D6H5=Qbh-<67VJ+i@;}`BiCME$np|^7Pdu}4a z$+izbR7GM30kKChajX4sUIwDTVJ#{j7O;sM8Z-M?8X6H6=P|K!;Z<1I2M7C)1!<+N zOL3=S+BsEyEh;?TGr^(?4XiP*Jn;L`=Gg5=g-DDSFJ1s_Owa-hdczC74OrqnTwh%l zTQok=BD0hF@Sz!HIwJyp191Dg;-w1Rt5^5olui=eTHcFuRd72c?1<7E7~1nEEDoFl zyuGdK*D$#bwE&eiT;LfU-CSouLRi!g_v?HUkB9j99$^_ht@A%V=2j)70u-(PfYObr zH;aQ6AZ35JtsxQcMl%MY`{Ci?yX{$|R_#9w8tbk*nJE42NQa+tb5{){CO-~~h=|Bo z#sQuY78~iGpD+F8c#YU(J6Fqw()CV;c<4L(iYpxczm}DLdg?gIb4FBiQAB8koQyxD z;^w}mV~%=YkE|WI5RvFu0A`DfjPz#fA@d&iC`d@kX@=D)K+NQHi*x!=<8W()lL0kw zf9O6z>KJMKDM;5J1^DweTY4<`JUb5R^8VbgM*4-;=3_gpI><6-2kfG&6VhxDeoK9>D1^4 zQbA$vrbsV?FeZLs5+Nb?oGs7i18hWkW#uylR99C=QwKu%m&HdBF)=aKW6AU1lVSKv zE0j$mI&Q&nY*!DXFBvuW@AzV)*a1_djJ}jxX#fr;f$6coZ#_6Pq}QJAK3h)siqQCE zxE-MjfDS$(p%1Wu46ho&@GW%6`ue)8oScXF$`z$@(RpYtD&BFb+|jYeEHm>N&HpCP z?*PJT>lO4LQON&Ac3b%4iy$RY}u9u-Ha!Q=E0+}s+pPl_MWy6|J&t*QiR?G=#tB=hUj^7v%h~(Q*W!ASXu_= z^XI|hxLfwTrPa`MjT4JqXTG+!HX$=jhWYt<$47q9H?L&BwzxYc_2^?#-6$Nh36}PA z2}wv{6Vn?a0eFyAudBN+I#DJp^MFz_9K;^{&)}+f0?gvoIQOaAzVXB+)dc12cJg9U;03ZC za3Z&f=SHj!T}l0);?!o~tqb^~qN3^9*%H7H?}0Jv8yli}dTCZ%WMD}Zj{Iy=S5^<8 z$=$-Z25>xKE;5|4t=FA&l0@_-?y3!C8%NGY2n|KWXGpD>&gaM}5G1~Cg};vFUGDi5 zs|FpGj)g6cNe_0xShh-q?gcZ2roM4szB^IHa@c**d%8?;UjUCA=*@dq8_4uXbF(>vmB&!vR#2 z@xy^N+X_c5Ik_;y=pW~%#|kx$VSG0NXq<06al6#LK?^-SDsQ~f21`U=)SN{ z6bu+X!L4-v4e@eF726YNbR7GmwkPX9Ku+NY?ctqBA|jV@|wxajPB zqsRxZ%i5-z*YkG=+{WNvW@YQk6^dhn$w;7glo=0r<1xs_4-DZGC?_Y8{@WaqEN6%O zooYnVCD=lxqsJ%Lw*t2!^83P0X50lcx2D}t<~}aMN%wA|LRUCA?aZ=ehrIA=jhMmG zLM>#6I_(c9q_F=_UI#(~f~Pbz86QZ~_aJD%YoB_5Qddz{9^OXn@zc@Kb-LjKn&IY- zTfJ0dt+!;n*)fp)uOk~{DC@A^7&-98P3s?ep}4}B>XGNzrRG)uKtbF!!CBDaCP z>0)3rrR`!nFr#f)95`Ws#Sx(gD7trRn~4kG{VV;a%J_qOt_N)gt}idO5jg&X$u_1s zw&tipzO&3tunvZt!b#|+-QbUmj!w_d@7mdU8}t9?YUpsYO@@tm0_Ji-)toB;=&t_b zK(phP8vSqsz3$?6xJfLr#cmxO9Pk=NJKYg&abeM4GFJTenu$z|xJT`O?5`DRAto4+ zT5y=!{u2WB-YL|@K`+n&GwomH=+wKJN0ak8${ru5j}gz>=GvS*@UJr14)TpNf_8g5 zL6g7PHtH<>?id)2%98slko@m^Z2K%lery1hapdypvM!RV+4Nw!TfZwd(DUM%a8@AF z@#ae4zn~hW`J#oi7u}hz{d~Hs$A~0<9oX!Nb{k_Bq!|O=^OpGjoZQlRH$Bg%dBLHN#u}KD#IG(IGPW$=nzTqQz?VTx9Vp zayilnw<2Nsh^53tvM{_D`aj`pK*LB9D6FBl6)x@QhtuO`9{}Ccir0 zpDi{0#kR20i7=`1z(qBubC?gdM*Vcibgj$6Y=f7-zkgpQCA4YstaWnj5!;52Ds)Xk zt_$u?=G90y8n~z-B_Z(@?-o&Dvn9%U{D|C`K)9{i+`-wI2N?VIF*c+W4hMJ&B;bB% z(%@EkRHejp3g+l;qXSA8kwqhT4FUX&&{!obaIv8St|cD@Q@4&TR%Or!)u7S|R<^$b z;_xZl*7o5+7waekPyEs`MVjGRPFC_mUi(eiXPq7t@>{vw9Gt=ZFSJB$ZG%S3j3YKV zZp&>EFjHMz%P&>Ddbf~7xacdiuDyD7K5NT!>04+=`kr#x{8B1`=1h0@WB23{nUx)PO-3%1}MICbc)k*TxuYMdkd>Sc4?;$1?pX50pgUdWyV_K zaE2q*N~<(lH49dmtRI1`l-C-4TZo@PNz*k-dV~nv2WJ?~fHQmkZejOrZ&aQjBcY(5U1e84-Uydd`Z=dt`$U$1kI~*CQG| zB1U(dk&%&bMAIf1@-&)3?N3?Z(MFASkrhvpc{KU}v-?(bboBXFk*4+iNCp?&u(;&s zv@(gKX}z-hPa<`Dr(BlfU{)hq4wCH8C1sF-#LO*+YXg@RpAT2%K&_5H)8^ztt1g%_qE;5b}wiDP3ACKmEFh z2nck$V27ID>UO;a?`@!kB1~4}u5; zL+tT{sl(;@k!rCnn*GjnFsNxkf_1W2U0gTZ&XYBm?~Ac)IrC94XjKzvRojLQRqRMT zT`I;T6_~hqE<<94bxb)*Iq337@u22T1B0TMw5A1P=sej-w!PSdW(YDivJer!+p~9f)GhjEG5U zU~>A0j~<~z!V(fp$Gcv#ONrC1QT4u3DI}1SlcT1hdK*M3s4X4;M)GjAAI!x$Y2{@M z{9DzjA#wh>_n{o(_FWwRM|3h}YD`&E#M+L3jSnK{RZawcc5mgAYsNcehDz5NfF zJ?B}EHR=u`#)tC{jRY5iIvI-)9R$jGN}FSFy4Bu~`>Wo>KwCQbb2_^-K9K^2?4M-7ey?l=bvOcyJAf`Lic)~?D_+o%?62iMJ z6vL!d>~sKq@Z=39fbEi!l8-qp$flh)7=Z=uHTq%$R)|(E5I;OkUUqfbD)_!)px)iR zehV?O9r;3m#qGk;5DL{lS|6(1uHN__8~b>d{>Q)?xE9!sO+5~Z%r9SJF~#IHS34an z&sD7?M;s*y0A}J}+WeG?iPd|in6ILZJ~PYEpvnKB#CGkWbTXgXRm;^&;^!}WDcvtv z7dsBh24o%qiz{9TbN_hR%WgV+hh5~hP$unVpBr99A%$1JxAxC_C1$Czyfj97-$mE!gU0D57-#PXF*2R1?|_yd3tkodWU1V|-nWjzP|8RGo_!5(gm6n#i`*cwNN zWas69Q{Tek==2!>9-fpG?CI%gKVip3*4EYa4rut0JFa((etktVKi<-SAts)qhMljk zN;i>Aw3^g-J}1*^!IpJn-xxJ2%23XtOyTZxKE&f?RNk15Y4L;1eItb<8_nN9iQjHR zInniaj1ed2cxQ%EDw?5T43;vr?PKlZ<70ljq2T}m8HbM50l-KG+mltLOpzd=ecExz z!wmFqDomP5)3E0xYZLrhSy@@Usd8U^r3b-4M|Zb1l(KapRB*a%+95tokrV{LA9hgi z%Nczw5Wj$+vfP^z3gEawN8}6hE4kO^P)4Gr@oL>=FF05d2ZP43nd-4At@?@+IG)P0 z<%ERSFPhq!5uKf#w;|w~WZNvp8CZ=Q83 zxCT{V@#y#Z9Xt?g
Mcgq9F-rgJZjXZwYiqeUFLp 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 EfA%_&OaK4? literal 0 HcmV?d00001 diff --git a/leetcode/2701-2800/2751.Robot-Collisions/2.png b/leetcode/2701-2800/2751.Robot-Collisions/2.png new file mode 100644 index 0000000000000000000000000000000000000000..49b92e535f3482fc52c18d242b9ef224827f2ba4 GIT binary patch literal 13852 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 literal 0 HcmV?d00001 diff --git a/leetcode/2701-2800/2751.Robot-Collisions/3.png b/leetcode/2701-2800/2751.Robot-Collisions/3.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ec458e054395abb8d8f2a9f1e0c72d6a017e77 GIT binary patch literal 9859 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 Dz-0hQ literal 0 HcmV?d00001 diff --git a/leetcode/2701-2800/2751.Robot-Collisions/README.md b/leetcode/2701-2800/2751.Robot-Collisions/README.md new file mode 100644 index 000000000..e6e9c6fe1 --- /dev/null +++ b/leetcode/2701-2800/2751.Robot-Collisions/README.md @@ -0,0 +1,53 @@ +# [2751. Robot Collisions][title] + +## Description +There are `n` **1-indexed** robots, each having a position on a line, health, and movement direction. + +You are given **0-indexed** integer arrays `positions`, `healths`, and a string `directions` (`directions[i]` is either **'L'** for **left** or **'R'** for **right**). All integers in `positions` are **unique**. + +All robots start moving on the line **simultaneously** at the **same speed** in their given directions. If two robots ever share the same position while moving, they will **collide**. + +If two robots collide, the robot with **lower health** is **removed** from the line, and the health of the other robot **decreases by one**. The surviving robot continues in the **same** direction it was going. If both robots have the **same** health, they are both removed from the line. + +Your task is to determine the **health** of the robots that survive the collisions, in the same **order** that the robots were given, i.e. final heath of robot 1 (if survived), final health of robot 2 (if survived), and so on. If there are no survivors, return an empty array. + +Return an array containing the health of the remaining robots (in the order they were given in the input), after no further collisions can occur. + +**Note**: The positions may be unsorted. + +**Example 1:** + +![1](./1.png) + +``` +Input: positions = [5,4,3,2,1], healths = [2,17,9,15,10], directions = "RRRRR" +Output: [2,17,9,15,10] +Explanation: No collision occurs in this example, since all robots are moving in the same direction. So, the health of the robots in order from the first robot is returned, [2, 17, 9, 15, 10]. +``` + +**Example 2:** + +![2](./2.png) + +``` +Input: positions = [3,5,2,6], healths = [10,10,15,12], directions = "RLRL" +Output: [14] +Explanation: There are 2 collisions in this example. Firstly, robot 1 and robot 2 will collide, and since both have the same health, they will be removed from the line. Next, robot 3 and robot 4 will collide and since robot 4's health is smaller, it gets removed, and robot 3's health becomes 15 - 1 = 14. Only robot 3 remains, so we return [14]. +``` + +**Example 3:** + +![3](./3.png) + +``` +Input: positions = [1,2,5,6], healths = [10,10,11,11], directions = "RLRL" +Output: [] +Explanation: Robot 1 and robot 2 will collide and since both have the same health, they are both removed. Robot 3 and 4 will collide and since both have the same health, they are both removed. So, we return an empty array, []. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/robot-collisions +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2751.Robot-Collisions/Solution.go b/leetcode/2701-2800/2751.Robot-Collisions/Solution.go index d115ccf5e..b1ea8d3bb 100755 --- a/leetcode/2701-2800/2751.Robot-Collisions/Solution.go +++ b/leetcode/2701-2800/2751.Robot-Collisions/Solution.go @@ -1,5 +1,73 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type tmp2751 struct { + i []int + p, h []int + d []byte +} + +func (t tmp2751) Len() int { + return len(t.p) +} + +func (t tmp2751) Swap(i, j int) { + t.p[i], t.p[j] = t.p[j], t.p[i] + t.h[i], t.h[j] = t.h[j], t.h[i] + t.d[i], t.d[j] = t.d[j], t.d[i] + t.i[i], t.i[j] = t.i[j], t.i[i] +} + +func (t tmp2751) Less(i, j int) bool { + return t.p[i] < t.p[j] +} + +func Solution(positions []int, healths []int, directions string) []int { + ans := make([]int, 0) + l := len(positions) + indies := make([]int, l) + for i := 0; i < l; i++ { + indies[i] = i + } + s := tmp2751{p: positions, h: healths, d: []byte(directions), i: indies} + sort.Sort(s) + + stack := make([]int, len(positions)) + stackIndex := -1 + for i := 0; i < l; i++ { + dir := s.d[i] + if dir == 'L' { + for stackIndex >= 0 && healths[stack[stackIndex]] < healths[i] { + healths[i]-- + stackIndex-- + } + + if stackIndex == -1 { + ans = append(ans, i) + continue + } + if healths[stack[stackIndex]] == healths[i] { + stackIndex-- + continue + } + + healths[stack[stackIndex]]-- + + continue + } + stackIndex++ + stack[stackIndex] = i + } + for i := 0; i <= stackIndex; i++ { + ans = append(ans, stack[i]) + } + sort.Slice(ans, func(i, j int) bool { + return indies[ans[i]] < indies[ans[j]] + }) + for i := 0; i < len(ans); i++ { + ans[i] = healths[ans[i]] + } + + return ans } diff --git a/leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go b/leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go index 14ff50eb4..6f3bd5d35 100755 --- a/leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go +++ b/leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + p, h []int + d string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 4, 3, 2, 1}, []int{2, 17, 9, 15, 10}, "RRRRR", []int{2, 17, 9, 15, 10}}, + {"TestCase2", []int{3, 5, 2, 6}, []int{10, 10, 15, 12}, "RLRL", []int{14}}, + {"TestCase3", []int{1, 2, 5, 6}, []int{10, 10, 11, 11}, "RLRL", []int{}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.p, c.h, c.d) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.p, c.h, c.d) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1c0a3fd527063db04afb0c838fe75af6c897a328 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 14 Jul 2024 13:22:45 +0800 Subject: [PATCH 012/450] Add solution and test-cases for problem 726 --- .../701-800/0726.Number-of-Atoms/README.md | 47 ++++++++--- .../701-800/0726.Number-of-Atoms/Solution.go | 82 ++++++++++++++++++- .../0726.Number-of-Atoms/Solution_test.go | 16 ++-- 3 files changed, 123 insertions(+), 22 deletions(-) diff --git a/leetcode/701-800/0726.Number-of-Atoms/README.md b/leetcode/701-800/0726.Number-of-Atoms/README.md index 97cf804bf..6be55ea62 100644 --- a/leetcode/701-800/0726.Number-of-Atoms/README.md +++ b/leetcode/701-800/0726.Number-of-Atoms/README.md @@ -1,28 +1,49 @@ # [726.Number of Atoms][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 +Given a string `formula` representing a chemical formula, return the count of each atom. + +The atomic element always starts with an uppercase character, then zero or more lowercase letters, representing the name. + +One or more digits representing that element's count may follow if the count is greater than `1`. If the count is `1`, no digits will follow. + +- For example, `"H2O"` and `"H2O2"` are possible, but `"H1O2"` is impossible. + +Two formulas are concatenated together to produce another formula. + +- For example, `"H2O2He3Mg4"` is also a formula. + +A formula placed in parentheses, and a count (optionally added) is also a formula. + +- For example, `"(H2O2)"` and `"(H2O2)3"` are formulas. + +Return the count of all elements as a string in the following form: the first name (in sorted order), followed by its count (if that count is more than `1`), followed by the second name (in sorted order), followed by its count (if that count is more than `1`), and so on. + +The test cases are generated so that all the values in the output fit in a **32-bit** integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: formula = "H2O" +Output: "H2O" +Explanation: The count of elements are {'H': 2, 'O': 1}. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Atoms -```go +``` +Input: formula = "Mg(OH)2" +Output: "H2MgO2" +Explanation: The count of elements are {'H': 2, 'Mg': 1, 'O': 2}. ``` +**Example 3:** + +``` +Input: formula = "K4(ON(SO3)2)2" +Output: "K4N2O14S4" +Explanation: The count of elements are {'K': 4, 'N': 2, 'O': 14, 'S': 4}. +``` ## 结语 diff --git a/leetcode/701-800/0726.Number-of-Atoms/Solution.go b/leetcode/701-800/0726.Number-of-Atoms/Solution.go index d115ccf5e..212906ddd 100644 --- a/leetcode/701-800/0726.Number-of-Atoms/Solution.go +++ b/leetcode/701-800/0726.Number-of-Atoms/Solution.go @@ -1,5 +1,83 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "sort" + "strings" +) + +type tmp726 struct { + k string + c int +} + +func Solution(formula string) string { + stack := make([]map[string]int, 0) + count := make(map[string]int) + i, l := 0, len(formula) + for i < l { + cur := formula[i] + if cur >= 'A' && cur <= 'Z' { + start := i + i++ + // 判断后面是否还跟着小写字母 + for ; i < l && formula[i] >= 'a' && formula[i] <= 'z'; i++ { + } + // 一个元素 + key := formula[start:i] + // 判断数字 + c := 0 + for ; i < l && formula[i] >= '0' && formula[i] <= '9'; i++ { + c = c*10 + int(formula[i]-'0') + } + + if c == 0 { + c = 1 + } + count[key] += c + continue + } + if cur == '(' { + stack = append(stack, count) + count = map[string]int{} + i++ + continue + } + pc := 0 + i++ + for ; i < l && formula[i] >= '0' && formula[i] <= '9'; i++ { + pc = pc*10 + int(formula[i]-'0') + } + if pc == 0 { + pc = 1 + } + for k := range count { + count[k] *= pc + } + if tl := len(stack); tl > 0 { + top := stack[tl-1] + stack = stack[:tl-1] + for k, c := range top { + count[k] += c + } + } + + } + + list := make([]tmp726, 0) + for k, v := range count { + list = append(list, tmp726{k, v}) + } + sort.Slice(list, func(i, j int) bool { + return list[i].k < list[j].k + }) + buf := strings.Builder{} + for _, i := range list { + w := i.k + if i.c != 1 { + w += fmt.Sprintf("%d", i.c) + } + buf.WriteString(w) + } + return buf.String() } diff --git a/leetcode/701-800/0726.Number-of-Atoms/Solution_test.go b/leetcode/701-800/0726.Number-of-Atoms/Solution_test.go index 14ff50eb4..c72273370 100644 --- a/leetcode/701-800/0726.Number-of-Atoms/Solution_test.go +++ b/leetcode/701-800/0726.Number-of-Atoms/Solution_test.go @@ -10,12 +10,14 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "H2O", "H2O"}, + {"TestCase2", "Mg(OH)2", "H2MgO2"}, + {"TestCase3", "K4(ON(SO3)2)2", "K4N2O14S4"}, + {"TestCase4", "H2(H3)2", "H8"}, + {"TestCase5", "H11He49NO35B7N46Li20", "B7H11He49Li20N47O35"}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c491689e9352218ab0e73a1419935c1acf27452c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 15 Jul 2024 22:27:46 +0800 Subject: [PATCH 013/450] Add solution and test-cases for problem 1475 --- .../README.md | 42 +++++++++++++++++++ .../Solution.go | 15 ++++++- .../Solution_test.go | 14 +++---- 3 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/README.md diff --git a/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/README.md b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/README.md new file mode 100644 index 000000000..36e7af59e --- /dev/null +++ b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/README.md @@ -0,0 +1,42 @@ +# [1475.Final Prices With a Special Discount in a Shop][title] + +## Description +You are given an integer array `prices` where `prices[i]` is the price of the ith item in a shop. + +There is a special discount for items in the shop. If you buy the ith item, then you will receive a discount equivalent to `prices[j]` where `j` is the minimum index such that `j > i` and `prices[j] <= prices[i]`. Otherwise, you will not receive any discount at all. + +Return an integer array `answer` where answer[i] is the final price you will pay for the ith item of the shop, considering the special discount. + +**Example 1:** + +``` +Input: prices = [8,4,6,2,3] +Output: [4,2,4,2,3] +Explanation: +For item 0 with price[0]=8 you will receive a discount equivalent to prices[1]=4, therefore, the final price you will pay is 8 - 4 = 4. +For item 1 with price[1]=4 you will receive a discount equivalent to prices[3]=2, therefore, the final price you will pay is 4 - 2 = 2. +For item 2 with price[2]=6 you will receive a discount equivalent to prices[3]=2, therefore, the final price you will pay is 6 - 2 = 4. +For items 3 and 4 you will not receive any discount at all. +``` + +**Example 2:** + +``` +Input: prices = [1,2,3,4,5] +Output: [1,2,3,4,5] +Explanation: In this case, for all items, you will not receive any discount at all. +``` + +**Example 3:** + +``` +Input: prices = [10,1,1,6] +Output: [9,0,1,6] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/final-prices-with-a-special-discount-in-a-shop +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go index d115ccf5e..99227e0f5 100755 --- a/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go +++ b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(prices []int) []int { + l := len(prices) + dst := make([]int, l) + copy(dst, prices) + for i := l - 2; i >= 0; i-- { + for j := i + 1; j < l; j++ { + if prices[j] <= prices[i] { + dst[i] -= prices[j] + break + } + } + } + return dst } diff --git a/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go index 14ff50eb4..5755fc5de 100755 --- a/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go +++ b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go @@ -10,12 +10,12 @@ 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{8, 4, 6, 2, 3}, []int{4, 2, 4, 2, 3}}, + {"TestCase2", []int{1, 2, 3, 4, 5}, []int{1, 2, 3, 4, 5}}, + {"TestCase3", []int{10, 1, 1, 6}, []int{9, 0, 1, 6}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3cc9b687e8b959efe3b7f407e6d551a8a344924b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 15 Jul 2024 23:23:19 +0800 Subject: [PATCH 014/450] Add solution and test-cases for problem 1106 --- .../README.md | 44 +++++++++---- .../Solution.go | 62 ++++++++++++++++++- .../Solution_test.go | 13 ++-- 3 files changed, 98 insertions(+), 21 deletions(-) diff --git a/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/README.md b/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/README.md index 80d3690ff..2085bbf61 100644 --- a/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/README.md +++ b/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/README.md @@ -1,28 +1,46 @@ # [1106.Parsing A Boolean Expression][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 +A **boolean expression** is an expression that evaluates to either `true` or `false`. It can be in one of the following shapes: + +- `'t'` that evaluates to `true`. +- `'f'` that evaluates to `false`. +- `'!(subExpr)'` that evaluates to **the logical NOT** of the inner expression `subExpr`. +- `'&(subExpr1, subExpr2, ..., subExprn)'` that evaluates to **the logical AND** of the inner expressions `subExpr1, subExpr2, ..., subExprn` where `n >= 1`. +- `'|(subExpr1, subExpr2, ..., subExprn)'` that evaluates to **the logical OR** of the inner expressions `subExpr1, subExpr2, ..., subExprn` where `n >= 1`. + +Given a string `expression` that represents a **boolean expression**, return the evaluation of that expression. + +It is **guaranteed** that the given expression is valid and follows the given rules. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: expression = "&(|(f))" +Output: false +Explanation: +First, evaluate |(f) --> f. The expression is now "&(f)". +Then, evaluate &(f) --> f. The expression is now "f". +Finally, return false. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Parsing A Boolean Expression -```go ``` +Input: expression = "|(f,f,f,t)" +Output: true +Explanation: The evaluation of (false OR false OR false OR true) is true. +``` + +**Example 3:** +``` +Input: expression = "!(&(f,t))" +Output: true +Explanation: +First, evaluate &(f,t) --> (false AND true) --> false --> f. The expression is now "!(f)". +Then, evaluate !(f) --> NOT false --> true. We return true. +``` ## 结语 diff --git a/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution.go b/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution.go index d115ccf5e..e288dba3c 100644 --- a/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution.go +++ b/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { - return x +type tmp1106 struct { + op byte + + f, t bool +} + +func Solution(expression string) bool { + l := len(expression) + stack := make([]tmp1106, l) + index := -1 + f, t := false, false + i := 0 + for ; i < l; i++ { + cur := expression[i] + if cur == '!' || cur == '|' || cur == '&' { + index++ + stack[index] = tmp1106{ + cur, f, t, + } + t, f = false, false + i++ + continue + } + if cur == ')' { + top := stack[index] + index-- + if top.op == '!' { + if t { + t, f = false, true + f = true + } else { + t, f = true, false + } + } + if top.op == '|' { + if t { + t, f = true, false + } else { + t, f = false, true + } + } + if top.op == '&' { + if f { + t, f = false, true + } else { + t, f = true, false + } + } + t = t || top.t + f = f || top.f + continue + } + if cur == 'f' { + f = true + } + if cur == 't' { + t = true + } + } + return t } diff --git a/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution_test.go b/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution_test.go index 14ff50eb4..218e84e84 100644 --- a/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution_test.go +++ b/leetcode/1101-1200/1106.Parsing-A-Boolean-Expression/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "&(|(f))", false}, + {"TestCase2", "|(f,f,f,t)", true}, + {"TestCase3", "!(&(f,t))", true}, + {"TestCase4", "|(&(t,f,t),!(t))", false}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 31cc63498d69e77335f1a3b6e7b1fdb1ec577b0a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 20 Jul 2024 12:37:51 +0800 Subject: [PATCH 015/450] Add solution and test-cases for problem 1605 --- .../README.md | 36 +++++++++++-------- .../Solution.go | 20 +++++++++-- .../Solution_test.go | 19 +++++----- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md index 3065060dd..49726a32a 100755 --- a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md +++ b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md @@ -1,28 +1,36 @@ # [1605.Find Valid Matrix Given Row and Column Sums][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 two arrays `rowSum` and `colSum` of non-negative integers where `rowSum[i]` is the sum of the elements in the `ith` row and `colSum[j]` is the sum of the elements of the `jth` column of a 2D matrix. In other words, you do not know the elements of the matrix, but you do know the sums of each row and column. + +Find any matrix of **non-negative** integers of size `rowSum.length x colSum.length` that satisfies the `rowSum` and `colSum` requirements. + +Return a 2D array representing **any** matrix that fulfills the requirements. It's guaranteed that **at least one** matrix that fulfills the requirements exists. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: rowSum = [3,8], colSum = [4,7] +Output: [[3,0], + [1,7]] +Explanation: +0th row: 3 + 0 = 3 == rowSum[0] +1st row: 1 + 7 = 8 == rowSum[1] +0th column: 3 + 1 = 4 == colSum[0] +1st column: 0 + 7 = 7 == colSum[1] +The row and column sums match, and all matrix elements are non-negative. +Another possible matrix is: [[1,2], + [3,5]] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find Valid Matrix Given Row and Column Sums -```go ``` - +Input: rowSum = [5,7,10], colSum = [8,6,8] +Output: [[0,5,0], + [6,1,0], + [2,0,8]] +``` ## 结语 diff --git a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go index d115ccf5e..8d30b4578 100644 --- a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go +++ b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(rowSum []int, colSum []int) [][]int { + N := len(rowSum) + M := len(colSum) + + currRowSum := make([]int, N) + currColSum := make([]int, M) + + origMatrix := make([][]int, N) + for i := 0; i < N; i++ { + origMatrix[i] = make([]int, M) + for j := 0; j < M; j++ { + origMatrix[i][j] = min(rowSum[i]-currRowSum[i], colSum[j]-currColSum[j]) + + currRowSum[i] += origMatrix[i][j] + currColSum[j] += origMatrix[i][j] + } + } + return origMatrix } diff --git a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go index 14ff50eb4..7552afd0d 100644 --- a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go +++ b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + a, b []int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 8}, []int{4, 7}, [][]int{{3, 0}, {1, 7}}}, + {"TestCase2", []int{5, 7, 10}, []int{8, 6, 8}, [][]int{{5, 0, 0}, {3, 4, 0}, {0, 2, 8}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a, c.b) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.a, c.b) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 75ba6a277fbdf5ad80be6e3647104fcf46846b39 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 21 Jul 2024 11:58:29 +0800 Subject: [PATCH 016/450] Add solution and test-cases for problem 2392 --- .../README.md | 49 +++++++++---- .../Solution.go | 65 +++++++++++++++++- .../Solution_test.go | 26 ++++--- .../gridosdrawio.png | Bin 0 -> 6105 bytes 4 files changed, 112 insertions(+), 28 deletions(-) create mode 100644 leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/gridosdrawio.png diff --git a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md index 0f48c237e..44f33e077 100755 --- a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md +++ b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md @@ -1,28 +1,47 @@ # [2392.Build a Matrix With Conditions][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 a **positive** integer `k`. You are also given: -**Example 1:** +- a 2D integer array `rowConditions` of size n where `rowConditions[i] = [abovei, belowi]`, and +- a 2D integer array `colConditions` of size m where `colConditions[i] = [lefti, righti]`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +The two arrays contain integers from `1` to `k`. + +You have to build a `k x k` matrix that contains each of the numbers from `1` to `k` **exactly once**. The remaining cells should have the value `0`. + +The matrix should also satisfy the following conditions: + +- The number `abovei` should appear in a **row** that is strictly **above** the row at which the number `belowi` appears for all `i` from `0` to `n - 1`. +- The number `lefti` should appear in a **column** that is strictly **left** of the column at which the number `righti` appears for all `i` from `0` to `m - 1`. -## 题意 -> ... +Return **any** matrix that satisfies the conditions. If no answer exists, return an empty matrix. -## 题解 +**Example 1:** -### 思路1 -> ... -Build a Matrix With Conditions -```go +![1](gridosdrawio.png) + +``` +Input: k = 3, rowConditions = [[1,2],[3,2]], colConditions = [[2,1],[3,2]] +Output: [[3,0,0],[0,0,1],[0,2,0]] +Explanation: The diagram above shows a valid example of a matrix that satisfies all the conditions. +The row conditions are the following: +- Number 1 is in row 1, and number 2 is in row 2, so 1 is above 2 in the matrix. +- Number 3 is in row 0, and number 2 is in row 2, so 3 is above 2 in the matrix. +The column conditions are the following: +- Number 2 is in column 1, and number 1 is in column 2, so 2 is left of 1 in the matrix. +- Number 3 is in column 0, and number 2 is in column 1, so 3 is left of 2 in the matrix. +Note that there may be multiple correct answers. ``` +**Example 2:** + +``` +Input: k = 3, rowConditions = [[1,2],[2,3],[3,1],[2,3]], colConditions = [[2,1]] +Output: [] +Explanation: From the first two conditions, 3 has to be below 1 but the third conditions needs 3 to be above 1 to be satisfied. +No matrix can satisfy all the conditions, so we return the empty matrix. +``` ## 结语 diff --git a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go index d115ccf5e..be63d4096 100644 --- a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go +++ b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go @@ -1,5 +1,66 @@ package Solution -func Solution(x bool) bool { - return x +func sortConditions(k int, conditions [][]int) (map[int]int, bool) { + children := make(map[int][]int) + in := make(map[int]int) + for _, c := range conditions { + if _, ok := children[c[0]]; !ok { + children[c[0]] = make([]int, 0) + } + children[c[0]] = append(children[c[0]], c[1]) + in[c[1]]++ + } + index := 0 + pos := make(map[int]int) + have := make([]int, 0) + left := k + for i := 1; i <= k; i++ { + if _, ok := in[i]; !ok { + pos[i] = index + have = append(have, i) + index++ + left-- + } + } + for left > 0 { + next := make([]int, 0) + for _, cur := range have { + for _, rel := range children[cur] { + in[rel]-- + if in[rel] == 0 { + next = append(next, rel) + left-- + pos[rel] = index + index++ + } + } + } + if len(next) == 0 && left > 0 { + return nil, false + } + have = next + } + return pos, true +} + +func Solution(k int, rowConditions [][]int, colConditions [][]int) [][]int { + ans := make([][]int, k) + for i := 0; i < k; i++ { + ans[i] = make([]int, k) + } + rowPos, ok := sortConditions(k, rowConditions) + if !ok { + return nil + } + + colPos, ok := sortConditions(k, colConditions) + if !ok { + return nil + } + + for i := 1; i <= k; i++ { + ans[rowPos[i]][colPos[i]] = i + } + + return ans } diff --git a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go index 14ff50eb4..fb9e4ffd2 100644 --- a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go +++ b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go @@ -9,31 +9,35 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + k int + rowConditions, colConditions [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{{1, 2}, {3, 2}}, [][]int{{2, 1}, {3, 2}}, [][]int{ + {0, 0, 1}, + {3, 0, 0}, + {0, 2, 0}, + }}, + {"TestCase2", 3, [][]int{{1, 2}, {2, 3}, {3, 1}, {2, 3}}, [][]int{{2, 1}}, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.k, c.rowConditions, c.colConditions) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.k, c.rowConditions, c.colConditions) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/gridosdrawio.png b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/gridosdrawio.png new file mode 100644 index 0000000000000000000000000000000000000000..604e193a2a651dfb3b1efecf6f8bc976cf9fa4a0 GIT binary patch literal 6105 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 Date: Mon, 22 Jul 2024 09:08:45 +0800 Subject: [PATCH 017/450] Add solution and test-cases for problem 541 --- .../501-600/0541.Reverse-String-II/README.md | 23 ++++++++----------- .../0541.Reverse-String-II/Solution.go | 13 +++++++++-- .../0541.Reverse-String-II/Solution_test.go | 20 ++++++++-------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/leetcode/501-600/0541.Reverse-String-II/README.md b/leetcode/501-600/0541.Reverse-String-II/README.md index 4b1247da7..9c90b1490 100644 --- a/leetcode/501-600/0541.Reverse-String-II/README.md +++ b/leetcode/501-600/0541.Reverse-String-II/README.md @@ -1,28 +1,23 @@ # [541.Reverse String II][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 +Given a string `s` and an integer `k`, reverse the first `k` characters for every `2k` characters counting from the start of the string. + +If there are fewer than `k` characters left, reverse all of them. If there are less than `2k` but greater than or equal to `k` characters, then reverse the first `k` characters and leave the other as original. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abcdefg", k = 2 +Output: "bacdfeg" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reverse String II -```go ``` - +Input: s = "abcd", k = 2 +Output: "bacd" +``` ## 结语 diff --git a/leetcode/501-600/0541.Reverse-String-II/Solution.go b/leetcode/501-600/0541.Reverse-String-II/Solution.go index d115ccf5e..9cc7289cf 100644 --- a/leetcode/501-600/0541.Reverse-String-II/Solution.go +++ b/leetcode/501-600/0541.Reverse-String-II/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) string { + bs := []byte(s) + start := 0 + for start < len(s) { + nextStart := start + 2*k + for s, e := start, min(start+k-1, len(s)-1); s < e; s, e = s+1, e-1 { + bs[s], bs[e] = bs[e], bs[s] + } + start = nextStart + } + return string(bs) } diff --git a/leetcode/501-600/0541.Reverse-String-II/Solution_test.go b/leetcode/501-600/0541.Reverse-String-II/Solution_test.go index 14ff50eb4..69157068b 100644 --- a/leetcode/501-600/0541.Reverse-String-II/Solution_test.go +++ b/leetcode/501-600/0541.Reverse-String-II/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + str string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcdefg", 2, "bacdfeg"}, + {"TestCase2", "abcd", 2, "bacd"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.str, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.str, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 14bc2d3d901d5f906fe1ece3b0cf8b4fb03611fd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 23 Jul 2024 08:52:57 +0800 Subject: [PATCH 018/450] Add solution and test-cases for problem 1636 --- .../README.md | 30 +++++++++++-------- .../Solution.go | 16 ++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md index 1b74444fd..4ccc71502 100755 --- a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md +++ b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md @@ -1,28 +1,32 @@ # [1636.Sort Array by Increasing Frequency][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 +Given an array of integers `nums`, sort the array in **increasing** order based on the frequency of the values. If multiple values have the same frequency, sort them in **decreasing** order. + +Return the sorted array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,1,2,2,2,3] +Output: [3,1,1,2,2,2] +Explanation: '3' has a frequency of 1, '1' has a frequency of 2, and '2' has a frequency of 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Sort Array by Increasing Frequency -```go +``` +Input: nums = [2,3,1,3,2] +Output: [1,3,3,2,2] +Explanation: '2' and '3' both have a frequency of 2, so they are sorted in decreasing order. ``` +**Example 3:** + +``` +Input: nums = [-1,1,-6,4,5,-6,1,4,1] +Output: [5,-1,4,4,-6,-6,1,1,1] +``` ## 结语 diff --git a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go index d115ccf5e..82d1564a2 100644 --- a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go +++ b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) []int { + freq := make(map[int]int) + for _, n := range nums { + freq[n]++ + } + sort.Slice(nums, func(i, j int) bool { + if freq[nums[i]] == freq[nums[j]] { + return nums[i] > nums[j] + } + return freq[nums[i]] < freq[nums[j]] + }) + return nums } diff --git a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution_test.go b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution_test.go index 14ff50eb4..2f4bb008b 100644 --- a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution_test.go +++ b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution_test.go @@ -10,12 +10,12 @@ 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, 1, 2, 2, 2, 3}, []int{3, 1, 1, 2, 2, 2}}, + {"TestCase2", []int{2, 3, 1, 3, 2}, []int{1, 3, 3, 2, 2}}, + {"TestCase3", []int{-1, 1, -6, 4, 5, -6, 1, 4, 1}, []int{5, -1, 4, 4, -6, -6, 1, 1, 1}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bb812fb17f0742d9716eb47921aa46607bcb33d5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 24 Jul 2024 09:10:20 +0800 Subject: [PATCH 019/450] Add solution and test-cases for problem 2191 --- .../2191.Sort-the-Jumbled-Numbers/README.md | 40 +++++++++++------ .../2191.Sort-the-Jumbled-Numbers/Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 22 +++++----- 3 files changed, 79 insertions(+), 27 deletions(-) diff --git a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md index d8b2b492c..9cfd58ac2 100755 --- a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md +++ b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md @@ -1,28 +1,40 @@ # [2191.Sort the Jumbled Numbers][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 a **0-indexed** integer array `mapping` which represents the mapping rule of a shuffled decimal system. `mapping[i] = j` means digit `i` should be mapped to digit `j` in this system. + +The **mapped value** of an integer is the new integer obtained by replacing each occurrence of digit `i` in the integer with `mapping[i]` for all `0 <= i <= 9`. + +You are also given another integer array `nums`. Return the array `nums` sorted in **non-decreasing** order based on the **mapped values** of its elements. + +**Notes**: + +- Elements with the same mapped values should appear in the **same relative order** as in the input. +- The elements of `nums` should only be sorted based on their mapped values and **not be replaced** by them. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: mapping = [8,9,4,0,2,1,3,5,7,6], nums = [991,338,38] +Output: [338,38,991] +Explanation: +Map the number 991 as follows: +1. mapping[9] = 6, so all occurrences of the digit 9 will become 6. +2. mapping[1] = 9, so all occurrences of the digit 1 will become 9. +Therefore, the mapped value of 991 is 669. +338 maps to 007, or 7 after removing the leading zeros. +38 maps to 07, which is also 7 after removing leading zeros. +Since 338 and 38 share the same mapped value, they should remain in the same relative order, so 338 comes before 38. +Thus, the sorted array is [338,38,991]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sort the Jumbled Numbers -```go ``` - +Input: mapping = [0,1,2,3,4,5,6,7,8,9], nums = [789,456,123] +Output: [123,456,789] +Explanation: 789 maps to 789, 456 maps to 456, and 123 maps to 123. Thus, the sorted array is [123,456,789]. +``` ## 结语 diff --git a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go index d115ccf5e..80ab3c512 100644 --- a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go +++ b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +type tmp2191 struct { + v, s, i int +} + +func Solution(mapping []int, nums []int) []int { + convert := func(n int) int { + if n == 0 { + return mapping[0] + } + base := 1 + v := 0 + for n > 0 { + mod := n % 10 + n /= 10 + v = v + base*mapping[mod] + base *= 10 + } + return v + } + + list := make([]tmp2191, len(nums)) + for i, n := range nums { + list[i] = tmp2191{ + s: n, i: i, v: convert(n), + } + } + sort.Slice(list, func(i, j int) bool { + if list[i].v == list[j].v { + return list[i].i < list[j].i + } + return list[i].v < list[j].v + }) + + ans := make([]int, len(nums)) + for i := 0; i < len(nums); i++ { + ans[i] = list[i].s + } + return ans } diff --git a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go index 14ff50eb4..5bd210846 100644 --- a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go +++ b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + mapping, nums []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{8, 9, 4, 0, 2, 1, 3, 5, 7, 6}, []int{991, 338, 38}, []int{338, 38, 991}}, + {"TestCase2", []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, []int{789, 456, 123}, []int{123, 456, 789}}, + {"TestCase3", []int{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, []int{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.mapping, c.nums) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.mapping, c.nums) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ccd61f5213d348f78f9ff67175c1ec978b232b20 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 25 Jul 2024 09:12:45 +0800 Subject: [PATCH 020/450] Add solution and test-cases for problem 1451 --- .../README.md | 47 +++++++++++++++++++ .../Solution.go | 33 ++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/README.md diff --git a/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/README.md b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/README.md new file mode 100644 index 000000000..5e338000b --- /dev/null +++ b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/README.md @@ -0,0 +1,47 @@ +# [1451.Rearrange Words in a Sentence][title] + +## Description +Given a sentence `text` (A sentence is a string of space-separated words) in the following format: + +- First letter is in upper case. +- Each word in `text` are separated by a single space. + +Your task is to rearrange the words in text such that all words are rearranged in an increasing order of their lengths. If two words have the same length, arrange them in their original order. + +Return the new text following the format shown above. + +**Example 1:** + +``` +Input: text = "Leetcode is cool" +Output: "Is cool leetcode" +Explanation: There are 3 words, "Leetcode" of length 8, "is" of length 2 and "cool" of length 4. +Output is ordered by length and the new first word starts with capital letter. +``` + +**Example 2:** + +``` +Input: text = "Keep calm and code on" +Output: "On and keep calm code" +Explanation: Output is ordered as follows: +"On" 2 letters. +"and" 3 letters. +"keep" 4 letters in case of tie order by position in original text. +"calm" 4 letters. +"code" 4 letters. +``` + +**Example 3:** + +``` +Input: text = "To be or not to be" +Output: "To be or to be not" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rearrange-words-in-a-sentence +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go index d115ccf5e..e4f802bea 100755 --- a/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go +++ b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" + "strings" +) + +func Solution(text string) string { + if len(text) == 0 { + return "" + } + bs := strings.Split(text, " ") + bs[0] = strings.ToLower(bs[0]) + + indies := make([]int, len(bs)) + for i := 0; i < len(bs); i++ { + indies[i] = i + } + sort.Slice(indies, func(i, j int) bool { + a, b := len(bs[indies[i]]), len(bs[indies[j]]) + if a == b { + return indies[i] < indies[j] + } + return a < b + }) + ans := make([]string, len(bs)) + for i := 0; i < len(bs); i++ { + ans[i] = bs[indies[i]] + } + first := []byte(ans[0]) + first[0] -= 32 + ans[0] = string(first) + return strings.Join(ans, " ") } diff --git a/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go index 14ff50eb4..32f6eb4f8 100755 --- a/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go +++ b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "Leetcode is cool", "Is cool leetcode"}, + {"TestCase2", "Keep calm and code on", "On and keep calm code"}, + {"TestCase3", "To be or not to be", "To be or to be not"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 06c108b84ee41ff4ab0dac8dc150f254e0f565c1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 27 Jul 2024 13:26:28 +0800 Subject: [PATCH 021/450] Add solution and test-cases for problem 2976 --- .../README.md | 41 ++++++++++++------ .../Solution.go | 43 ++++++++++++++++++- .../Solution_test.go | 24 ++++++----- 3 files changed, 82 insertions(+), 26 deletions(-) diff --git a/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/README.md b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/README.md index 8ba671eac..5a677a725 100755 --- a/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/README.md +++ b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/README.md @@ -1,28 +1,43 @@ # [2976.Minimum Cost to Convert String I][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 two **0-indexed** strings `source` and `target`, both of length `n` and consisting of **lowercase** English letters. You are also given two **0-indexed** character arrays `original` and `changed`, and an integer array `cost`, where `cost[i]` represents the cost of changing the character `original[i]` to the character `changed[i]`. + +You start with the string `source`. In one operation, you can pick a character `x` from the string and change it to the character `y` at a cost of `z` **if** there exists **any** index `j` such that `cost[j] == z`, `original[j] == x`, and `changed[j] == y`. + +Return the **minimum** cost to convert the string `source` to the string `target` using **any** number of operations. If it is impossible to convert `source` to `target`, return `-1`. + +**Note** that there may exist indices `i`, `j` such that `original[j] == original[i]` and `changed[j] == changed[i]`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: source = "abcd", target = "acbe", original = ["a","b","c","c","e","d"], changed = ["b","c","b","e","b","e"], cost = [2,5,5,1,2,20] +Output: 28 +Explanation: To convert the string "abcd" to string "acbe": +- Change value at index 1 from 'b' to 'c' at a cost of 5. +- Change value at index 2 from 'c' to 'e' at a cost of 1. +- Change value at index 2 from 'e' to 'b' at a cost of 2. +- Change value at index 3 from 'd' to 'e' at a cost of 20. +The total cost incurred is 5 + 1 + 2 + 20 = 28. +It can be shown that this is the minimum possible cost. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Cost to Convert String I -```go ``` +Input: source = "aaaa", target = "bbbb", original = ["a","c"], changed = ["c","b"], cost = [1,2] +Output: 12 +Explanation: To change the character 'a' to 'b' change the character 'a' to 'c' at a cost of 1, followed by changing the character 'c' to 'b' at a cost of 2, for a total cost of 1 + 2 = 3. To change all occurrences of 'a' to 'b', a total cost of 3 * 4 = 12 is incurred. +``` + +**Example 3:** +``` +Input: source = "abcd", target = "abce", original = ["a"], changed = ["e"], cost = [10000] +Output: -1 +Explanation: It is impossible to convert source to target because the value at index 3 cannot be changed from 'd' to 'e'. +``` ## 结语 diff --git a/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution.go b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution.go index d115ccf5e..e99da898b 100644 --- a/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution.go +++ b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +const unreachable = 1 << 32 + +func Solution(source string, target string, original []byte, changed []byte, cost []int) int64 { + cache := make([][]int64, 26) + for i := 0; i < 26; i++ { + cache[i] = make([]int64, 26) + for j := 0; j < 26; j++ { + cache[i][j] = unreachable + } + cache[i][i] = 0 + } + // 定义图 + for i := 0; i < len(original); i++ { + x, y := original[i]-'a', changed[i]-'a' + cache[x][y] = min(cache[x][y], int64(cost[i])) + } + + for k := 0; k < 26; k++ { + for i := 0; i < 26; i++ { + if cache[i][k] == unreachable { + continue + } + for j := 0; j < 26; j++ { + if cache[k][j] == unreachable { + continue + } + cache[i][j] = min(cache[i][j], cache[i][k]+cache[k][j]) + } + } + } + ans := int64(0) + for i := 0; i < len(source); i++ { + if source[i] != target[i] { + r := cache[source[i]-'a'][target[i]-'a'] + if r == unreachable { + return -1 + } + ans += r + } + } + return ans } diff --git a/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution_test.go b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution_test.go index 14ff50eb4..fbce658c3 100644 --- a/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution_test.go +++ b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + source, target string + original, changed []byte + cost []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcd", "acbe", []byte("abcced"), []byte("bcbebe"), []int{2, 5, 5, 1, 2, 20}, int64(28)}, + {"TestCase2", "aaaa", "bbbb", []byte("ac"), []byte("cb"), []int{1, 2}, int64(12)}, + {"TestCase3", "abcd", "abce", []byte("a"), []byte("e"), []int{10000}, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.source, c.target, c.original, c.changed, c.cost) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v %v", + c.expect, got, c.source, c.target, c.original, c.changed, c.cost) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bcba20b99e169b73a377da38461eb3c0fac518b9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 29 Jul 2024 09:08:28 +0800 Subject: [PATCH 022/450] Add solution and test-cases for problem 2368 --- .../1.png | Bin 0 -> 26044 bytes .../2.png | Bin 0 -> 27270 bytes .../README.md | 35 +++++++++++------- .../Solution.go | 34 ++++++++++++++++- .../Solution_test.go | 23 ++++++------ 5 files changed, 65 insertions(+), 27 deletions(-) create mode 100644 leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/1.png create mode 100644 leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/2.png diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/1.png b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/1.png new file mode 100644 index 0000000000000000000000000000000000000000..f8827b3bface7356bc3a5c4bde2675be280e926a GIT binary patch literal 26044 zcmZs?1z1$yw?9m$AT5myE!`l}0}KsA3?Vgi_YAF+GNgcnB3%;F4brWYbV!NPC8-F! z2fyEY-}}4w&+{;IW}ki5UTd9o)?WLwKL@3wr9wnNOMr%kMx+V>L($OClYoB(JRG29 zvCVWE_(J!FswkjUjM8tTq2V0*C>i;<`q??U*rKrsEB^D=xhsosn}XOyWd@+=-}n<3bZH-3JCED z@QDfti1LXE11I#X?5w;T|ECxw8~gw6CnzK$$|o%OkIuF}R`&nc=M6%l(%q~88~)w}6)!6fhks; z^^HZ4-iQEaMR`{RF%x|~u)8fx$zRJ`&Bz3*p(^31h7_|yxT$*U2d zH)|J|jfStCuq4b)RY}xM#XuOWXygFV6+o&O$m^QOYXxYjf^{YQ0{mR{eP9mOI!Fz5 z9i+apvw@y6FsP5Ms)Mb!k*=bcfsm8DCYz9gp_7N79@0}w$;QrIz{v}uqYRaFbW#*I zgga=d3o1M7YiSzT_=#xi=xN!BYa%^F)OBoJ>?J(_VUA*29xzQ&Z+R_ee_bI%H!%}O zh`Ksh!@=8E0^;EShB`VUyjS8rp50AFi=2PFd&AnX-f4gB04Bs}!>paDS8DHuzL8ft19xQi-ViRlK2 zICy*6s)8MqAiA3VCPw}cpofW z!dX#5!U5v#4AC~$_tF!$7l&9IDVlhSY5S>3h`THLi;9Ci|Gs|tTk+) zf~tbvt^#5%HX3?{eyUowu7*A^At)GTU}6MwhN}9yi#P$U6Y+Nf1Hq`Er==h!Ea0o4 zl z1og6qx=cymT%q9T z0(`1EcnShvf>6N#32}&tp}iy=ChRM(;EPlP+u9lnsLI zC{oY|?CftVsOV%Mq^RYi0d*4g7E)J27~1HGS$i7*mdWdw*mx;9Slc_v%eyPtKpaE_ zg}tmL9sGPWtrWdnM2xNBssh$}fCkD4Z4cuBJ9S&Akg~H26zS`3?WC{e;_a_)XYB(G zu+ee{)Dy50vh~!~HgZSE+o*^MxVZWYirWYp3WJ43tX%aa+zlL@Y*jo|5Qeoi7t z69ErfLsdT!xQ4#FEnLM!F#sm0tO7Sw)Ix|M@9wd(+Fd?X_J`^~tn8GORD7*{0k3*M zeSM&cx{?~o>b6dXKsO&}M|}-HJM92*ZTmZ`Y=y0~MG->QM!Mo64hFVxcPCLhTX|8W z4HzN@aS^svFo21xN*H-KLZKoC&W;LRfCo*0jHRHhtmder1w$IydWvYlZFB^U)C`as zPWBL_s=BYdp0JU%C)hz;)my|BNSVqAb%?5vzNoPX!de0ef&01pX!x3FYb&^$_&NAE zIEsqNYug2Y4Se7xf}VG&OTo~=RZ`Mb65`|~V(a1}X)B7*fgAgHdn)MxV+-kf`RdpK zQ6(q{SJiQHgCd2*1hmwgjWos7Z9Kq89czfbD+GoRb~eTT(m%_l5 zp!{En_HWh&e*ZhS2`d>0KnBpz9-^s&<@No{_s#H)Ufa&LqmxqD3Q~AtlTs+^Km{+@ zyhp?)KUda`?RgK?^i2r~i>93mrBQX%{p212e$>`2dCJRUU>obdQVKDqz#_e@Jo%z7 zEYZnx___77e??i$JO9*^rOnSvCo*Hk^pAkQ&Nxy_EE~m~raC--B}q=sQ6;M((br2Y zpX0){lu;?(L95h!;e@Lt1S zvxsi;@O@`r^D=)_L-57pgT$B(I&Et}_rOO=6TjcN^)R$QZBpG6T@xGrerPNYu`x7Q zp*e%z0vPoV<+SOKX>=ij@m;^ljQ~;GXBC?pu`l=zJiOiRJ=lEl{&0_g1D8Xhla!KE z#aM~PEtM+2pbjsxa8^ej`rOpEFu+^lu|)1iZM?9zk)S#8ciBdBAlGO#a+K!UkG?(p z&<*b6C@rbjxl`+a#dEI{dA*C&Bd0A){zf|w?_&X))b6C94Jtd9MovN)!IwnS^g?kJ z$R|cT=V`+Iw>TM3#P3^TX(&BM_3HOF$+GC+VpOLktoaSg6ntlgot+*##H5;|ADx}P zEUV4fpr%Tr0XcG>Ik1D%ldtNnY+k3tYwua(7oP+Q__!qFRFZ#od( zbGvP`ngsL_B;r4C#l?$q)aFz_T$N%nuzeR*=#(dsymI>+M_)a1vcxF5=zKsp(ZOP% zO_7`=2P@Y3#)vaE3Xi&?G|HE}!BHO;{X9Wqf$cO?%#xWSK!iZ_YOfaz&koo$n|UjiEet$S*Q=sVe^kQSRd(8$2d!4$;ejebE*~A5BjQ;lADE< zNX+O3TU7fzW~`J4qFUs={&Lbbo{s<02i@I>JbgteS*zbzv`p1kpVJgP%W-=+yywm1 zb{F353nr$A(K1xLW>tf zvLvKHqrjyTeR&G$HH!xWdBv}ao4f+UfHec6!CE6fM#znhPS6w>cySWO*`vVGHPUB> z59flu=uX1;Lso14%JqEwB68=|5;eNQb5z8BX9X!q?bUC;I;HHKE8CvDwl;b}UHhut zflLV+n#fDx<1n7DhX*g(FHU=+a9{K^7FN3aL=iG+%)Kc8L-_Ajf?@8aH=!$#1WBlR&oy1WRB&u<=tax)ktM4o|(S=)b|Cp+*{$=L0y0H z;D>C2svbvINmjD%b>RV6vI+6d99IRG<1^i{AUy+pp?TP*9y9Q?KGLU+;UU5pf~{8x z{#5j9{$;6C?D<8*shh{v_WRt?5Kdd`mRY_^v#3`OZgxk4Ic5NjwDL}T;5RYmMgc-{ zP?lnAQD#9_)_+KQ#_lq36Om22K^H&z;WtFM1i!YxOk-fLq?VMNQctwBCzCSVsU#`f3s%`;icE<(c60J{rEk>sB|rOMAy;OQOfHD3AE@Rc8Ulq4@BwIVWN zUb5-EdD76-gvCu&-uZ)H92U1P{QiFGv$lKYnr){)q`Y_T*=Yq(!D=e>Kgw*zr5*P^ z+fe-uHA+gbfQ#X!klTN)?cVr!g0|1x3C@$w{23oBCl||90?e{kJ+9e|*Io;@pR>+| zw3uYg*my}X&5ER?q;~h8^KDoFt?_%Z(6ir{stNFOy4tn%b$G8^;b9H06Omg=iq{j= z>3FG^GCP?;X6wGESNfC@q(AGqcWiKqI22L`Ha9X!2fMq0|n;!pL$YkrQ4TW!4^v131U!-M1duv@lsOaq^X4k59|VY5*Te|oWv_Y=R?MTqf30FW;9D;1WXOX5Y5?t2+1{P}g2 zEok5WG(V~!FAt+^#VmaKu)Jc2iGn`rLMHJ3&HnYse0!gD?=UJ~fk|antl`41)(`VZ zXaVprKnOUri>R>T*$=z2ns{rPZ{8}fMrFf*@8%TVhj{`iK!{eChR)knvpWL3>YJDi{xq?sESz^_{;*gH!0_XL9Ixm$< zB3Ih_)jylEuvk};RM0%n09=MB_LBN~RBF&EJf`m!vLN#A?G<%M{4WA8e^-W^6TG6> zjJ)D|qRqEE{;s^YOjUN8-_2!isM7^|wBkO8G>(Ab9W9O7nfy=j+K!dKhgdvgFlr+4 z8b}0Z$M(PW)XqN&uu5T^qIl(JN{>R1-5==mE7o9j!CX+b{OuFok@`K}r6b*ol>d5@ zO(&vtZt69t&(bEazF4OGhT}kKQMtd>8e~N`&W=GznX-9i+Ms_>x$x`bQgg$Ws?AUv z+vRrazQN_n*F!fR(`Jg-Utx_jYQ-S?FUmsIUv=vX$e_vFxCfkkF+1t0Vu#+{Q$AOM!EmBy?9^m@y=&OR5 znQ_Fqk!M##~a@TUxYaNImBk^@zthn=c5_|g%lThz*LFDnG6I(Bd zS2@T=N@s}0i^y3(f5_O$j*m-7@tV0=p%bNJh9U7O+=jFtc-USqh_)!e4Gr1ej3?(d ziVwV{{$P9NYXj2F9yNk1;-!0v@gqkN3pmrX{()O{-l{X{>^)l`5~xlIfI<)qTt zeHp3AVaUQPO#8P4n>sR!=GE6RH;*rfV0F1ZSD}~kxp!<2)QYVuUx|Vbw_lRpzxUEz z-NG~qx=YIigOjGTJdhvh5vW-7ncS$>ffe!ge{@9wwH@!okNN^7xiE`nxEUGKT?Os~ zEVmpz8p81xU!^=lx0_`aJlWO_*Ku-E*I<1MEzWdN?)F9sW<|WBqk4?*#&>|g$lG4z z;o<7!7fcy&uYK8mAGZ0TNLzvBbJLiRJ2Rs#H;{u|B1I}$h%l72Koo@ zkLR@0DMuJzVml6ZKiX{-4q$Lw;^~cuGIp31ne*C~oayztM=69!j#8lLf=`7$M+t(8 z)_?WoQbImyD$h2Ak5{}2N;@bTb}hRZny;4dwc|^jUUuv&D(Ql+O%X`*F9iLy zG%3fkX6B)5756hg<})mlyJe>P-Avk-9UlaJzpa80+EIHU=zpCL{)k+_4RV+ zfiRtp34%PqCnGw3hTW+2L9K%>o7}V6c-{LZ=iFT6sOuf`d8xGR+3g?SoIUt<>s(UE zQ;I06$v~udq$tg|MA-_iHB3@Q5vX3`*X5k@P8X#c36)5C^C00&z zv1|ZP${&c7G9WoUrG!qPBpc+>o?q<;8}G-9Cf*MuH?#u@qVpU$v0;_o{w&Xrk4h;R z&p0>nWSn7miu0Rp?g@SFhpRcbu~Ipy_x3|F;r#KrY4YT&&*V453qIDGP9=U^WwD5M z31CG-_k3>=c4XW{eXK=2AEREiwWA)G$`fWrz>@syKqH#h!Jn9&jMo{q9jF(Ij8A7s z&v`91-Bv%%RTNe1`+4-h*_GM$=a1U+hAA0Ya@2z8d&6I@^ek|EjhD%YZx@$L5nOd@ z>@BQ95|_-U1k_IWHZu&Ls@Z4yW@G2yKt7|zy)=sIjHT(^nNCR#`XeZJYv?ESstWTN z>mOD~Nxe1S*Kg(M^7#|u4h7xy=yDg1saepil_eWRAR<?R!|IWP9(*ym9!BVcurM z;jI5B8FH2o8+JImw?7HYDDJdr&K(3O(rTZp79{%yZBW|ELxcV|IzfX&Qy;@(_(l7c zQB#Ei@uDS!%o%NCU^sdDeo*30HQL59UEZ?({>I3e-f2LW=-l)?k(KN3l1CU>pqYIB z8~jpY)ryb#J?yG_7GOT%+4SHc?0mLep+uuF#)J=a=-B;HQ@lQ3rK7-zta(l>Ug*im zLBuP=kCd5PiDUx(MGOi~TJIhTW7EZNJ(0hWNNicFXvH0PI~A8m87PowMEbNfdx3bg zs?X<9f%7me{Srtak!x#PLHfq4;8kDRTNg*|@?W_+zZl+$=2o9CX|T>H&zWz+m?UeA9O5Xb(ZHLKs-JcUf&)1iule!ON{Fv7^ z*Xa<}@Fb2>1vw=_5Y#CyYQu7!FIR#}v=sgDkReQLxy!@bGtH~SWb+Y_-1^@66>Rhp zh|ZMg>Xyoc_I$9=?zL+zw`PtPtuA2)5*$Gz15Z&mHEBt`f^A?z@gBKTXUxbzKCejt zcIWKm$|H00jmVV5w6N19R-0>0n>w*+qr(GPo!>v3py76Lza(aQY2VYnOGfqD={N^5 z%Vf7}c5Qs6%tTOEZx5U-q^;O*({u7JhH5ePBAu?N9`>{mLH%g?tGEb>R ztmW~X<&jQ&O|;Mw53jPSBPoG;W$ya|w8mkzvmYKl9twfkBv_(^N>%PnI_i;&D|jB| zsA3jBFv110lOC?L#1iw2_3r)7hE?z z{|7r`HQp-~UMw+~2IAPjPgF+o_DeFj>$Eos_BuRl{V7H2Q^lbVbVt{gm`AMi!65ut+U$t26xT{ipw(*hBACh=FhMYa zHd}6XvTu>{r_diqmNz%mpX zh;fuP_;n#*%lEBtYt5Z0Y;x6162~^oY+Pcge!D2rT2ja^_w!+!Zm8r#dX(V zCk@u39NUa`dS@uhs0M3;p#1j_-7+V`lc)+XaLv^HXKwd)B2nNsKb*`;B$RtwF4Y93 z$WauWCicYfqRm7wcCy{{w_f(&Yt6s!yvT-3<Y5v^USi zy^W<3MAtaTg!h#xdoJl=lukmNtmLTQKK26_2^y?B!mw|wqr({eahNxM$X6eO`mKrz z%r#imzPvcD(N7Saufsn&77S@q3lvIxukTqOJ<@)#Gy8}f72xaeGFuiH_-&chkfbu0 zj@A~W+sL@jGZTRVfBjL)|B)ek!bvr*+Z@oU5-Qb_4^)*M&4vfht-*D9L&L!Wi4H2+ z2omRRa2~ezbQ~#jHsZIqxGxK^)N#8uNHhPIt;uRinL8lnTA)h zYp^;A$t6t_2Tx5GfmAnaL5Wz(eOh_dV}j%;IPb`FOL~?(c2{F|ZgQ0EWrl}twg)ASIK>(neeZzA&M_lP@PP&HRUJ`EmJF~QoOmkg z*-UHRn8PyALS1L=c-@^}o@2^q1w_TN2JRPvZO5Q`2yvGdv1?&u{*H z+?yVYi-e#bln`LKQBvh`aufE!ygh_vnHr;`SC7w>{akN|o2{ATZ#vj>%zFT&eGPq< zec55_TX=w*Tj?Afq2m*b00apQ%5--ox2=hq^5({aT8b)O^DXBLaXKV+wpK~{6Zdf9 zTW_i~uVfENeoA9($0oyf_8y}*w^FFp@S)3)1L>wO{pyw4)-dhMrbY!qZP~hWg6G*t z6`-CsVWqp@z<@z%Yuof2#^W{C&vN_6|7q*1u%t4WJNd(h2QJgjs+o_M&)e0L*&UW< zm>BmLd&;Z@-Y(H#;Bs&*x<wD7BQi|OYz z>HgX%`BeHW`*B=io&^5`Y??Ps2uX%tX?!`WUN4pfR%EWny;dJCk9mzcF} z?_q%HA0YR^=H1Pu2bv4mIgT&mn^*)$&gevi>}ZpJFSUg*+@_^Rac_>UJ9$B;jmC0_ z9fX6hqKum6sn7#!0I%S??7IBmqSsi8jP2+cq?ncN zCnk}{(1{a9%C|GRPH=cgJQh22T4G)Lek3h#CF(^++2^d zBauLJJzT2IO=e+s9GYV7{0);(fhFl2X$-~y>XCp`5#PrL?jVeF2OzH4X;E$$?{;bC z=x$j?Z8NFN-8Obma@ihr&Q$QO@-O!^N8^>?h7=XI!MWOCp{j4!M{XP3BN$KADKR3q z9U*gOPETk&P*5eqwx=$* zDUaYF!7lwFy4~WfGlf66*f=lhw-XFCF*MWVmn$4$I7T|VQhOd)69`j56*g8kda~CZvL|apR;g^y> z%7!hnvu>I`xxX@KtBR!<*mDDeIP@++!u(3<*7{rDwib#K=1=AqJL^_1Rx9hvB3)M| zWJnm4W9yc#sc`L2$xW8n7T z={*<5`0<&Y+x56+9}?6X-R>+LT-gY7bj3Ki?)KIKm&NFa$_@%S2Zjl9^zcJn>4&Nv zw=dKaRU(72u6OY-S8j85E^PLRsu-5y1;|wy43Q75aBm=&s#}x`EtMetsgdi|ait(& zS=@c}@0zDs&oSibm(&r7j%_-tZ1jtJx_8@CYB@2N1uN%xJ&Or+3C{(sM>5q;zReNe zD@#WeP)*JTli^>`Vciz}Y&}!ER@H1Ki+Mlw@sACZu&Sj)PU;>L{z}C{%+Qd8FTo~a zf0cv00kd}RIjR7sXW}FI#3NLc=`0(0yYPfK-q%`>4@pr?)@DL$Qa~?-P9rH`CrOTV zBeP!cC#EK&{q$+L`bE04LNCwx4-C0wV-70*sSQsjda&T;X^e%6zng2}^Y*`=!w#{FQoe<9QlUAv-7I_;w? zaLNT&1^dBq%U>DA&XdOm3RTR_m*>Q7V{>C!cEA7UW|v4Uzn(Z*eGpg0yC-~2mk36w z(W$l4!)JCU>|LViVN^Yv?Rmei(_7ISFuwuvzysaAbsVn?kw=*cr9xW0OZQ_X;@34o zZg=T)cqs!li$O)LIhH+c$=T4m%`$|XCp*VXFdr80g7ag_2F$r!tjiPSc)`Z zJ{Zc@XAX|CYNyoAcJ;4Bn|Ajk5xQd$`>TkulD`szLM%&kUaL7L0=A=~_`3AzcT3tA zIy|I>kPZK~FNAK9Y4lYenBO!MPI84jSq!zJoVLS7XtU}wBAurm=WD^_e$s2w%{wW|yi8 z1pQhcC&=v&0AMW&-FY3y6;6G}L-6`=Hzw zL%OGLeSPp|>=Bmlca*2icNL)B8kCvB5&V^`nqexA^i0487oo{&s{KLH<+q@Z6KUvb z>M(bL(>s$7E8H^DWS(g(q+e=q8TU%1y9-%(AAdR8UDUoz$gskK-rvK$-drrs_UJ9F z??+g^Qzn`Z{Yr+9z4Y;8>(3qm9v`x$r%Q2)6U2d(sT8Ye>BB7>0LaL%|8h#L)xaof zh2vU%PHT*2taCd2)BV|k#q~c==*`ZmkIq-mEb_C$J`rR%WxL?^v)Bz1@1;U|_u6Id z=FhE=Z@P6}V_|pxLz>_BPa?JHGf3YzzUi;@ZD=hjgi2R@sRX&(EmxOS$X zM2bpxl6mh>-S0aY51TBZ{PZe#o%(e;=w@)+K_kdlhR@E1^97_=|74`)Om0^4q~KBu z+Dq@XD6gc1z5M4?nCI7qUh>ha7)a@2s2Q0mz_vuFQ|6lU%I^iT$6{XZpY8D|eV-a08tIE= zQ?GVik&)io2m$3TslSx{jYh1cMP1{Wd<5Iq#7B61sKOiLwTQpnpK~O8=S4c?iqMhQ zcd+OErA9BN9D>I$&UA05Aog>`FaKYD?n75|KhIJZ>vFL`%(>_Nt_p5eRP5jF&TpCyfo_6+? z_B)YnZ?*@C`i+>aL7-p4R#N92e_|i5c=)(Y53u$b=L<`t%8jZpS{o0=BtAl;HZ&IG zS#7|%7UP_!_o2@iOHVR7l)fM{C}8dz8gLL}_7%ZsQ2}QXq&I*KJt0={sye~s8;jMX zWQrwj!O3y$=IWom81{WLEzm?gW-Duwd;EvqUwcOL0Ak8NHW;4h=e)KkaWUIWO9bHp zgY2-~R(PeAuc?a|NHLjzZT zzZIFw!*!)2FPNKASOvozLt@l1%h|hkp3j<|Y)|MVL66rb`IpZr)@KHZ_$v6C-g+Ax z3KviS_qjpoL)V8I==4BxlqaUv=-CAF{8Pj4(NbTA$HM{e<+3PMh>l3&D-Yb|5JKBR zaRVmpJS?duW0OZse&lbW_UG{vtcGfZ0ffq!w81!;B=2r)n;#av_PEOtfjv?J8>9F& zoI@mur%Yd%v}L8R7u&D!Gdh;ajX?7!v&s|{*GxsH!IUG?3xi?V6fsn+9Nz}tJ(zfJ zEbJ4w6Fq-;wufAZw!=(btsqcv27Sit&;wx_fd9kSBz!NLB5 zaUD_;m%EGjXQjnJol?wkkNa(J{KvC(!iU$~A5jQPBsl36Wt`>!tY^08{>L!oPk9_> zAbbMi-q-fUt67N`Ic;qUO#sm|kzVT(pXOHy^=$Ctu%K?6F70R~E<^+z_rPI=F_Y56 zs?GnRGQHXce~{?)LNMmAZQBI z)37$9-(OxnqE3^QCHys8VKv(oE)jfAPunWm`_;D}MY_S2DsYXl}0r9;O>(TL}G1IyA8%JxAWCBv{eWqMVNdA~k#d(uX!YYk%qr zJEr95K6+lp%inyL4LN5k>XLn?LStVrR0PO(AC0U{Fg4;&1)0rxl&s(jHOP zQ3*uu!K_6j2bmtNbZ*=Add%f)aK4Uqe~!)s@m@THnDwBSX|sX3NeSuW+s1I*hS%<_7T%#$0$24{cAAFt`k ziPqK#tLvmbhs8YXiXWTYsSxPRAIt~D4B*xLgxs$^2~*A5g$SK62A=CZZyuA{8JnnH zj#>1ttr<@YOVR%Z^3&gAERg0@j8i7OLtJ*%$YR!$_o0y9*FUc(m&V<9WDlZ~&@6jY zIY|;RCN?w}o=Hm4X}33^J!6z*-g_5fdxJcNuZ2XsO+tY+*tF156zT70*c%yMCHL(i zm-{wXZgsGk=eynwB_Ce~=Z}}GlD|$#BfMZGgjM2PAC0@-zu%0@)bTso#jX3VHWW+K z_y@Yj5|=!6Q@$Q zmwt)Emx8oYVw0Q^%&p*{>cR9^-UI*DrBD zs%o>z23^Wn|eMH6I+!!qC2qhjdptxq(%`5`E{C|uT29Q^np5m~_(sF$T zv46J7MzXdd&{>op^3LI2-ALU>{#vodu$eh5#Q~N4Trg>7GJ6(}PQfT(kUX<-IwSac z{vw7g=4k6^EucdoMT2#(-uC(sQ<0lKHo9ASdOeFuBO@AC^n@)&?tHsm)Sa;^NRl{i zJM7YaV3*)1h^kEjb z*;H}f%eCYUq}0n*x`nY~tm7V!InM~kaDVOK8*5cUaCdVrAqZ_ zv;7*hqkVbz^;GgtPu&L0uMOX?F9b@T$vR>Qc~V_{sz1B9#tS&>#&thU6uqi6K@~i@ za*rgmi!;Z6a!PV^eZl@V%d6#6%9+7FxO@ItVeQ(~=_kLSWo`*ZI#W?cItz<&?0}Wl z?lY>qf-F7rXNr~XV^umq&8M2<)TZKBpKq=J`9DVc#P2ugfTfdmqG7)oR1KubX2qyw zZDhu)S#pw@24`NlYzL^lSJYi(d>t@9dIsUCZ+q6S7dx1d9YjE&Hs$JbSik;jQ?LML zJMN?D$$Hp!3fjUiYALJoA)9%U96ZDF>na3G3b{V^+%&rM6=$j1HW+HaTz!pqdOsuw zx|bntu-jZ1G3@8WN>=fTbAMLEK&gOMq(z&pzg#Y~tjrvkSPmTE8c3kBv4{j`UIF`A zFE;2NP{L|6>&ksV6J_(uhgPe5#;d1}(*bT=xrU9js0il<^_$Gt9Zx0S5989TSlJ(s zTg;bq&8!PTEM|%KSZd5RL$F>F=eFh1e?rKF15jV=o)AsNs2kMUWhO|CJ?Ve(2jcy) zF4u5ZpWW(x*fdl!ra9N3#{IpxJ8%5{7FktlJY3uTkd4vxD*#IUpYl!a!S-wAn?mIB zhhYpe@(PNe%l_DHhwtB5=uR8w<+1nWb~OQAKBeNfe*LF%B|Q+wyU|pn2z{P}V*Reh zlLx&3{ViNGh}+I-t8DNEp0ztkH$t}clOy12kN+;g%_yyK^GMWKlVbIXJ=|uAb8+ye zK@)0v(F{5V9~5 znD{uA%hlHbur4@kDg$THkZI#z#)5$_r2Q9;-=5%fpc{(x4wHL$s_Wa|J2#BukeTk@ z(KWrn`u-!as_*AHVvX9o9Yjtrs01Mk`msRf+(;hu4?*#(2!Wdui+lX4k?|SzAW>G9qDI%+@UhK(Tf#Itm;0G1_#2@5L+=N;h7$OiO zuRXWj-aU4mMjvc(h^|yxnIk(XQcj zHLzv?2#l~mbPK=71T8F1&TtYwjAJ+L=V2Qy}3E#hCn(O_n7uD>81|X@&`YSNE2TCk}>izMbGvmSv zPVk!S@k}mOrG!b-)CWL`r;ChDxOD?xKdq!rvbxrY0n7Mw=h{2H@5Jk5jy#Dx)GCjx z)eFA2|AZ9SKy`svshJl51aU<6{PQn08GZ$e`aUAyDvD{X>IaX;n%Q=kujX{$1q5R6 zOe5uc>$W{+Ucr)@8w^d1q6S6FJa_HzTSl|O?W6O(lWqpwm z`dG1ww$B^0{df)CBsK1Pi=i@EzVo37RBsdzm+!qQ>@7!_2qV)#7%%b-lI0wE^^|H+ z#v!U3j+j*4t-8EirK0Q2Y^B8l(nPrSBNR9D+g&dwV$bc1H9sGyEgqh9sWsKR*os4{ z82;otS?|fUg5ew2Q3o8~{(~F>_wtzkIjJsL51>t^<15UW{W9=e#phV#X0U@6l$C=k=kDtdac;} zKj|Y2D-->>z59co)#YDlbN2hrRxa5c5o#!AnYLWTm{e21wCD#I_Aw{?_asb%klapj z!WrUg00f%1ZT6K^X7+i0WL`mimVoZ3wDn=thH${^fF<46Q57`i+@n1$;h!Q1qC-b| zNEccX&dT+zga`iN*oz>}dN*WFB07A<;{4rESG?^3lq#De%0ts-|H7gr$AiJ}tj+CimYl<3!hP2+tSjC$3XvWnWIv7dH}I&opm*kY+hCopv5%iWTUZ?J(gT zb3nGf{`zP>O#?^p%NzE(yYqd?=jGFQ2tA^R{hR|0oCQ`g;RBUYx-@{PVh)3r`s>MJ z^`Ab_>(yH+-D~f^S0MA+{!?FJP2;e)8_hyZI%Vpz9=z1wdfG-qR!~&pY}y22VSR34 z$^>9bq*LsP>40k)N_$jWj|2bQ@BU=MMs7w%L;r^)0Q;WkwQ#ZE*oPgo|3ZGvXCA%T zN`j1cWIeyVzW>$@mzJpup;H@HugYq-oIoA6E!R!_C-ErxD0L>j*(aeE2P;l_B`5Jm zFr~w|ciCeSRa3EVe~R2A(&`bP3j^Oxhb;MF#nL!uG0b&wHemLs%`hfzEhjwfAcl}+ zmS5TAr4afZ!!tj3?{Sb$6p8FK8!RTH4Ea|3Vtg04Wl_`v5iQyPewvc*m;hmIViL5` z`hRm^k`KZ6LKS@%IW%;F>%rFT%06SmL!wPRQHiCo!nv2v0dO3TuYKxLtCxEJcJk%E z925UODGGeS^5S!JTXRUXIe!yQ>*H4Da!pwSrB1!xfYUx%`Dx~%dL)4CU;hRb1*hI@ zf3O1vW7wU#lUy;u^$LhpOf8{A@uXPB?t z+>C*959*VrqSlsnI$&-CePbhsC$@Kbs^1znD)H?-6q)paR4dWz7g@BF0|ck|FmRz#sY`k~ zB^yN{S-V6~i>1yHW<7_c$PaQoJtnE6rBcV;*Q@-;&*&0;_uh|3MqAhKOz4rOP?hAF zEmY?#=st29X;FFT(A}~32tA+8&UM%*umRJR6h(Qc;v~!oN(x7{Mywl6y~k<$?+vuC z6sC3W-GOIB&Gf5w z27k9{Y|<3xk4?_SI+*4z|Nj=^_+QG<*)tTX$?Jfpf}O+QgSzO<;ytF^?VnA)+lmzz z`$NQaimYO7z~BNyt=y0I1>lnj+rDT2n=AC*xpZ-vpJxc*2#I;c)OZv=WN3~w4hU8- zIhQjkGymde{RWho>F-8^N#uW4aJa}l6+Y{Fz#FtS(ZWmH=zx!0`QdSPDrEQgqfDQF zGw0x7Z~dq3!44mE>@?xi<>HndUR+|hJ5O?AO2~8Rxllw@Z~p~Le>z?Be7`-InOO>F zvlgyvu3IEto|P<2+tSoC(k%G&9bH~~E%!V6cdKYB`Z@Hrl(qoQ6Pxq}M3HK)sH=(& zQ15p}*0xq7&SjYKoT#ELS3Gi4qj^S%r5j`Wei>RZ3nei2r;u}ae4kR)f4#jJn(Q4c za`ZDIrnPnT?EBsVTKw5gSJwn7<@fKL9lnHxed2QFu>ansR@=m{mXwgpb)0P-uQL@F zIh-dvW5w$gMLb&?lfbHT!Chb`dvl-?E6fbM^Fd!CY46D;j-Pe{O*DAL-kYDk!1@26 zE=@U>Pp)W5H)^0KLpF9Sst2X%68@ZQdhRPklO({M@-GwmU9ZK}1DydCc$ zVf=n#r>Tdio^+yx>djQaqp7KvAth9{wz-#1#BM(}zZvS14!bW?WGQcz^j3!iPdU$# zoJl`fUFfAF3J$tN^^kQ^KAy>8*jtW^4!&9y@OVi7lGvb}!66(%;Uk-;LsuVXbh3%* z-i|-M(ih`e%U;=y=RgxGzKll2SN`YlY?iWB&y@s)ai~I3=IKn(pJh4&PTOoyxuf~M z_l;ahm?OdWPlJ!~`X6sj*S`d4Ohmq=-B+Y^dDg9kbKaj2Mki|Lp+Ixo>E{a;F^q*l zTc8z^(?rK&i3Kp~m7lXJJ!of2#8BG);kU(Xxoi0RK)pX9&CNUuMOyWDm;&E+rfSl0 zWxk#)Q)P_4uhi%)cdvV4uyVB=T}M%Hs)^$Ux~aZo8|wv#wR4>~mm$444>Ovu0^Q!= zQ6uevm(+l_^l*N30mGxs_p$-QgFBm~02&Uck_Zscb~#)3IM9ttkDn*yHwnNhr`w7> zRB=J8p;52eOr^;=CQZH=(4{+0+?p2E6NsoFdgn@_$tVUJ7%l&0k7eW9&!)wofIxu1v59-POH0z8eIxt zi}yz3bY8F+V!`rCl*T@|x1%!#>*uNZ(<*n40`95K>;4te8@;L~A__PMi&fit7VwUd z?sbqXT*-s&t;y+9-s1z)28alkb`Rbh&7FZz2|!tVBUG{N7%vL_`}Q8$oe3qGfMr%*Jn0Tt4FV%pWp46KGuNi`>fmSeF&Q*jV&}|;i!CW~RkN_zM5_BT94xQ#e zmZ=!V+q4N*KnJq2ltUF(oGIl=;30~8{=-(}&Wc{A?^mQK^!f>(y=GgM9Df>35Fj?! z1Q4qr;QE9T5KHZ0uBCS;_PrJ$mPCV2yAKeH^Db?Y;!bR7G9VU9??uU+w>r+azpCb) zUb(b?1=yxXOE=n}Wu{Ht1v*(tBG45B+V2Q-RX*}}GyozH-ts$IJ?7Pa&>bD>4)GMS z0vNE@x}vTQ6#tX%c*lPVW@fZ9#kx6Pdc-J;COr@)6 zPZ<|pXj|J8Rt^ppUS6X4`T4=Iv4OZuDcuGn|2rHag>X`q)wQ)yyOFoK24#j0v;SXd zXBie{zjl2^Qlv|zM`Gv_Dd_=5LO?>gl}p`;{L?Tzrr$jF;wEF1{1lHEsrqd~Q|D;?Ta zR7DF0u5*qBKYNW7r@!11O-?c2?O|v}&I8P~)K1mN+s`Cb07mnDmMoSy*3AJvIW8-s zj-s)QPiBa-_iRazCfl5}>h}t~N!sGEN&RDcI$S=Sc;V;%QbcU5qK{A8Kw`7QS8{W6 z^R+pogwM%NOwbLy0u!VU+b7HQYnkK(lCC}fak#JtNU~escXtiXd|}xlDgyDhekv*^ z+I>B?Oh#;wbI_%};Wlfr0+<^aR*;A_!^t&~`EInEVB24gbex;AyK~{Z$D;gI8h_5Q zJ(k|g#13g5dn}J(liAsi?Jte?G|DQ+sP>te8B$WxKy;PiyS_d=6B84gk-Q+8Tabq$ zPBSu2PP}z>buQ~;tSqdo`872fBuduS*0&g?=uT!m8Q(|Wv8-pO&Ln+wkn9C1rB?*D zq)0X2|H7Xfj9#&x0??D9lO}aFWzoH6eii4~_!LP}bOp_nFwp~VCk8V*tT(1hE{i5V z;9WVAzBRB5pYym_FOR#D3P+ohBxGb{_#`AW(4KKcD{?BTSN;9at$CEGSKFv#oaB$& zY-$;y%<^Gr;*F0ks+3v&jeH_l`FHZ^bDa3bl(DNV^WU?}Iib$1p?9Oa=T#8Ct?Svo zp7D!=voJEVi#j0RDtu3-r`BynnNHHDq2hCm`MbRlc@p#SGR?i?<7B$d=;&ML=ZBwu zE`&4g4e_D0hv)09)jwp3Q9!tZGMHMgU1PBP)eC^O(Pd7oPcL=hccl@$yaYLG%oAPC zG21NB-x8tmwBLI7E$bC4PD>g^TvC?aOpE?0{@Nzs|6qj|S{_zEcr9;FSPN?`(VUA* z!grW$qf$xb?S)gYhuW?)SPmv}q=~wM&d<+_j4IHrPqegZ&EMhr{rGCFbHX><=JAdT z(GiTt=%?{SjDi*(bbt;ZiJOt-`T<}6l03B+Fu$b z@Wxcw2L3FGFzDw`uLTuMA7cO|1pn5p9zwp3z;dn9LDnY|ZT6GZy}rB1@SYyXf-opi zWZsXWyL*i8R7H_R>Gg@3`V6%!)VdUd??e_PgLAo|{^8-PpF;^?o_3CY@!u$v_3WYi z*D5I1bv+b$V850Pb&%)0KMf!9D6vM`)6=u#60?Z~2Un4$ckI8X1%tt)5Z~|Fo_mW? zd8J0t$fV9~cXfG!s&)7($c&aRkFn5R9nK8@^{3#76v-moHzIE8;t%ooF#X@mi zZ&>|@g?dv(1xk2b?wgRF3gQ;#JaTn+{Mk~6qowEKp0D<*T7=#lkYrF#b1+x zk7%ZNH59Y*uh~S!wyF9H3S>atKYeIa1{KJzCBl(2z{QP69$mf(cdyS%kO3f6L^^N! zZC`5(%7plnk3azHzIT?+>+bd6;r(J;XI?a->6q&{wE{V;G^c+u=Zj#AtG62~-VvBY zpe_wcMV@9u-R;k0g>>j9rLI@_K=g zkj-<`MMXW-6dJL53;mwt&(leiGX%P*9GuX2v0zM*6F=6S9KCqR#*XU4@xob7( zEay~BEM?5!basDYz|`0bjgSHvd`4^#X|ED#43qu_rGOKOz5f0IpS1UZ6|>0X4U&gU z-<}}vu#kgDF$MYDo$?au+5pmID60x*@XY}F8WFvVS zc&tv*2D!4@xyEfK1?>mgcN_iv9Fv*9PHw{M?XMT|$p(bDBiSx+%Bn)EFv3or zGnH(=S`lt`si>$}=Gn>Q0rQbuV2M*tJ41qlWFs*U(HSXMzz#N4w)1Wzgc1ufdrL;7?`ReC9`AEaM22jK(V>La}z{ z<}Nz+7HdWx0qG-aI(wNsfc{1GyrG%PmOS#$7cUy4-JJ9yD%V84-;MRXE62pgM*>VD zZw)y(IQ9+?f4w>;VPODbzkJ)?+S5LZeCv5@zK{`YCYIL_GZhU zr+dj#UtN>N_9TAaWgar(>|%P~ZU*|`j_tx<`xIGWAUa$&zeZ7-keGC{So__>J16^u zd*_ZT2^~HCv(e_i*{Dq3s9Po6oXs#UPEJyP(A^;u!`LsMYlS0s7S@BrqD zI;ha(INdbJo_G-H#yx#{YmjS@zi!AX^ZPhwyH1#zsnc6L6=?{-Y88G+gY|yYzmG=} zjWkW+qZ=G;SUM61n1A!Rh`5C{CX)O+H&SLWtasuV#e$wb?+hNYP2HqScbC{q{?5Mx zcdc7X!Pb5a+r&Gxh%+K-z{XPJjlB% z4SPsON4K%X=YcoaJyD=QC@LXQSXNe+2u(!vm|HG~@3|dz=RIC3GO7P~`j}2KDD_f^ z7U)bE|N699K1!Eo54}OPHdR>pXsKwUL&S*!0PXpi7sVRv4boGU;A&16Cc~|fIDDP4 z{_Q7sh~j42SY;;)ObcaKVsXhxk&OU)FjhP?3clv{Ax%IrAp&d)fnaxHHn^Bq6=D^Y z94XVFbB0(6=jk={XB05ScxO@Z<_$}&bSKK$u0(I=#XdFZjVg)7ZZfauKW;Vru;=N3 zU2b{5@v)|YO`o=#pzz*H2A&R?D1?L&IdF>byky&EA{Q(e;j^K{;Bkobc4lE%vtZNv zv^kj%Rn(;|FNJYGn`Xs6AI=1^OW@H;eGTN(eJai$v2CiZ))hr)0=d8(J60PCuRo=B zx!(ZxW=ddBG&)uU1N(t=q5YLq(~W%PW0^9xhtC+L0xlos1YCM=eW{g4kSJt+-gLWP zYeL}NLI61!u1yxrrRP#fF>NF9-e0G2-9fz2(K}k3y)h(hLd-b-+~?=N)omPOvh%a| zKC#(ar}*beP}qvyypd%!q!{9Az62qhSV=lGaQB~^YZ~$#{I?~+f$94 zdZp^Q#1&+_tE;-lQ^1(X?=&OITxaBPL@6JO#lXPu;3+(f%Bv@WEE#gp?ffG2W(2U} zd^_CRg!Okn0p8mWVnX}5`s(v9e^{@nz;R&!2w6wxOqH^{l$u5)_X??h@}{O06l1LM z_+qZZn<60llF)kTBlG%}H%kwD!LM=)Oe=>EhSeEKMW}0bn3`GHG_mlJ*z4r8Cr+HC z7+@`M;XN=g(7IJqXnJw|`t=912KxGUe$6i2hD~qmjN7i5KGn`4eK!XZb93Xa&c93N zVMj_yNv+Ma3PE4Cxlgjv89Fj?a1d-yH{;>Bhy%mFp6uVu+4ko`C7>+}YHwM%(w!d5ZD0G^gQ~dWxz|xpXoRDty-VdA?b>}7i}MI0VD2az7_j)e z2|*qp8#O~cSRBfF-f0p{rC@5dc&@1+EE_ddMv@F=&>)b%x8$23m8-?p-FYesHX zx0Bwz8@aY-levr8`dTk%)SoV7U4e#el$Y)Ss_JHrm9jISl_TKrpm(hwK2v4JBEk^i zj6OIqx(zd7JJ20^4}{Cy+!y1VYrXFXq?zwYQ!TZrE5)m)E$*rGM}{RHtMn!JkGN-sx3T9>EjKw)@{N_ob%szFn|yW!pfbEy1qSZj zu;UFKW=+t*X%B^Zo*M15bDLs=A1t}@ti;lk%1W*jUSm6rJwV+Cb~J)T^pHNsRyqhhvC#$S7=p@o zv8jI%W6zC6`KJC?`_29V2pOml$*5mzCuY#(WV@xEctY_vY8D2SLKRamsLkDA-IyE^ zVBK!Kiof()UAco#OpuZdfie_tPChxSIoa3lh@8<|ak~(Puuzgdx*p)sxH6PV=r;6- zt$?uR-DM~}RY2Bs*f;9g(ejm9j{&E{6FB6h;~9?1Dz7Ze1U7-8yg0`g63Xnexj|k= z2KN**%AT(*-5yzh9TCx)zwp~I*ppd&4Aw-2@lN)ZCXB|-g!kpbjL?kucB9V5nC~a{ zN@fFztZxOz&QA|(fu&gHyJr#5XsY0j_9lm~!GOw~{KA}ga&HS?K3w{fBMlaLa+-K2 z8#(iRhO-k(xtfeDnp&3dG`B1)at?k?+ZZf0;GFN6dD!vLpO|=CC`&712fEs^FNhm= zn|qT4r+D+J?T?ZN-aSccZpE<(I5dKVnp-chG#6$7{Q|uMhi`SBuF^_IFnTYO`5g?f z>!e3H#-Ji{Epnk?_);w6ON;%P-sYA0yVC2LL6GH$=ZI=BfQWr^=O~obG$-rW*^^W7 z#sQHiE@t=cZs3$~F1$4czH<_P23AnsI6JwIc!q>$^<1sa^XF{+g(@O#*|FVC&hxxp zIRm2=InX38B{`Z+X{R|h>@pqoMQD(Ny7Wl{2pURRdL-mtJeP1=&_^ClzoHschBH7#8vr*`KAfuHps0B=7WMRL${5lo zX{%9(UPb&X|`$+sj>jWx^AQ z^tvCnP+^1E@sH;(mg%uQZjQY>-D31A<@ zh6?hg*k*#p-BXfO|IlOmqbOZX-QceXRA_t+sRoBxB)j+b7*Cm=!fEgeS+(@M;YJ$E zzH$ZB`xerKwou6l1#;Dk8&Ut^QM@l8>US6EcD}~@T z@ojk;N|K9ltz}DlGJKLg#!94kJ>2x7H6oOYqjxm=)mjXjojg1m2hW;yph@*5B2h11~kd-mSPEP+lE?zcbU^K7xq|x=Ccc(d6D^e0TO%EW{4_vXc8$%e~ zwtZ%dAupX`)E*1$C<7Z9#VUS%xYil^BtJ{yM16gKqt1PIjy|cz^;=g^T>?IRpXLIO zTN+?&S8z9~1Ure>-X%yM#s8iAVt&vqAR%Pf-|T+A=Ng569Rhvw+W_GU&ImU*YF?)v zaE|JBTbmr|1aCV35kLj%S=2j_h=<~y+tEPPn)#Qt{NU6aBUBwEeWJwF@JoEkWL^df zrPjfEX|BZ}<;B>1)0~KLg_a}bV5P^;J@b5O0(wgY2n4@zmSYDJJJ!}F`pZ(3W2hM| zR3hwi(*d-l%-LT>c8)RG8)%8N8Y2Bun!IswmWk`nE;625*nLLWwlB?1kdfY-2`8du z8&~47}ZSx`{wp^v4fY)c8Q;`21XLaK_wTj{>^B!Tx!sil?wG_kUt$!f@XH zK|tI;1H}EtttaMK^MJSqI>o@~H~KFO+g`qcb4H2&vRE5zKaT(&GcYk1DThr*u>3d> zaELJoSFFytJ*A&RcT&e>wOr8t$q&BS>+Qww2Q)b!@w+9twbjDxCtpn+SJJ6ym9n@u zC@2{v`LHlE%VuZR6pYKt%0g9DDPtSfY*ZYY$q119r$NR2{iwhZv_ILGj!LTDCzIpw z^it9n>(~4wrxwdQ5oIb~^tOOIqEkwBQGw>C0*Ut8W{J9DX&-I8qA}5k&_0Ngbz!MMdOLjjrLCtGPYmU9*#M3 zidUqW>7$wrQ&WyA8$QKOE$4q|Cy_jgkLOQ-`HR@2RUHlEjpnwt92PiYER4W5iHrK~ znX;gK;(rljp+IqEf)RhC8d!Jm9u_l5)7SE1!(PK4qtos`$Rq8q`Rj=Id4jr%@z_KU z@WgIyMkSLH(0~#*suV#3tvNx$0o;@rCG1;Dm25$E&WgO(d$?;FE*q{B0=9S#<;^EM zxyNTD83yBsq$Z2F7rlLbg<7SL-=amF=c1Juyn7hTNq=xZKP|qBi;9wW+1t*k5GE%e z63^(s14cId>z*OIbk6m3M#^KiSBx+h2xr-Vzv2L#v$G8&dMMJP3Y`nPZpD?E8?y-- zVbg#Q9m2^mm>i<=_!hWS*UPIV{(a7qFQ4h*`MO*QBY{8~gPEBNcUbabRANs`?1W`# zDxAFeo)90-ujucje;Bu*-V4oNj;6iZbZvMmN9s7Rn38QASVtg*2R9YGQEPlFpvv-z zM=X<(hc!Fj1V`q(Ru}LcXZxILqW_A=+H7sW0dJEapb`Dsjzn)wpwIFhx{`P$B_)l2 z3Y#EnlB!l}S9~mxWH(11zT8TS-=1^;RMDla0OnX{Vq_+TT#Jhu}vblIXQ)Ycy6Z{*wLEfckt+UmR1_GcJDXrg{l7}#f43q z7`01d>Zhq=+M|usgRnH*PU!zAMEfdF!7eG2t4POLf!(JF+rQQ}JU)Yhy!9|s-rUv$sH8nv{z5)l?x6b-$8QZ~fP1iR-)L%i{plHw&uCMtEwW9xv&&q&y z*+jnOSs%hQVoNeqdSHV`mnspRH652;8@DlKgdrNG~8SE_G$Q{|?M06PPRSgl-)hn;p( zh59!aok9>XQ03+2Uuw)l zT!J2-h>n+mCxG>xo1r9`%B#AY2@!Id`jbl>XFzSO#o<5Q)yu8aRPDbpwPzkWw7Y(tbGjW^W#;2{d%WXfTXI-k9lcLEKy zx0&W}yeaIo*v=Rz$bGS@iUi7=EF5$|WH_w5xoZvYfJWRB_V(0Fl8mvwt{MOkzZ(stgK=fyD-8GTsyV_`0<{TnBz^^o`UJJB4-rrf|QJm zxyX(LAD{nDR#6cPbFaUZ70Zv^`2a%#ql!u?+cB1UWNkE6KO692%m2U4P6PV?=Vqr& zM^a!nhih%3kd42*vSJP#-@)ON)yC}_1{GJcE32z)@sBpqRSQc?H~9GY?%Rx9JKmUh z2Y8t-OYe!6S64w?T!g8-##jkZbMuu1}MYyrQYF5MLNfQ7hs)S&j>Et4F+6ZT&f zE5Tf~iQg{rhmNN_f EANC+08UO$Q literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/2.png b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/2.png new file mode 100644 index 0000000000000000000000000000000000000000..d5816698a72a72b8efdaafb971a3930a4bc158b0 GIT binary patch literal 27270 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

T=liwUsi7E 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

Tbn6fn9*1 zOdmB4k*fl>K)+GjgDF|@#%O9qBk$!EK zh@dB1?YSOz)0RX=FsqC28s+&A4j{USPFbWKp>CFB6PQ9~R`Nuye!3@+k{N=pVCYEf4 z)nI^ImLN>#La1ro*AI-CIvr&=;|0dJp$IF{h^+3hgpQtr*!>L4wdRK6&thQN%nuj# zbLDXK+fAPuppzp!mOts^1~i{XEnY6Pg8DpG14*{}1|P>CNY_Ovuy{dRBQp#O%SeT+ zE_OBoKSJz*$koT?aROdC@canZ{X4YV?oh@x;wcw&*qa@WI1ye%J1aXlL~Zd9%9g5u zgSsCYAe_3A*vj&7OzWc0lXgcW#~c%Qobh*|>(n0YO797GVWaB!fv+pRPqf>ICfYNq zNjN?W7w3j3KB9{>j8svbl8SxP_WjEFq(|Ht_$euB#bIHFKaUR}40pyvyCVm-#`qTi z%V-m_Zj~GRTa?4;$y!ec#qC`Q2ZHg4MW*Js^q$1i^g32aO)C~1j#R5h84vJ(Pqd{f zg@X(ThRAQ?$*t@^A{iC3>_35Ktr#?{;uw}smB-0{p;wUUNKR8e)^2n+HXU^d=(sl> zp>LqKXJnu^Zz_b!m75&?EygV48Kkv-7zyI2HRDl+lM_Ax*FJ8} zMdVjOuxb6U{AN3>?|v8ZLZ_2oXW<^fKiAR5v$RwE8Z~Iz0)a zjouWd4pECF25U+LG1YG%uH2|G9>%cj{vfXUbDRRqh;fGH)pwcU?%Y`p0a4+P!a_H- zSwQ{wm;-y?)>0DbUOZnqEyXb8lC771BNiFn?PdkxBo(Np?}EBqNrj%Y*7I`kzLlRZ1Qi>GI3YpZjined~c#9Kp8ZxDcRg>u(LNe<6TS@neO)= zKKm^?Uo(9R|5J2Y-E60xq38j}OPPiu0$cE|NS24TwF4Rw*{1aTY0q^ah?WQ%|a=rV>)`xQ7X{9%4_s$uhpdV3IWRSA)GR{F z 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 literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0939.Minimum-Area-Rectangle/README.md b/leetcode/901-1000/0939.Minimum-Area-Rectangle/README.md index b7a2b6a4f..f4bae7b08 100644 --- a/leetcode/901-1000/0939.Minimum-Area-Rectangle/README.md +++ b/leetcode/901-1000/0939.Minimum-Area-Rectangle/README.md @@ -1,28 +1,27 @@ # [939.Minimum Area Rectangle][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 points in the **X-Y** plane `points` where `points[i] = [xi, yi]`. + +Return the minimum area of a rectangle formed from these points, with sides parallel to the X and Y axes. If there is not any such rectangle, return `0`. + +**Example 1:** -**Example 1:** +![1](./1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[1,1],[1,3],[3,1],[3,3],[2,2]] +Output: 4 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpeg) -### 思路1 -> ... -Minimum Area Rectangle -```go ``` - +Input: points = [[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]] +Output: 2 +``` ## 结语 diff --git a/leetcode/901-1000/0939.Minimum-Area-Rectangle/Solution.go b/leetcode/901-1000/0939.Minimum-Area-Rectangle/Solution.go index d115ccf5e..72c57fc51 100644 --- a/leetcode/901-1000/0939.Minimum-Area-Rectangle/Solution.go +++ b/leetcode/901-1000/0939.Minimum-Area-Rectangle/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(points [][]int) int { + keys := make(map[[2]int]struct{}) + for _, xy := range points { + keys[[2]int{xy[0], xy[1]}] = struct{}{} + } + + ans := 0 + for i, xy := range points { + for j, other := range points { + if i == j { + continue + } + if xy[0] == other[0] || xy[1] == other[1] { + continue + } + x1, y1, x2, y2 := xy[0], other[1], other[0], xy[1] + _, ok1 := keys[[2]int{x1, y1}] + if ok1 { + if _, ok2 := keys[[2]int{x2, y2}]; ok2 { + width := x1 - x2 + if width < 0 { + width = -width + } + height := y1 - y2 + if height < 0 { + height = -height + } + area := width * height + if ans == 0 || ans > area { + ans = area + } + } + } + } + } + return ans } diff --git a/leetcode/901-1000/0939.Minimum-Area-Rectangle/Solution_test.go b/leetcode/901-1000/0939.Minimum-Area-Rectangle/Solution_test.go index 14ff50eb4..80f8ee8af 100644 --- a/leetcode/901-1000/0939.Minimum-Area-Rectangle/Solution_test.go +++ b/leetcode/901-1000/0939.Minimum-Area-Rectangle/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, 1}, {1, 3}, {3, 1}, {3, 3}, {2, 2}}, 4}, + {"TestCase2", [][]int{{1, 1}, {1, 3}, {3, 1}, {3, 3}, {4, 1}, {4, 3}}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 982cabb2439c297b77e82d4f68cbd0d131a55359 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 30 Sep 2024 09:45:10 +0800 Subject: [PATCH 075/450] Add solution and test-cases for problem 1041 --- .../1041.Robot-Bounded-In-Circle/README.md | 66 +++++++++++++++---- .../1041.Robot-Bounded-In-Circle/Solution.go | 43 +++++++++++- .../Solution_test.go | 12 ++-- 3 files changed, 100 insertions(+), 21 deletions(-) diff --git a/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/README.md b/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/README.md index 4a92e3fda..54c68987d 100644 --- a/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/README.md +++ b/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/README.md @@ -1,28 +1,68 @@ # [1041.Robot Bounded In Circle][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 +On an infinite plane, a robot initially stands at `(0, 0)` and faces north. Note that: + +- The **north direction** is the positive direction of the y-axis. +- The **south direction** is the negative direction of the y-axis. +- The **east direction** is the positive direction of the x-axis. +- The **west direction** is the negative direction of the x-axis. + +The robot can receive one of three instructions: + +- `"G"`: go straight 1 unit. +- `"L"`: turn 90 degrees to the left (i.e., anti-clockwise direction). +- `"R"`: turn 90 degrees to the right (i.e., clockwise direction). + +The robot performs the `instructions` in order, and repeats them forever. + +Return `true` if and only if there exists a circle in the plane such that the robot never leaves the circle. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: instructions = "GGLLGG" +Output: true +Explanation: The robot is initially at (0, 0) facing the north direction. +"G": move one step. Position: (0, 1). Direction: North. +"G": move one step. Position: (0, 2). Direction: North. +"L": turn 90 degrees anti-clockwise. Position: (0, 2). Direction: West. +"L": turn 90 degrees anti-clockwise. Position: (0, 2). Direction: South. +"G": move one step. Position: (0, 1). Direction: South. +"G": move one step. Position: (0, 0). Direction: South. +Repeating the instructions, the robot goes into the cycle: (0, 0) --> (0, 1) --> (0, 2) --> (0, 1) --> (0, 0). +Based on that, we return true. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Robot Bounded In Circle -```go ``` +Input: instructions = "GG" +Output: false +Explanation: The robot is initially at (0, 0) facing the north direction. +"G": move one step. Position: (0, 1). Direction: North. +"G": move one step. Position: (0, 2). Direction: North. +Repeating the instructions, keeps advancing in the north direction and does not go into cycles. +Based on that, we return false. +``` + +**Example 3:** +``` +Input: instructions = "GL" +Output: true +Explanation: The robot is initially at (0, 0) facing the north direction. +"G": move one step. Position: (0, 1). Direction: North. +"L": turn 90 degrees anti-clockwise. Position: (0, 1). Direction: West. +"G": move one step. Position: (-1, 1). Direction: West. +"L": turn 90 degrees anti-clockwise. Position: (-1, 1). Direction: South. +"G": move one step. Position: (-1, 0). Direction: South. +"L": turn 90 degrees anti-clockwise. Position: (-1, 0). Direction: East. +"G": move one step. Position: (0, 0). Direction: East. +"L": turn 90 degrees anti-clockwise. Position: (0, 0). Direction: North. +Repeating the instructions, the robot goes into the cycle: (0, 0) --> (0, 1) --> (-1, 1) --> (-1, 0) --> (0, 0). +Based on that, we return true. +``` ## 结语 diff --git a/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution.go b/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution.go index d115ccf5e..421c2d412 100644 --- a/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution.go +++ b/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +var ( + turn90Degrees = []byte{'n', 'e', 's', 'w'} + + dirMap = map[byte][2]int{ + 'n': {0, 1}, + 's': {0, -1}, + 'w': {-1, 0}, + 'e': {1, 0}, + } +) + +func Solution(instructions string) bool { + x, y := 0, 0 + dirIndex := 0 + var ( + cur [2]int + add int + ) + for i := 0; i < 4; i++ { + for _, i := range instructions { + cur = dirMap[turn90Degrees[dirIndex]] + if i == 'G' { + x, y = x+cur[0], y+cur[1] + continue + } + + if i == 'L' { + add = -1 + } + if i == 'R' { + add = 1 + } + + dirIndex = (dirIndex + add + 4) % 4 + } + if x == 0 && y == 0 { + return true + } + } + + return false } diff --git a/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution_test.go b/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution_test.go index 14ff50eb4..402fb0b0f 100644 --- a/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution_test.go +++ b/leetcode/1001-1100/1041.Robot-Bounded-In-Circle/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "GGLLGG", true}, + {"TestCase2", "GG", false}, + {"TestCase3", "GL", true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 40b8fea9c445c735ed5cb8b40e70c18e21cf04af Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 1 Oct 2024 14:03:27 +0800 Subject: [PATCH 076/450] Add solution and test-cases for problem 1497 --- .../README.md | 39 +++++++++++++++++++ .../Solution.go | 20 +++++++++- .../Solution_test.go | 19 ++++----- 3 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/README.md diff --git a/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/README.md b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/README.md new file mode 100644 index 000000000..562d9cf4a --- /dev/null +++ b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/README.md @@ -0,0 +1,39 @@ +# [1497.Check If Array Pairs Are Divisible by k][title] + +## Description +Given an array of integers `arr` of even length `n` and an integer `k`. + +We want to divide the array into exactly `n / 2` pairs such that the sum of each pair is divisible by `k`. + +Return `true` If you can find a way to do that or `false` otherwise. + +**Example 1:** + +``` +Input: arr = [1,2,3,4,5,10,6,7,8,9], k = 5 +Output: true +Explanation: Pairs are (1,9),(2,8),(3,7),(4,6) and (5,10). +``` + +**Example 2:** + +``` +Input: arr = [1,2,3,4,5,6], k = 7 +Output: true +Explanation: Pairs are (1,6),(2,5) and(3,4). +``` + +**Example 3:** + +``` +Input: arr = [1,2,3,4,5,6], k = 10 +Output: false +Explanation: You can try all possible pairs to see that there is no way to divide arr into 3 pairs each with sum divisible by 10. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-array-pairs-are-divisible-by-k +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go index d115ccf5e..2b1c42fff 100755 --- a/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go +++ b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, k int) bool { + count := make([]int, k) + for _, n := range arr { + t := n % k + if n < 0 { + t = k - (-n % k) + if t == k { + t = 0 + } + } + count[t]++ + } + for i := 1; i < k; i++ { + if count[i] != count[k-i] { + return false + } + } + return count[0]%2 == 0 } diff --git a/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go index 14ff50eb4..9135062c0 100755 --- a/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go +++ b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + arr []int + k int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4, 5, 10, 6, 7, 8, 9}, 5, true}, + {"TestCase2", []int{1, 2, 3, 4, 5, 6}, 7, true}, + {"TestCase3", []int{1, 2, 3, 4, 5, 6}, 10, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.arr, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.arr, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 48698fe7420f85681195041380890b3afb82c153 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 2 Oct 2024 08:59:04 +0800 Subject: [PATCH 077/450] Add solution and test-cases for problem 1331 --- .../1331.Rank-Transform-of-an-Array/README.md | 34 ++++++++++++------- .../Solution.go | 29 ++++++++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/README.md b/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/README.md index 49bb1463e..2654c3ad0 100644 --- a/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/README.md +++ b/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/README.md @@ -1,28 +1,36 @@ # [1331.Rank Transform of an Array][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 +Given an array of integers `arr`, replace each element with its rank. + +The rank represents how large the element is. The rank has the following rules: + +- Rank is an integer starting from 1. +- The larger the element, the larger the rank. If two elements are equal, their rank must be the same. +- Rank should be as small as possible. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [40,10,20,30] +Output: [4,1,2,3] +Explanation: 40 is the largest element. 10 is the smallest. 20 is the second smallest. 30 is the third smallest. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Rank Transform of an Array -```go ``` +Input: arr = [100,100,100] +Output: [1,1,1] +Explanation: Same elements share the same rank. +``` + +**Example 3:** +``` +Input: arr = [37,12,28,9,100,56,80,5,12] +Output: [5,3,4,2,8,6,7,1,3] +``` ## 结语 diff --git a/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution.go b/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution.go index d115ccf5e..44a1797bd 100644 --- a/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution.go +++ b/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type index [][2]int + +func Solution(arr []int) []int { + l := len(arr) + ans := make([]int, l) + if l == 0 { + return ans + } + slices := make(index, l) + for i := range l { + slices[i] = [2]int{i, arr[i]} + } + sort.Slice(slices, func(i, j int) bool { + return slices[i][1] < slices[j][1] + }) + + rank := 1 + ans[slices[0][0]] = rank + for i := 1; i < l; i++ { + if slices[i][1] != slices[i-1][1] { + rank++ + } + ans[slices[i][0]] = rank + } + return ans } diff --git a/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution_test.go b/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution_test.go index 14ff50eb4..54130d4c3 100644 --- a/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution_test.go +++ b/leetcode/1301-1400/1331.Rank-Transform-of-an-Array/Solution_test.go @@ -10,12 +10,12 @@ 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{40, 10, 20, 30}, []int{4, 1, 2, 3}}, + {"TestCase2", []int{100, 100, 100}, []int{1, 1, 1}}, + {"TestCase3", []int{37, 12, 28, 9, 100, 56, 80, 5, 12}, []int{5, 3, 4, 2, 8, 6, 7, 1, 3}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 430294cfa7d0612865efd1c6ed5f081a6b09964f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 3 Oct 2024 16:14:44 +0800 Subject: [PATCH 078/450] Add solution and test-cases for problem 1590 --- .../1590.Make-Sum-Divisible-by-P/README.md | 33 +++++++++++------- .../1590.Make-Sum-Divisible-by-P/Solution.go | 34 +++++++++++++++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md index 0aab8efee..47a03e25a 100755 --- a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md +++ b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md @@ -1,28 +1,35 @@ # [1590.Make Sum Divisible by P][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 +Given an array of positive integers `nums`, remove the **smallest** subarray (possibly **empty**) such that the **sum** of the remaining elements is divisible by `p`. It is **not** allowed to remove the whole array. + +Return the length of the smallest subarray that you need to remove, or `-1` if it's impossible. + +A **subarray** is defined as a contiguous block of elements in the array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,1,4,2], p = 6 +Output: 1 +Explanation: The sum of the elements in nums is 10, which is not divisible by 6. We can remove the subarray [4], and the sum of the remaining elements is 6, which is divisible by 6. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Make Sum Divisible by P -```go ``` +Input: nums = [6,3,5,2], p = 9 +Output: 2 +Explanation: We cannot remove a single element to get a sum divisible by 9. The best way is to remove the subarray [5,2], leaving us with [6,3] with sum 9. +``` + +**Example 3:** +``` +Input: nums = [1,2,3], p = 3 +Output: 0 +Explanation: Here the sum is 6. which is already divisible by 3. Thus we do not need to remove anything. +``` ## 结语 diff --git a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go index d115ccf5e..f0f474744 100644 --- a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go +++ b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, p int) int { + n := len(nums) + sum := 0 + for _, num := range nums { + sum = (sum + num) % p + } + + target := sum % p + if target == 0 { + return 0 + } + + cache := make(map[int]int) + cache[0] = -1 + tmpSum := 0 + ans := n + + for i := 0; i < n; i++ { + tmpSum = (tmpSum + nums[i]) % p + needed := (tmpSum - target + p) % p + + if idx, found := cache[needed]; found { + ans = min(ans, i-idx) + } + + cache[tmpSum] = i + } + + if ans == n { + return -1 + } + return ans } diff --git a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go index 14ff50eb4..df90da69b 100644 --- a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go +++ b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + p int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 1, 4, 2}, 6, 1}, + {"TestCase2", []int{6, 3, 5, 2}, 9, 2}, + {"TestCase3", []int{1, 2, 3}, 3, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.p) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.p) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e469dace9985a240c5b1318bb50d04f2690ee1ff Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 4 Oct 2024 08:53:10 +0800 Subject: [PATCH 079/450] Add solution for problem 2491 --- .../Solution.go | 29 +++++++++++++++++++ .../Solution_test.go | 24 +++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go index ebe45e34f..387d3dd73 100644 --- a/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go +++ b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go @@ -19,3 +19,32 @@ func Solution(skill []int) int64 { } return ans } + +func Solution1(skill []int) int64 { + l := len(skill) / 2 + sum := 0 + for _, n := range skill { + sum += n + } + if sum%l != 0 { + return -1 + } + target := sum / l + count := make(map[int]int) + for _, n := range skill { + count[n]++ + } + + ans := int64(0) + for k, c := range count { + need := target - k + if need == k && c&1 == 1 { + return -1 + } + if v, ok := count[need]; !ok || v != c { + return -1 + } + ans += int64(k) * int64(need) * int64(c) + } + return ans / 2 +} diff --git a/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go index 5c922e50b..005283bff 100644 --- a/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go +++ b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go @@ -30,6 +30,30 @@ func TestSolution(t *testing.T) { } } +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + expect int64 + }{ + {"TestCase1", []int{3, 2, 5, 1, 3, 4}, 22}, + {"TestCase2", []int{3, 4}, 12}, + {"TestCase3", []int{1, 1, 2, 3}, -1}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution1(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + // 压力测试 func BenchmarkSolution(b *testing.B) { } From 2e4f0702289a6cec65847cb54f3c498e3244eb11 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 6 Oct 2024 14:59:27 +0800 Subject: [PATCH 080/450] Add solution and test-cases for problem 1813 --- .../1813.Sentence-Similarity-III/README.md | 48 ++++++++++++++----- .../1813.Sentence-Similarity-III/Solution.go | 40 +++++++++++++++- .../Solution_test.go | 22 ++++----- 3 files changed, 85 insertions(+), 25 deletions(-) diff --git a/leetcode/1801-1900/1813.Sentence-Similarity-III/README.md b/leetcode/1801-1900/1813.Sentence-Similarity-III/README.md index a9bf61a12..2e92be318 100755 --- a/leetcode/1801-1900/1813.Sentence-Similarity-III/README.md +++ b/leetcode/1801-1900/1813.Sentence-Similarity-III/README.md @@ -1,28 +1,52 @@ # [1813.Sentence Similarity III][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 two strings `sentence1` and `sentence2`, each representing a **sentence** composed of **words**. A sentence is a list of words that are separated by a **single** space with no leading or trailing spaces. Each word consists of only uppercase and lowercase English characters. + +Two sentences `s1` and `s2` are considered **similar** if it is possible to insert an arbitrary sentence (possibly empty) inside one of these sentences such that the two sentences become equal. **Note** that the inserted sentence must be separated from existing words by spaces. + +For example, + +- `s1 = "Hello Jane"` and `s2 = "Hello my name is Jane"` can be made equal by inserting `"my name is"` between `"Hello"` and `"Jane"` in s1. +- `s1 = "Frog cool"` and `s2 = "Frogs are cool"` are **not** similar, since although there is a sentence `"s are"` inserted into `s1`, it is not separated from `"Frog"` by a space. + +Given two sentences `sentence1` and `sentence2`, return **true** if `sentence1` and `sentence2` are **similar**. Otherwise, return **false**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: sentence1 = "My name is Haley", sentence2 = "My Haley" + +Output: true + +Explanation: + +sentence2 can be turned to sentence1 by inserting "name is" between "My" and "Haley". ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: sentence1 = "of", sentence2 = "A lot of words" + +Output: false + +Explanation: + +No single sentence can be inserted inside one of the sentences to make it equal to the other. +``` + +**Example 3:** -### 思路1 -> ... -Sentence Similarity III -```go ``` +Input: sentence1 = "Eating right now", sentence2 = "Eating" + +Output: true +Explanation: + +sentence2 can be turned to sentence1 by inserting "right now" at the end of the sentence. +``` ## 结语 diff --git a/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go index d115ccf5e..3a8254d9c 100644 --- a/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go +++ b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +// Eating, Eating right now +func match1813(s, t []string) bool { + l1, r1 := 0, len(s)-1 + l2, r2 := 0, len(t)-1 + for ; l1 <= r1 && s[l1] == t[l2]; l1, l2 = l1+1, l2+1 { + + } + // 前缀 + if l1 > r1 { + return true + } + + for ; r1 >= l1 && s[r1] == t[r2]; r1, r2 = r1-1, r2-1 { + } + if r1 < l1 { + return true + } + return false +} + +func Solution(sentence1 string, sentence2 string) bool { + // 相等只需要插入空的数据即可 + if sentence1 == sentence2 { + return true + } + l1, l2 := len(sentence1), len(sentence2) + // 如果长度相等,但是字符串并不相等,说明无法插入 + if l1 == l2 { + return false + } + s1, s2 := strings.Split(sentence1, " "), strings.Split(sentence2, " ") + if l1 < l2 { + return match1813(s1, s2) + } + return match1813(s2, s1) + } diff --git a/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go index 14ff50eb4..e40223909 100644 --- a/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go +++ b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + sentence1, sentence2 string + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "My name is Haley", "My Haley", true}, + {"TestCase2", "of", "A lot of words", false}, + {"TestCase3", "Eating right now", "Eating", true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.sentence1, c.sentence2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.sentence1, c.sentence2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4a8306e7be2b9f3e0f2ae3aebbd7dcf7794709f1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 7 Oct 2024 13:50:39 +0800 Subject: [PATCH 081/450] Add solution and test-cases for problem 2696 --- .../README.md | 37 +++++++++++++++++++ .../Solution.go | 14 ++++++- .../Solution_test.go | 13 +++---- 3 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/README.md diff --git a/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/README.md b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/README.md new file mode 100644 index 000000000..af3dccc42 --- /dev/null +++ b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/README.md @@ -0,0 +1,37 @@ +# [2696.Minimum String Length After Removing Substrings][title] + +## Description +You are given a string `s` consisting only of **uppercase** English letters. + +You can apply some operations to this string where, in one operation, you can remove **any** occurrence of one of the substrings `"AB"` or `"CD"` from `s`. + +Return the **minimum** possible length of the resulting string that you can obtain. + +**Note** that the string concatenates after removing the substring and could produce new `"AB"` or `"CD"` substrings. +**Example 1:** + +``` +Input: s = "ABFCACDB" +Output: 2 +Explanation: We can do the following operations: +- Remove the substring "ABFCACDB", so s = "FCACDB". +- Remove the substring "FCACDB", so s = "FCAB". +- Remove the substring "FCAB", so s = "FC". +So the resulting length of the string is 2. +It can be shown that it is the minimum length that we can obtain. +``` + +**Example 2:** + +``` +Input: s = "ACBBD" +Output: 5 +Explanation: We cannot do any operations on the string so the length remains the same. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-string-length-after-removing-substrings +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go index d115ccf5e..fe9505871 100755 --- a/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go +++ b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + stack := make([]byte, len(s)) + index := -1 + for _, b := range s { + if index != -1 && ((b == 'B' && stack[index] == 'A') || (b == 'D' && stack[index] == 'C')) { + index-- + continue + } + index++ + stack[index] = byte(b) + } + return index + 1 } diff --git a/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution_test.go b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution_test.go index 14ff50eb4..297958c2f 100755 --- a/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution_test.go +++ b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ABFCACDB", 2}, + {"TestCase2", "ACBBD", 5}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4ba6a146e99e16d5e2b09145bdacd4ad35297872 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 8 Oct 2024 09:11:06 +0800 Subject: [PATCH 082/450] Add solution and test-cases for problem 1963 --- .../README.md | 43 +++++++++++++------ .../Solution.go | 25 ++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md index 1e36461fe..d405d607f 100755 --- a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md +++ b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md @@ -1,28 +1,45 @@ # [1963.Minimum Number of Swaps to Make the String Balanced][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 a **0-indexed** string `s` of **even** length `n`. The string consists of **exactly** `n / 2` opening brackets `'['` and `n / 2` closing brackets `']'`. + +A string is called **balanced** if and only if: + +- It is the empty string, or +- It can be written as `AB`, where both `A` and `B` are **balanced** strings, or +- It can be written as `[C]`, where `C` is a **balanced** string. + +You may swap the brackets at **any** two indices **any** number of times. + +Return the **minimum** number of swaps to make `s` **balanced**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "][][" +Output: 1 +Explanation: You can make the string balanced by swapping index 0 with index 3. +The resulting string is "[[]]". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Number of Swaps to Make the String Balanced -```go ``` +Input: s = "]]][[[" +Output: 2 +Explanation: You can do the following to make the string balanced: +- Swap index 0 with index 4. s = "[]][][". +- Swap index 1 with index 5. s = "[[][]]". +The resulting string is "[[][]]". +``` + +**Example 3:** +``` +Input: s = "[]" +Output: 0 +Explanation: The string is already balanced. +``` ## 结语 diff --git a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go index d115ccf5e..125815910 100644 --- a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go +++ b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + bs := []byte(s) + stackIndex := -1 + for index := 0; index < len(s); index++ { + if s[index] == ']' { + if stackIndex != -1 && bs[stackIndex] == '[' { + stackIndex-- + continue + } + } + stackIndex++ + bs[stackIndex] = s[index] + } + if stackIndex == -1 { + return 0 + } + // 最终就是]]]]]][[[[ 这情况 + count := (stackIndex + 1) / 2 + need := count / 2 + if count&1 == 1 { + need++ + } + return need } diff --git a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go index 14ff50eb4..9b26953cc 100644 --- a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go +++ b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "][][", 1}, + {"TestCase2", "]]][[[", 2}, + {"TestCase3", "[]", 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c9e768ce0e77e961ce836e17ee4b7434c3a74d49 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 9 Oct 2024 09:12:00 +0800 Subject: [PATCH 083/450] Add solution and test-cases for problem 1492 --- .../1492.The-kth-Factor-of-n/README.md | 37 +++++++++++++++++++ .../1492.The-kth-Factor-of-n/Solution.go | 13 ++++++- .../1492.The-kth-Factor-of-n/Solution_test.go | 20 +++++----- 3 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 leetcode/1401-1500/1492.The-kth-Factor-of-n/README.md diff --git a/leetcode/1401-1500/1492.The-kth-Factor-of-n/README.md b/leetcode/1401-1500/1492.The-kth-Factor-of-n/README.md new file mode 100644 index 000000000..7dcf8cf7a --- /dev/null +++ b/leetcode/1401-1500/1492.The-kth-Factor-of-n/README.md @@ -0,0 +1,37 @@ +# [1492.The kth Factor of n][title] + +## Description +You are given two positive integers `n` and `k`. A factor of an integer `n` is defined as an integer `i` where `n % i == 0`. + +Consider a list of all factors of `n` sorted in **ascending order**, return the `kth` factor in this list or return `-1` if n has less than `k` factors. + +**Example 1:** + +``` +Input: n = 12, k = 3 +Output: 3 +Explanation: Factors list is [1, 2, 3, 4, 6, 12], the 3rd factor is 3. +``` + +**Example 2:** + +``` +Input: n = 7, k = 2 +Output: 7 +Explanation: Factors list is [1, 7], the 2nd factor is 7. +``` + +**Example 3:** + +``` +Input: n = 4, k = 4 +Output: -1 +Explanation: Factors list is [1, 2, 4], there is only 3 factors. We should return -1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-kth-factor-of-n/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution.go b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution.go index d115ccf5e..34fdf4c2d 100755 --- a/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution.go +++ b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, k int) int { + i := 1 + for ; i <= n; i++ { + if n%i == 0 { + k-- + if k == 0 { + return i + } + } + } + return -1 } diff --git a/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go index 14ff50eb4..2ddfc2679 100755 --- a/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go +++ b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 12, 3, 3}, + {"TestCase2", 7, 2, 7}, + {"TestCase3", 4, 4, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5ce99c5b195f4e754fa7d9e8928c2001f79a0512 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 10 Oct 2024 23:25:10 +0800 Subject: [PATCH 084/450] Add solution and test-cases for problem 962 --- .../0962.Maximum-Width-Ramp/README.md | 25 ++++++++----------- .../0962.Maximum-Width-Ramp/Solution.go | 24 ++++++++++++++++-- .../0962.Maximum-Width-Ramp/Solution_test.go | 13 +++++----- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/leetcode/901-1000/0962.Maximum-Width-Ramp/README.md b/leetcode/901-1000/0962.Maximum-Width-Ramp/README.md index 4f0590c37..f7695da41 100644 --- a/leetcode/901-1000/0962.Maximum-Width-Ramp/README.md +++ b/leetcode/901-1000/0962.Maximum-Width-Ramp/README.md @@ -1,28 +1,25 @@ # [962.Maximum Width Ramp][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 +A **ramp** in an integer array `nums` is a pair `(i, j)` for which `i < j` and `nums[i] <= nums[j]`. The **width** of such a ramp is `j - i`. + +Given an integer array `nums`, return the maximum width of a **ramp** in `nums`. If there is no **ramp** in `nums`, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [6,0,8,2,1,5] +Output: 4 +Explanation: The maximum width ramp is achieved at (i, j) = (1, 5): nums[1] = 0 and nums[5] = 5. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Width Ramp -```go ``` - +Input: nums = [9,8,1,0,1,9,4,0,4,1] +Output: 7 +Explanation: The maximum width ramp is achieved at (i, j) = (2, 9): nums[2] = 1 and nums[9] = 1. +``` ## 结语 diff --git a/leetcode/901-1000/0962.Maximum-Width-Ramp/Solution.go b/leetcode/901-1000/0962.Maximum-Width-Ramp/Solution.go index d115ccf5e..95b9c2472 100644 --- a/leetcode/901-1000/0962.Maximum-Width-Ramp/Solution.go +++ b/leetcode/901-1000/0962.Maximum-Width-Ramp/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + n := len(nums) + stack := make([]int, n) + + index := -1 + for i := 0; i < n; i++ { + if index == -1 || nums[stack[index]] > nums[i] { + index++ + stack[index] = i + } + } + + ans := 0 + + for j := n - 1; j >= 0; j-- { + for index != -1 && nums[stack[index]] <= nums[j] { + ans = max(ans, j-stack[index]) + index-- + } + } + + return ans } diff --git a/leetcode/901-1000/0962.Maximum-Width-Ramp/Solution_test.go b/leetcode/901-1000/0962.Maximum-Width-Ramp/Solution_test.go index 14ff50eb4..4e73faceb 100644 --- a/leetcode/901-1000/0962.Maximum-Width-Ramp/Solution_test.go +++ b/leetcode/901-1000/0962.Maximum-Width-Ramp/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{6, 0, 8, 2, 1, 5}, 4}, + {"TestCase2", []int{9, 8, 1, 0, 1, 9, 4, 0, 4, 1}, 7}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9d16df5ebd1fea62de370da5363a18bafb404bff Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 11 Oct 2024 09:26:33 +0800 Subject: [PATCH 085/450] Add solution and test-cases for problem 1942 --- .../README.md | 44 ++++++--- .../Solution.go | 89 ++++++++++++++++++- .../Solution_test.go | 4 +- 3 files changed, 120 insertions(+), 17 deletions(-) diff --git a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md index c7da7ae43..86ba6f2a8 100755 --- a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md +++ b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md @@ -1,28 +1,44 @@ # [1942.The Number of the Smallest Unoccupied Chair][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 +There is a party where `n` friends numbered from `0` to `n - 1` are attending. There is an **infinite** number of chairs in this party that are numbered from `0` to `infinity`. When a friend arrives at the party, they sit on the unoccupied chair with the **smallest number**. + +- For example, if chairs `0`, `1`, and `5` are occupied when a friend comes, they will sit on chair number `2`. + +When a friend leaves the party, their chair becomes unoccupied at the moment they leave. If another friend arrives at that same moment, they can sit in that chair. + +You are given a **0-indexed** 2D integer array `times` where `times[i] = [arrivali, leavingi]`, indicating the arrival and leaving times of the `ith` friend respectively, and an integer `targetFriend`. All arrival times are **distinct**. + +Return the **chair number** that the friend numbered `targetFriend` will sit on. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: times = [[1,4],[2,3],[4,6]], targetFriend = 1 +Output: 1 +Explanation: +- Friend 0 arrives at time 1 and sits on chair 0. +- Friend 1 arrives at time 2 and sits on chair 1. +- Friend 1 leaves at time 3 and chair 1 becomes empty. +- Friend 0 leaves at time 4 and chair 0 becomes empty. +- Friend 2 arrives at time 4 and sits on chair 0. +Since friend 1 sat on chair 1, we return 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -The Number of the Smallest Unoccupied Chair -```go ``` - +Input: times = [[3,10],[1,5],[2,6]], targetFriend = 0 +Output: 2 +Explanation: +- Friend 1 arrives at time 1 and sits on chair 0. +- Friend 2 arrives at time 2 and sits on chair 1. +- Friend 0 arrives at time 3 and sits on chair 2. +- Friend 1 leaves at time 5 and chair 0 becomes empty. +- Friend 2 leaves at time 6 and chair 1 becomes empty. +- Friend 0 leaves at time 10 and chair 2 becomes empty. +Since friend 0 sat on chair 2, we return 2. +``` ## 结语 diff --git a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go index d115ccf5e..5c7c35a83 100644 --- a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go +++ b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go @@ -1,5 +1,92 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "sort" +) + +type heap1942 struct { + chair int + end int +} +type heap1942list []heap1942 + +func (h *heap1942list) Len() int { + return len(*h) +} +func (h *heap1942list) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap1942list) Less(i, j int) bool { + a := (*h)[i].end + b := (*h)[j].end + if a == b { + return (*h)[i].chair < (*h)[j].chair + } + return a < b +} + +func (h *heap1942list) Push(x any) { + *h = append(*h, x.(heap1942)) +} + +func (h *heap1942list) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] + return x +} + +type chairs []int + +func (c *chairs) Len() int { + return len(*c) +} +func (c *chairs) Swap(i, j int) { + (*c)[i], (*c)[j] = (*c)[j], (*c)[i] +} +func (c *chairs) Less(i, j int) bool { + return (*c)[i] < (*c)[j] +} +func (c *chairs) Push(x any) { + *c = append(*c, x.(int)) +} + +func (c *chairs) Pop() any { + old := *c + l := len(old) + x := old[l-1] + *c = old[:l-1] return x } + +func Solution(times [][]int, targetFriend int) int { + l := len(times) + cc := &chairs{} + for i := range l { + heap.Push(cc, i) + } + list := make([][3]int, l) + for i := range times { + list[i] = [3]int{i, times[i][0], times[i][1]} + } + sort.Slice(list, func(i, j int) bool { + return list[i][1] < list[j][1] + }) + usedChairs := &heap1942list{} + + for i := range list { + for len(*usedChairs) > 0 && (*usedChairs)[0].end <= list[i][1] { + top := heap.Pop(usedChairs).(heap1942) + heap.Push(cc, top.chair) + } + chair := heap.Pop(cc).(int) + if list[i][0] == targetFriend { + return chair + } + heap.Push(usedChairs, heap1942{chair: chair, end: list[i][2]}) + } + return -1 +} diff --git a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go index 14ff50eb4..499883f0b 100644 --- a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go +++ b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From dbf26705d1bf46a8f36430a706c122b1359e3f82 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 14 Oct 2024 09:19:41 +0800 Subject: [PATCH 086/450] Add solution and test-cases for problem 1859 --- .../1859.Sorting-the-Sentence/README.md | 29 ++++++++++--------- .../1859.Sorting-the-Sentence/Solution.go | 22 ++++++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/leetcode/1801-1900/1859.Sorting-the-Sentence/README.md b/leetcode/1801-1900/1859.Sorting-the-Sentence/README.md index f2e7116a5..98237fe08 100755 --- a/leetcode/1801-1900/1859.Sorting-the-Sentence/README.md +++ b/leetcode/1801-1900/1859.Sorting-the-Sentence/README.md @@ -1,28 +1,29 @@ # [1859.Sorting the Sentence][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 +A **sentence** is a list of words that are separated by a single space with no leading or trailing spaces. Each word consists of lowercase and uppercase English letters. + +A sentence can be **shuffled** by appending the **1-indexed word position** to each word then rearranging the words in the sentence. + +- For example, the sentence `"This is a sentence"` can be shuffled as `"sentence4 a3 is2 This1"` or `"is2 sentence4 This1 a3"`. + +Given a **shuffled sentence** `s` containing no more than `9` words, reconstruct and return the original sentence. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "is2 sentence4 This1 a3" +Output: "This is a sentence" +Explanation: Sort the words in s to their original positions "This1 is2 a3 sentence4", then remove the numbers. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Sorting the Sentence -```go ``` - +Input: s = "Myself2 Me1 I4 and3" +Output: "Me Myself and I" +Explanation: Sort the words in s to their original positions "Me1 Myself2 and3 I4", then remove the numbers. +``` ## 结语 diff --git a/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go index d115ccf5e..2af27facc 100644 --- a/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go +++ b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" + "strings" +) + +func Solution(s string) string { + array := strings.Split(s, " ") + sort.Slice(array, func(i, j int) bool { + a, b := array[i], array[j] + la, lb := a[len(a)-1], b[len(b)-1] + return la < lb + }) + buf := strings.Builder{} + for i, str := range array { + buf.WriteString(str[:len(str)-1]) + if i != len(array)-1 { + buf.WriteString(" ") + } + } + return buf.String() } diff --git a/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go index 14ff50eb4..a2dc5f88a 100644 --- a/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go +++ b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "is2 sentence4 This1 a3", "This is a sentence"}, + {"TestCase2", "Myself2 Me1 I4 and3", "Me Myself and I"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b74a11d50dfa05c500405d6962a819409fbd8aee Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 15 Oct 2024 09:21:58 +0800 Subject: [PATCH 087/450] Add solution and test-cases for problem 2938 --- .../README.md | 40 +++++++++++++------ .../Solution.go | 12 +++++- .../Solution_test.go | 14 +++---- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/README.md b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/README.md index 2bcecf0ec..491d6b15f 100755 --- a/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/README.md +++ b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/README.md @@ -1,28 +1,42 @@ # [2938.Separate Black and White Balls][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 +There are `n` balls on a table, each ball has a color black or white. + +You are given a **0-indexed** binary string `s` of length `n`, where `1` and `0` represent black and white balls, respectively. + +In each step, you can choose two adjacent balls and swap them. + +Return the **minimum** number of steps to group all the black balls to the right and all the white balls to the left. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "101" +Output: 1 +Explanation: We can group all the black balls to the right in the following way: +- Swap s[0] and s[1], s = "011". +Initially, 1s are not grouped together, requiring at least 1 step to group them to the right. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Separate Black and White Balls -```go ``` +Input: s = "100" +Output: 2 +Explanation: We can group all the black balls to the right in the following way: +- Swap s[0] and s[1], s = "010". +- Swap s[1] and s[2], s = "001". +It can be proven that the minimum number of steps needed is 2. +``` + +**Example 3:** +``` +Input: s = "0111" +Output: 0 +Explanation: All the black balls are already grouped to the right. +``` ## 结语 diff --git a/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution.go b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution.go index d115ccf5e..aaef17f0c 100644 --- a/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution.go +++ b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int64 { + index := -1 + dis := int64(0) + for i := range s { + if s[i] == '0' { + index++ + dis += int64(i - index) + } + } + return dis } diff --git a/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution_test.go b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution_test.go index 14ff50eb4..ffcd19677 100644 --- a/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution_test.go +++ b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "101", 1}, + {"TestCase2", "100", 2}, + {"TestCase3", "0111", 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7b792abb12c9dd2f9dc3c4ddd9dc6e471a2a29ed Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 16 Oct 2024 09:31:42 +0800 Subject: [PATCH 088/450] Add solution and test-cases for problem 2848 --- .../README.md | 29 ++++++++++++++ .../Solution.go | 40 +++++++++++++++++++ .../Solution_test.go | 38 ++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/README.md create mode 100755 leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution.go create mode 100755 leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution_test.go diff --git a/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/README.md b/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/README.md new file mode 100644 index 000000000..f3cadfa55 --- /dev/null +++ b/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/README.md @@ -0,0 +1,29 @@ +# [2848.Points That Intersect With Cars][title] + +## Description +You are given a **0-indexed** 2D integer array `nums` representing the coordinates of the cars parking on a number line. For any index `i`, `nums[i] = [starti, endi]` where `starti` is the starting point of the `ith` car and `endi` is the ending point of the `ith` car. + +Return the number of integer points on the line that are covered with **any part** of a car. + +**Example 1:** + +``` +Input: nums = [[3,6],[1,5],[4,7]] +Output: 7 +Explanation: All the points from 1 to 7 intersect at least one car, therefore the answer would be 7. +``` + +**Example 2:** + +``` +Input: nums = [[1,3],[5,8]] +Output: 7 +Explanation: Points intersecting at least one car are 1, 2, 3, 5, 6, 7, 8. There are a total of 7 points, therefore the answer would be 7. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/points-that-intersect-with-cars/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution.go b/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution.go new file mode 100755 index 000000000..fca0ff4d2 --- /dev/null +++ b/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution.go @@ -0,0 +1,40 @@ +package Solution + +import "sort" + +func Solution(nums [][]int) int { + sort.Slice(nums, func(i, j int) bool { + a, b := nums[i], nums[j] + if a[0] == b[0] { + return a[1] < b[1] + } + return a[0] < b[0] + }) + + points := 0 + var ( + left, right int + first = true + ) + for _, car := range nums { + if first { + left, right = car[0], car[1] + points += right - left + 1 + first = false + continue + } + if car[0] >= right { + points += car[1] - car[0] + if car[0] > right { + points++ + } + left, right = car[0], car[1] + continue + } + if car[1] > right { + points += car[1] - right + right = car[1] + } + } + return points +} diff --git a/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution_test.go b/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution_test.go new file mode 100755 index 000000000..b713c8b3a --- /dev/null +++ b/leetcode/2801-2900/2848.Points-That-Intersect-With-Cars/Solution_test.go @@ -0,0 +1,38 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs [][]int + expect int + }{ + {"TestCase1", [][]int{{3, 6}, {1, 5}, {4, 7}}, 7}, + {"TestCase2", [][]int{{1, 3}, {5, 8}}, 7}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From bb2a683a58c1564b411fe0ba9e858adf4d684525 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 17 Oct 2024 09:33:11 +0800 Subject: [PATCH 089/450] Add solution and test-cases for problem 1391 --- .../1.png | Bin 0 -> 20864 bytes .../README.md | 54 +++++++++ .../Solution.go | 112 +++++++++++++++++- .../Solution_test.go | 12 +- .../e1.png | Bin 0 -> 14654 bytes .../e2.png | Bin 0 -> 11298 bytes 6 files changed, 170 insertions(+), 8 deletions(-) create mode 100644 leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/1.png create mode 100644 leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/README.md create mode 100644 leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/e1.png create mode 100644 leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/e2.png diff --git a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/1.png b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..31d85c6d48034f253843d5cecdf51d14be0f11a7 GIT binary patch literal 20864 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 literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/README.md b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/README.md new file mode 100644 index 000000000..73a6ca156 --- /dev/null +++ b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/README.md @@ -0,0 +1,54 @@ +# [1391. Check if There is a Valid Path in a Grid][title] + +## Description +You are given an `m x n` `grid`. Each cell of `grid` represents a street. The street of `grid[i][j]` can be: + +- `1` which means a street connecting the left cell and the right cell. +- `2` which means a street connecting the upper cell and the lower cell. +- `3` which means a street connecting the left cell and the lower cell. +- `4` which means a street connecting the right cell and the lower cell. +- `5` which means a street connecting the left cell and the upper cell. +- `6` which means a street connecting the right cell and the upper cell. + +![1](./1.png) + +You will initially start at the street of the upper-left cell `(0, 0)`. A valid path in the grid is a path that starts from the upper left cell `(0, 0)` and ends at the bottom-right cell `(m - 1, n - 1)`. **The path should only follow the streets**. + +**Notice** that you are **not allowed** to change any street. + +Return `true` if there is a valid path in the grid or `false` otherwise. + +**Example 1:** + +![e1](./e1.png) + +``` +Input: grid = [[2,4,3],[6,5,2]] +Output: true +Explanation: As shown you can start at cell (0, 0) and visit all the cells of the grid to reach (m - 1, n - 1). +``` + +**Example 2:** + +![e2](./e1.png) + +``` +Input: grid = [[1,2,1],[1,2,1]] +Output: false +Explanation: As shown you the street at cell (0, 0) is not connected with any street of any other cell and you will get stuck at cell (0, 0) +``` + +**Example 3:** + +``` +Input: grid = [[1,1,2]] +Output: false +Explanation: You will get stuck at cell (0, 1) and you cannot reach cell (0, 2). +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-there-is-a-valid-path-in-a-grid +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go index d115ccf5e..4393a4a5c 100755 --- a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go +++ b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go @@ -1,5 +1,113 @@ package Solution -func Solution(x bool) bool { - return x +var dirFn = [6]func(int, int, [][]int) [][2]int{ + func(x, y int, grid [][]int) [][2]int { + m, n := len(grid), len(grid[0]) + res := make([][2]int, 0) + + nx, ny := x, y-1 + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 1 || grid[nx][ny] == 4 || grid[nx][ny] == 6) { + res = append(res, [2]int{nx, ny}) + } + nx, ny = x, y+1 + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 1 || grid[nx][ny] == 3 || grid[nx][ny] == 5) { + res = append(res, [2]int{nx, ny}) + } + return res + }, + func(x, y int, grid [][]int) [][2]int { + m, n := len(grid), len(grid[0]) + res := make([][2]int, 0) + + nx, ny := x-1, y + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 2 || grid[nx][ny] == 3 || grid[nx][ny] == 4) { + res = append(res, [2]int{nx, ny}) + } + nx, ny = x+1, y + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 2 || grid[nx][ny] == 5 || grid[nx][ny] == 6) { + res = append(res, [2]int{nx, ny}) + } + return res + }, + func(x, y int, grid [][]int) [][2]int { + m, n := len(grid), len(grid[0]) + res := make([][2]int, 0) + + nx, ny := x, y-1 + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 1 || grid[nx][ny] == 4 || grid[nx][ny] == 6) { + res = append(res, [2]int{nx, ny}) + } + nx, ny = x+1, y + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 2 || grid[nx][ny] == 5 || grid[nx][ny] == 6) { + res = append(res, [2]int{nx, ny}) + } + return res + }, + func(x, y int, grid [][]int) [][2]int { + m, n := len(grid), len(grid[0]) + res := make([][2]int, 0) + + nx, ny := x, y+1 + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 1 || grid[nx][ny] == 3 || grid[nx][ny] == 5) { + res = append(res, [2]int{nx, ny}) + } + nx, ny = x+1, y + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 2 || grid[nx][ny] == 5 || grid[nx][ny] == 6) { + res = append(res, [2]int{nx, ny}) + } + return res + }, + func(x, y int, grid [][]int) [][2]int { + m, n := len(grid), len(grid[0]) + res := make([][2]int, 0) + + nx, ny := x, y-1 + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 1 || grid[nx][ny] == 4 || grid[nx][ny] == 6) { + res = append(res, [2]int{nx, ny}) + } + nx, ny = x-1, y + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 2 || grid[nx][ny] == 3 || grid[nx][ny] == 4) { + res = append(res, [2]int{nx, ny}) + } + return res + }, + func(x, y int, grid [][]int) [][2]int { + m, n := len(grid), len(grid[0]) + res := make([][2]int, 0) + + nx, ny := x, y+1 + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 1 || grid[nx][ny] == 3 || grid[nx][ny] == 5) { + res = append(res, [2]int{nx, ny}) + } + nx, ny = x-1, y + if !(nx < 0 || nx >= m || ny < 0 || ny >= n) && (grid[nx][ny] == 2 || grid[nx][ny] == 3 || grid[nx][ny] == 4) { + res = append(res, [2]int{nx, ny}) + } + return res + }, +} + +func Solution(grid [][]int) bool { + m, n := len(grid)-1, len(grid[0])-1 + q := [][2]int{{0, 0}} + v := make(map[[2]int]struct{}) + v[[2]int{0, 0}] = struct{}{} + for len(q) > 0 { + nq := make([][2]int, 0) + for _, pos := range q { + x, y := pos[0], pos[1] + if x == m && y == n { + return true + } + for _, next := range dirFn[grid[x][y]-1](x, y, grid) { + if _, ok := v[next]; ok { + continue + } + nq = append(nq, next) + v[next] = struct{}{} + } + } + q = nq + } + return false } diff --git a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go index 14ff50eb4..cc517444d 100755 --- a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go +++ b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs [][]int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{2, 4, 3}, {6, 5, 2}}, true}, + {"TestCase2", [][]int{{1, 2, 1}, {1, 2, 1}}, false}, + {"TestCase3", [][]int{{1, 1, 2}}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/e1.png b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/e1.png new file mode 100644 index 0000000000000000000000000000000000000000..014fbcba1f2e57a7278ba2b20b4a7e16a79714fc GIT binary patch literal 14654 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 VMMf9fz+5lG+tX)GuKSuV{{gjUtatzb literal 0 HcmV?d00001 From 67bf420ba0a42bfd94bffca5883615400143bfbb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 18 Oct 2024 09:02:22 +0800 Subject: [PATCH 090/450] Add solution and test-cases for problem 2275 --- .../README.md | 35 +++++++++++-------- .../Solution.go | 15 ++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md index 763b60610..cb28cc022 100755 --- a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md +++ b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md @@ -1,28 +1,35 @@ # [2275.Largest Combination With Bitwise AND Greater Than Zero][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 +The **bitwise AND** of an array `nums` is the bitwise AND of all integers in `nums`. + +- For example, for `nums = [1, 5, 3]`, the bitwise AND is equal to `1 & 5 & 3 = 1`. +- Also, for `nums = [7]`, the bitwise AND is `7`. + +You are given an array of positive integers `candidates`. Evaluate the **bitwise AND** of every **combination** of numbers of `candidates`. Each number in `candidates` may only be used **once** in each combination. + +Return the size of the **largest** combination of `candidats` with a bitwise AND **greater** than `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: candidates = [16,17,71,62,12,24,14] +Output: 4 +Explanation: The combination [16,17,62,24] has a bitwise AND of 16 & 17 & 62 & 24 = 16 > 0. +The size of the combination is 4. +It can be shown that no combination with a size greater than 4 has a bitwise AND greater than 0. +Note that more than one combination may have the largest size. +For example, the combination [62,12,24,14] has a bitwise AND of 62 & 12 & 24 & 14 = 8 > 0. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Largest Combination With Bitwise AND Greater Than Zero -```go ``` - +Input: candidates = [8,8] +Output: 2 +Explanation: The largest combination [8,8] has a bitwise AND of 8 & 8 = 8 > 0. +The size of the combination is 2, so we return 2. +``` ## 结语 diff --git a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go index d115ccf5e..2ed099a23 100644 --- a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go +++ b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(candidates []int) int { + ans := 0 + for i := 0; i < 32; i++ { + tmp := 0 + for j := range candidates { + if candidates[j]&1 == 1 { + tmp++ + } + candidates[j] >>= 1 + } + ans = max(ans, tmp) + } + return ans } diff --git a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution_test.go b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution_test.go index 14ff50eb4..6b6f4b493 100644 --- a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution_test.go +++ b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/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{16, 17, 71, 62, 12, 24, 14}, 4}, + {"TestCase2", []int{8, 8}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8396a0db0c7155483906c044efd7483bcb3387da Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 19 Oct 2024 17:19:02 +0800 Subject: [PATCH 091/450] Add solution and test-cases for problem 1545 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 23 ++++++++++- .../Solution_test.go | 19 +++++---- 3 files changed, 55 insertions(+), 26 deletions(-) diff --git a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md index 5bd2ac3a7..fdf436eae 100755 --- a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md +++ b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md @@ -1,28 +1,39 @@ # [1545.Find Kth Bit in Nth Binary String][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 +Given two positive integers `n` and `k`, the binary string `Sn` is formed as follows: + +- `S1 = "0"` +- `Si = Si - 1 + "1" + reverse(invert(Si - 1))` for `i > 1` + +Where `+` denotes the concatenation operation, `reverse(x)` returns the reversed string `x`, and `invert(x)` inverts all the bits in `x` (`0` changes to `1` and `1` changes to `0`). + +For example, the first four strings in the above sequence are: + +- `S1 = "0"` +- `S2 = "011"` +- `S3 = "0111001"` +- `S4 = "011100110110001"` + +Return the `kth` bit in `sn`. It is guaranteed that `k` is valid for the given `n`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, k = 1 +Output: "0" +Explanation: S3 is "0111001". +The 1st bit is "0". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Kth Bit in Nth Binary String -```go ``` - +Input: n = 4, k = 11 +Output: "1" +Explanation: S4 is "011100110110001". +The 11th bit is "1". +``` ## 结语 diff --git a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go index d115ccf5e..8405128bb 100644 --- a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go +++ b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, k int) byte { + alloc := 1 + for i := 2; i <= n; i++ { + alloc = (alloc * 2) + 1 + } + bs := make([]byte, alloc) + bs[0] = '0' + index := 1 + for i := 2; i <= n; i++ { + bs[index] = '1' + end := index + index++ + for j := end - 1; j >= 0; j-- { + bs[index] = '0' + if bs[j] == '0' { + bs[index] = '1' + } + index++ + } + } + return bs[k-1] } diff --git a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution_test.go b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution_test.go index 14ff50eb4..8fb8301bd 100644 --- a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution_test.go +++ b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, k int + expect byte }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 1, '0'}, + {"TestCase2", 4, 11, '1'}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 52d2a4581a5c08dff56f6a53022a110f57ea15bf Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Oct 2024 11:01:18 +0800 Subject: [PATCH 092/450] Add solution and test-cases for problem 2947 --- .../README.md | 53 ++++++++++++++----- .../Solution.go | 24 ++++++++- .../Solution_test.go | 21 ++++---- 3 files changed, 73 insertions(+), 25 deletions(-) diff --git a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md index d5c89744f..e286ea693 100755 --- a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md +++ b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md @@ -1,28 +1,55 @@ # [2947.Count Beautiful Substrings I][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 a string `s` and a positive integer `k`. + +Let `vowels` and `consonants` be the number of vowels and consonants in a string. + +A string is **beautiful** if: + +- `vowels == consonants`. +- `(vowels * consonants) % k == 0`, in other terms the multiplication of `vowesl` and `consonants` is divisible by `k`. + +Return the number of **non-empty beautiful substrings** in the given string `s`. + +A **substrings** is a contiguous sequence of characters in a string. + +**Vowel letters** in English are `'a'`, `'e'`, `'i'`, `'o'`, and `'u'`. + +**Consonant letters** in English are every letter except vowels. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "baeyh", k = 2 +Output: 2 +Explanation: There are 2 beautiful substrings in the given string. +- Substring "baeyh", vowels = 2 (["a",e"]), consonants = 2 (["y","h"]). +You can see that string "aeyh" is beautiful as vowels == consonants and vowels * consonants % k == 0. +- Substring "baeyh", vowels = 2 (["a",e"]), consonants = 2 (["b","y"]). +You can see that string "baey" is beautiful as vowels == consonants and vowels * consonants % k == 0. +It can be shown that there are only 2 beautiful substrings in the given string. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Beautiful Substrings I -```go +``` +Input: s = "abba", k = 1 +Output: 3 +Explanation: There are 3 beautiful substrings in the given string. +- Substring "abba", vowels = 1 (["a"]), consonants = 1 (["b"]). +- Substring "abba", vowels = 1 (["a"]), consonants = 1 (["b"]). +- Substring "abba", vowels = 2 (["a","a"]), consonants = 2 (["b","b"]). +It can be shown that there are only 3 beautiful substrings in the given string. ``` +**Example 3:** + +``` +Input: s = "bcdf", k = 1 +Output: 0 +Explanation: There are no beautiful substrings in the given string. +``` ## 结语 diff --git a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go index d115ccf5e..4a8bc6796 100644 --- a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go +++ b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) int { + var isVowel func(byte) bool + isVowel = func(b byte) bool { + return b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' + } + ans := 0 + vc := make([][2]int, len(s)+1) + for i := 1; i <= len(s); i++ { + vc[i] = [2]int{vc[i-1][0], vc[i-1][1]} + if isVowel(s[i-1]) { + vc[i][0]++ + } else { + vc[i][1]++ + } + for j := i - 1; j > 0; j -= 2 { + a, b := vc[i][0]-vc[j-1][0], vc[i][1]-vc[j-1][1] + if a == b && (a*b)%k == 0 { + ans++ + } + } + } + return ans } diff --git a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution_test.go b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution_test.go index 14ff50eb4..678b56724 100644 --- a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution_test.go +++ b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "baeyh", 2, 2}, + {"TestCase2", "abba", 1, 3}, + {"TestCase3", "bcdf", 1, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d5c83666523145073b13806878d9abafc5f59778 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 21 Oct 2024 09:06:00 +0800 Subject: [PATCH 093/450] Add solution and test-cases for problem 1593 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 22 +++++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md index f81157e5a..d81a94b05 100755 --- a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md +++ b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md @@ -1,28 +1,35 @@ # [1593.Split a String Into the Max Number of Unique Substrings][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 +Given a string `s`, return the maximum number of unique substrings that the given string can be split into. + +You can split string `s` into any list of **non-empty substrings**, where the concatenation of the substrings forms the original string. However, you must split the substrings such that all of them are **unique**. + +A **substring** is a contiguous sequence of characters within a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "ababccc" +Output: 5 +Explanation: One way to split maximally is ['a', 'b', 'ab', 'c', 'cc']. Splitting like ['a', 'b', 'a', 'b', 'c', 'cc'] is not valid as you have 'a' and 'b' multiple times. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Split a String Into the Max Number of Unique Substrings -```go ``` +Input: s = "aba" +Output: 2 +Explanation: One way to split maximally is ['a', 'ba']. +``` + +**Example 3:** +``` +Input: s = "aa" +Output: 1 +Explanation: It is impossible to split the string any further. +``` ## 结语 diff --git a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go index d115ccf5e..e6661aae2 100644 --- a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go +++ b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + used := make(map[string]struct{}) + var dfs func(int) int + dfs = func(index int) int { + if index >= len(s) { + return 0 + } + m := 0 + for next := index + 1; next <= len(s); next++ { + cur := s[index:next] + if _, ok := used[cur]; ok { + continue + } + used[cur] = struct{}{} + m = max(m, dfs(next)+1) + delete(used, cur) + } + return m + } + return dfs(0) } diff --git a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution_test.go b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution_test.go index 14ff50eb4..acaf57614 100644 --- a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution_test.go +++ b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ababccc", 5}, + {"TestCase2", "aba", 2}, + {"TestCase3", "aa", 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ebfb50a87e1f8ba19b828df1759f873f83510d20 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 22 Oct 2024 09:17:14 +0800 Subject: [PATCH 094/450] Add solution and test-cases for problem 2894 --- .../README.md | 51 +++++++++++++++++++ .../Solution.go | 13 +++++ .../Solution_test.go | 39 ++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/README.md create mode 100755 leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution.go create mode 100755 leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution_test.go diff --git a/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/README.md b/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/README.md new file mode 100644 index 000000000..b9b9396fa --- /dev/null +++ b/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/README.md @@ -0,0 +1,51 @@ +# [2894.Divisible and Non-divisible Sums Difference][title] + +## Description +You are given positive integers `n` and `m`. + +Define two integers as follows: + +- `num1`: The sum of all integers in the range `[1, n]` (both **inclusive**) that are **not divisible** by `m`. +- `num2`: The sum of all integers in the range `[1, n]` (both **inclusive**) that are **divisible** by `m`. + +Return the integer `num1 - num2`. + +**Example 1:** + +``` +Input: n = 10, m = 3 +Output: 19 +Explanation: In the given example: +- Integers in the range [1, 10] that are not divisible by 3 are [1,2,4,5,7,8,10], num1 is the sum of those integers = 37. +- Integers in the range [1, 10] that are divisible by 3 are [3,6,9], num2 is the sum of those integers = 18. +We return 37 - 18 = 19 as the answer. +``` + +**Example 2:** + +``` +Input: n = 5, m = 6 +Output: 15 +Explanation: In the given example: +- Integers in the range [1, 5] that are not divisible by 6 are [1,2,3,4,5], num1 is the sum of those integers = 15. +- Integers in the range [1, 5] that are divisible by 6 are [], num2 is the sum of those integers = 0. +We return 15 - 0 = 15 as the answer. +``` + +**Example 3:** + +``` +Input: n = 5, m = 1 +Output: -15 +Explanation: In the given example: +- Integers in the range [1, 5] that are not divisible by 1 are [], num1 is the sum of those integers = 0. +- Integers in the range [1, 5] that are divisible by 1 are [1,2,3,4,5], num2 is the sum of those integers = 15. +We return 0 - 15 = -15 as the answer. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/divisible-and-non-divisible-sums-difference +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution.go b/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution.go new file mode 100755 index 000000000..3bd7b26ff --- /dev/null +++ b/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution.go @@ -0,0 +1,13 @@ +package Solution + +func Solution(n int, m int) int { + sum := 0 + for i := 1; i <= n; i++ { + if i%m != 0 { + sum += i + continue + } + sum -= i + } + return sum +} diff --git a/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution_test.go b/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution_test.go new file mode 100755 index 000000000..f80ca7342 --- /dev/null +++ b/leetcode/2801-2900/2894.Divisible-And-Non-divisible-Sums-Difference/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + n, m int + expect int + }{ + {"TestCase1", 10, 3, 19}, + {"TestCase2", 5, 6, 15}, + {"TestCase3", 5, 1, -15}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.n, c.m) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.m) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 23b2130f0af9a98b2291e8ac75c385a505a28a01 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 23 Oct 2024 09:27:33 +0800 Subject: [PATCH 095/450] Add solution and test-cases for problem 1222 --- .../1.jpg | Bin 0 -> 53274 bytes .../2.jpg | Bin 0 -> 54813 bytes .../README.md | 31 ++++---- .../Solution.go | 66 +++++++++++++++++- .../Solution_test.go | 20 +++--- 5 files changed, 91 insertions(+), 26 deletions(-) create mode 100644 leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/1.jpg create mode 100644 leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/2.jpg diff --git a/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/1.jpg b/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ccf1ca2f42266e24263251ef8cb719a0b8dbe6f GIT binary patch literal 53274 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 literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/2.jpg b/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..555154016850291a3bed58aa05bf413587f2b25a GIT binary patch literal 54813 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 [!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 +On a **0-indexed** `8 x 8` chessboard, there can be multiple black queens and one white king. + +You are given a 2D integer array `queens` where `queens[i] = [xQueeni, yQueeni]` represents the position of the `ith` black queen on the chessboard. You are also given an integer array `king` of length `2` where `king = [xKing, yKing]` represents the position of the white king. + +Return the coordinates of the black queens that can directly attack the king. You may return the answer in **any order**. -**Example 1:** +**Example 1:** + +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: queens = [[0,1],[1,0],[4,0],[0,4],[3,3],[2,4]], king = [0,0] +Output: [[0,1],[1,0],[3,3]] +Explanation: The diagram above shows the three queens that can directly attack the king and the three queens that cannot attack the king (i.e., marked with red dashes). ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Queens That Can Attack the King -```go ``` - +Input: queens = [[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]], king = [3,3] +Output: [[2,2],[3,4],[4,4]] +Explanation: The diagram above shows the three queens that can directly attack the king and the three queens that cannot attack the king (i.e., marked with red dashes). +``` ## 结语 diff --git a/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution.go b/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution.go index d115ccf5e..89a66bd80 100644 --- a/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution.go +++ b/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution.go @@ -1,5 +1,67 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(queens [][]int, king []int) [][]int { + ans := make([][]int, 0) + board := [8][8]int{} + for _, q := range queens { + board[q[0]][q[1]] = 1 + } + x, y := king[0], king[1] + for r := y - 1; r >= 0; r-- { + if board[x][r] == 1 { + ans = append(ans, []int{x, r}) + break + } + } + for r := y + 1; r < 8; r++ { + if board[x][r] == 1 { + ans = append(ans, []int{x, r}) + break + } + } + + for r := x - 1; r >= 0; r-- { + if board[r][y] == 1 { + ans = append(ans, []int{r, y}) + break + } + } + + for r := x + 1; r < 8; r++ { + if board[r][y] == 1 { + ans = append(ans, []int{r, y}) + break + } + } + + // 对 + for l, r := x-1, y-1; l >= 0 && r >= 0; l, r = l-1, r-1 { + if board[l][r] == 1 { + ans = append(ans, []int{l, r}) + break + } + } + + for l, r := x-1, y+1; l >= 0 && r < 8; l, r = l-1, r+1 { + if board[l][r] == 1 { + ans = append(ans, []int{l, r}) + break + } + } + + for l, r := x+1, y+1; l < 8 && r < 8; l, r = l+1, r+1 { + if board[l][r] == 1 { + ans = append(ans, []int{l, r}) + break + } + } + + for l, r := x+1, y-1; l < 8 && r >= 0; l, r = l+1, r-1 { + if board[l][r] == 1 { + ans = append(ans, []int{l, r}) + break + } + } + + return ans } diff --git a/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution_test.go b/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution_test.go index 14ff50eb4..8336d57b4 100644 --- a/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution_test.go +++ b/leetcode/1201-1300/1222.Queens-That-Can-Attack-the-King/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + queens [][]int + king []int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{0, 1}, {1, 0}, {4, 0}, {0, 4}, {3, 3}, {2, 4}}, []int{0, 0}, [][]int{{0, 1}, {1, 0}, {3, 3}}}, + {"TestCase2", [][]int{{0, 0}, {1, 1}, {2, 2}, {3, 4}, {3, 5}, {4, 4}, {4, 5}}, []int{3, 3}, [][]int{{3, 4}, {2, 2}, {4, 4}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.queens, c.king) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.queens, c.king) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 55baeaae23d04bbb72fa197f8979cb344b3c9113 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Oct 2024 17:22:11 +0800 Subject: [PATCH 096/450] Add solution and test-cases for problem 1006 --- .../1001-1100/1006.Clumsy-Factorial/README.md | 35 +++++++++++-------- .../1006.Clumsy-Factorial/Solution.go | 28 +++++++++++++-- .../1006.Clumsy-Factorial/Solution_test.go | 13 ++++--- 3 files changed, 53 insertions(+), 23 deletions(-) diff --git a/leetcode/1001-1100/1006.Clumsy-Factorial/README.md b/leetcode/1001-1100/1006.Clumsy-Factorial/README.md index c5ffec5b0..677f80fed 100644 --- a/leetcode/1001-1100/1006.Clumsy-Factorial/README.md +++ b/leetcode/1001-1100/1006.Clumsy-Factorial/README.md @@ -1,28 +1,35 @@ # [1006.Clumsy Factorial][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 +The **factorial** of a positive integer `n` is the product of all positive integers less than or equal to `n`. + +- For example, `factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1`. + +We make a **clumsy factorial** using the integers in decreasing order by swapping out the multiply operations for a fixed rotation of operations with multiply `'*'`, divide `'/'`, add `'+'`, and subtract `'-'` in this order. + +- For example, `clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1`. + +However, these operations are still applied using the usual order of operations of arithmetic. We do all multiplication and division steps before any addition or subtraction steps, and multiplication and division steps are processed left to right. + +Additionally, the division that we use is floor division such that `10 * 9 / 8 = 90 / 8 = 11`. + +Given an integer `n`, return the clumsy factorial of `n`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4 +Output: 7 +Explanation: 7 = 4 * 3 / 2 + 1 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Clumsy Factorial -```go ``` - +Input: n = 10 +Output: 12 +Explanation: 12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 +``` ## 结语 diff --git a/leetcode/1001-1100/1006.Clumsy-Factorial/Solution.go b/leetcode/1001-1100/1006.Clumsy-Factorial/Solution.go index d115ccf5e..60e4778ce 100644 --- a/leetcode/1001-1100/1006.Clumsy-Factorial/Solution.go +++ b/leetcode/1001-1100/1006.Clumsy-Factorial/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + ans := 0 + first := true + for ; n > 0; n -= 4 { + cur := n + if n-1 >= 1 { + cur *= (n - 1) + } + if n-2 >= 1 { + cur /= (n - 2) + } + if n-3 >= 1 { + if first { + cur += n - 3 + } else { + cur -= n - 3 + } + } + if first { + ans = cur + first = false + continue + } + ans -= cur + } + return ans } diff --git a/leetcode/1001-1100/1006.Clumsy-Factorial/Solution_test.go b/leetcode/1001-1100/1006.Clumsy-Factorial/Solution_test.go index 14ff50eb4..995ed26c1 100644 --- a/leetcode/1001-1100/1006.Clumsy-Factorial/Solution_test.go +++ b/leetcode/1001-1100/1006.Clumsy-Factorial/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", 4, 7}, + {"TestCase2", 10, 12}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 95d61e9d24530621ae1b148d399caada33234180 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 28 Oct 2024 20:52:13 +0800 Subject: [PATCH 097/450] Add solution and test-cases for problem 2501 --- .../README.md | 38 +++++++++++++++++++ .../Solution.go | 31 ++++++++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/README.md diff --git a/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/README.md b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/README.md new file mode 100644 index 000000000..4efc82438 --- /dev/null +++ b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/README.md @@ -0,0 +1,38 @@ +# [2501.Longest Square Streak in an Array][title] + +## Description +You are given an integer array `nums`. A subsequence of `nums` is called a **square streak** if: + +- The length of the subsequence is at least `2`, and +- **after** sorting the subsequence, each element (except the first element) is the **square** of the previous number. + +Return the length of the **longest square streak** in `nums`, or return `-1` if there is no **square streak**. + +A **subsequence** is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements. + +**Example 1:** + +``` +Input: nums = [4,3,6,16,8,2] +Output: 3 +Explanation: Choose the subsequence [4,16,2]. After sorting it, it becomes [2,4,16]. +- 4 = 2 * 2. +- 16 = 4 * 4. +Therefore, [4,16,2] is a square streak. +It can be shown that every subsequence of length 4 is not a square streak. +``` + +**Example 2:** + +``` +Input: nums = [2,3,5,6,7] +Output: -1 +Explanation: There is no square streak in nums so return -1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-square-streak-in-an-array +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go index d115ccf5e..48e534c43 100755 --- a/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go +++ b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func isPerfectSquare(num int) int { + for i := 1; i*i <= num; i++ { + if i*i == num { + return i + } + } + return -1 +} + +func Solution(nums []int) int { + sort.Ints(nums) + ans := -1 + pre := make(map[int]int) + for _, n := range nums { + pre[n] = 1 + } + for _, n := range nums { + i := isPerfectSquare(n) + if i == -1 { + continue + } + if l, ok := pre[i]; ok { + pre[n] = l + 1 + ans = max(ans, pre[n]) + } + } + return ans } diff --git a/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution_test.go b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution_test.go index 14ff50eb4..f7a50b4ca 100755 --- a/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution_test.go +++ b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/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{4, 3, 6, 16, 8, 2}, 3}, + {"TestCase2", []int{2, 3, 5, 6, 7}, -1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0b21d3bf1789905817ce3ce46f24b31d537cc41a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 29 Oct 2024 09:12:20 +0800 Subject: [PATCH 098/450] Add solution and test-cases for problem 2684 --- .../1.png | Bin 0 -> 17182 bytes .../2.png | Bin 0 -> 8402 bytes .../README.md | 41 ++++++++++++++++++ .../Solution.go | 26 ++++++++++- .../Solution_test.go | 13 +++--- 5 files changed, 71 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/1.png create mode 100644 leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/2.png create mode 100644 leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/README.md diff --git a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/1.png b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a09286c386a8fc22d1e2b7e559b4a525d35eed GIT binary patch literal 17182 zcmdsf2UHbX(k>z>IZ2S5nk?y%B`BFD=ZtWWbjV4PfP!QsHK0V190U=GiewOwAV^j~ zk|3afAW2YOqd4Q-J8#ze*PH*Yaa`J`yLR{9y{mRrefz6kMrx`n;^R=^prN7RgGzGR z@Nf6=KddwGG4eS%Cj4{CLt9Y>?O{L7G8!7~S5J9EPbVK6l%q8oi-7EpGZqA&or{Mj zi+~&p0)cdO<*`B`ZQYSh9z4$0p0EgRcXF{p*`Tbge%yoLLkMv533Brzbomf00@8f^ z@Igp~ho2u|{NsM4t+n$>hiWcKuDpQ`J^2Yx5`&PoRIYW930mL4iX z)_QJs%0K4eW$o^Pa&bPHHa`zPkKm66PhVH-A5tr8FVt0dKv)s-EPT>%$H#vKWKWa` zU!YFZ=3$`a?rWuXO;^|5_Nu;}CkT4!{pigZ3BU4p^=rbK=yzN2I&^u{poL{)x!O#qng$CjwV^TK{mzu|Vf4((%ty z1C*7g-H&@k5h6d{<@jzTYm}|s&yo3s#eTFnA%EU{G7}FwB)qzQJpWzvt5tsJ@uxQ3 zU0mS)elgmw%|CB)@{zT6JXZEkJ)VpMFQ)(bvwzcu``_H-|ED`gdnJS~O31^;NlaSb z1}Wqxi%{qOX;Lqw$8{?xa(9m>;M#}x@LTmd<6cum1>XXokU2w%az zEQ9oL{b6Mrl+Ur#%hjxO%s6)j+6V}rPQ6_$H=y1O`7|I)(u z{SVyo(~y6k`H3=M7xT3KxsZ?V`qviuyImBmVMq6L_l0M6@;E~9M4KmGz%Oue?fv&P z_0v=AepyaGWyq6NZ2PyKkJa}7VrlrElZEoH-~Kq{{$V}+b0Z4;(AO_UJPADi{YDh~ z4UMSgq$+KWRB`4v=K~#dEtQRJ6|emW;|RWAYz&-c z+J_4K5e)neVe6k-G~x*c{3E^gZ;f<+0%*UjU;P!^p1;H*f5<(E-_{~vc4M&6Ppt%?i%(haA$vva2g#90c6EZ>wnnlH9sEGEoLZs?XeZ zWCbmOr>_t00E4lqv)llP7j8I&1_5a^h{DG}q?qUfT6sv0Tbp$>5#T3wB$EZ9x>L(5 z)miKTTWnPxV~iJl_SSQ}&Nf}ri4%D}G$1`y^nCq6$xR~@G6AK{_gYdcyoQQ81-$p` z-Vc%<>?k=U>T11-7%%I&%R3Z|iEDTC?W^aP&nUld`%A?-h3bNq?O2=J+xf5ZRUV|I z)^JV&`(IYei*Fo#`~2>%`O}Q9r`J~Py5bpMv##a{kG4?Nhu*B2%A(7CRGYXgGwMwc z?yPy_tE?7Tu;X;pTSMe&bq16Y_kqwAI!FjkxiDZaRJhG6P>DFxSlil)w_l%Yk4%b> zznsjeH&KJt~YDnCP(N_{JyD6t5}_q>sqxz# zn}%8lQS*WIEqM%TWNvx5NSd}bTHmC_4l=F(CJ;k&DG}jKPp-3h2BHyjm&+)58?Z|& zub`l9Xn0<7t5?8teOmH$wF8B`y!>D&E(JRWM`UYTTd`^?!hY7vB+ex9g4xp~g*ZBH zEP85c73-cm*F?jk$hfpaamXh7HJmW@)u1f%%K{`isKxr8P_TNYp<6fKeRgR1OWXu0 zfw^N;wq{yf@^P^G!oe~3X+mYsV)URV+j7b zI8oz7y}djX{<;b!yS%*IiZ{=h0r+mroKj0ggf8}_E2`YNkR2aS^bqy*V|X$k68Iv! zg*gZH_S;L;%W!(lC4&H3bqh5GR(#x4^{JjdY zW&lrow^(Cn#Go3-37NBmba^`;-#kb=t;nJenLhQGH??azdb`@1WWP6uOR(g#ut&MM zMK5i3#YJt^pj~I%UcINQCacR&rl{ z#qzq+may7>L|IKh@0uv+{%KC0O4RlKdGEF`eBJUZl6oF9MeWKY)#o-@)!dK1osNn% z0VIqE{2Kh8DHCgLDPw^5iO0&#HG+bIT8FA_`lw3G>T8VopO$rkB$H)_hlfQjZyQNz zY1JIY9_IJ) zMLF-B+4(55MbcL6S^P>6W&hY9G4KBUn=>TpDk{1ATT9WBiD_wH_VPxbMrMpG0oYg) zj^liOUzQ7(*QV-|($h_>#?RnWMO<@Dw=94#*eE1Sa@qQs=(D1#n3+?Jg>OWvuzpw^ zeRt#Q3Gw@H%^v* zto(=pG)|K{gYUZb#KulAJqNd~J2K zR1O~R%9VSr5+A1O4MZuKn3$sKZj_tVv-0flwXmwDFi7~mdy#x~HWCGh?d%&-32-Fz z`|sn&(2m4GHtP44$@cvxF5eoeuSWLJ;oKwA2)gx@EbT#U;zEC>xNf7rZ-p;>qF8Cu zmvj3z-s~5%2EXc(&WqLJanXQ%XXTU1bYUk>I!$Dt8)+Meeh!z)%5(g}Cv9@MNtbaDK;Wht)l?``fsc5Y zH7o><*2r^k&Jfb6D#p>V^be4>DFsukuyECC4~ye+?C#J;MfoS@Fx?tgyTGC)s)X(& zVzH--BroAsGY?DT<+?g?T*Zop z{EUm&luhSoCGV{y#4!RbZ(1iqS2^sTpVgfxWa?0*1J8Bh<+;DRHz1%m;sk&=vY~y! zngkh(T>7Q1RPOGFdv2S%yKMCI^sk?IunD%HeN00fl5<@XM^EiDwmIVE$kKU3w=z8EeW$j9sNNk&8S!IO624g(h3 zAU_WmxIx=p6~a>Db_a07OD3K!qZV<-5)T+EP@CJDvL7jl)Fib_6`A(Awav`(rlbxG z4s=>=t|y=&sJV7o#p~nicpf{Rdq*1a&8Y*?V&ljruXC8iH0h4mckG)N)iP`RxdDu zmh!%QM_~4xan7?k3W`mh=gAb_4%qTgyYc3p8uN?jdTW3gw4~HJ6ecbPOIb)k5{GVC zdlIe}vQKZ8v5_6i&K(~J;RE~e;eRGe>`ZGn9)ci~u-1Yo*T(l2pcz^2Gv?XCA2*ae|iU zUB=<@z+hBL#Wo9gyTia>9Ri+O2$UuOk;s9Sbwfz*l9xhN62OnHM|h9~d?LEMxCjBg zH{Ctiz}6rpb9xByH+;MefURd(R1_iL0^g<=6WAJESl9qUK2i5iePjXg&_-_Yuz(V1 zFN+EwK!Nc=xw))Tjw;y)d*cjBZT{GC(=*{?3@AJV4WDYO#%%>x zFXX#+M3EUKcAhT-AHp%7#1;Ow3g_^dbYe!+1~+C*sx({U9@~D?Xw+O`Oumg8Rm48M z)DB@(>XV3AnoF{g0x}#-f;YK^vIagVg|>L^F`ZtIXOzVP6_}ZsIWAmK1ui#uuhV^e zT^*g1lOuPgG%pXpAtbczIk2nLG?aZuFX6+WN^B)#_SgzLG$f>Mgx!?vHh|q*+TPwS zvzR;r2J6lax<#}5wp_FyE1)bhmdIQg-Iryolg^QLQ5fQFT6lHm+PZeM&5b#dv(#V` zwsvP6J#U0&woItZ*5p6pEcGF`RU?{uRv6(Fh&m;>P(S(dy4I!K_R7=O=RrvF`i|z? z#sK*h!Hn2+5to{0tov&R4+Qu6>@NDvU2rnHE7x$eRn1fvHQZ01rz1Bk5fyM9P|G4w zwSJK_8rl@V%%cV+Cdzs&_7d+B(WqvMd-EVJ*(IDheI{ZdC!CPJpvLLVtk;-btiKfu=DY0j<3@}Noy@EVXF*YJ%gA;0w zPHtohvOjDrkrj2aLI8tYLz(R(Qa6Q7n*tj|yJnV+D{b&c9-5i-jJg@!%>+_r9wFP_ zFBfJN)O)XMJ3BikU<=v}+|<_5nNZ_rRtmmQjz(`}@Ai_@?5Utynqc<>rB{c^3RR3w zS3B9Iq^=an?o}C-8Oz5|eZp$D5qJ018KB2N z^Ire>rj~=5S+cP($d4XRS3)l% z_yN1reHct?o%@tY;b1?tEbMIt=ZKEe#J#++tssdgZSbvIp~aX?1|_R`H3@cvvQ zzm*(b%aBl!3q=|+Ez@K(CT7#C6R%c?frUY)&=AwD-w4Y#$F%d@lgQZ55AvK-2 z5(L6RaTE5trWNsWlr^o(59gUcef>KOXQLXx_fA02{*!>EK%A_L8u87I%~gIP&ggyq z-eQ?wIeQ+g0WYfIHDLCvdzL`Vf6vvp&Xw^^&-IFUjPin8X9){(72`;3?QqV57Kql~ zU^W$$%>>4r6Hw82u-O!NKdFP-?v3IBrjfsiU;zv~h6Y-u-oqQ)_NjMTfl^MY>1y~Z zm&$kIuNl4U5|7LcimB2xG@ty0z>g#6S?h1ra&+M+RL>;2>!TPa>zCIqP4X@`>9yE- zOX0LV3L1^C^Ag+dFGXIl|EzfTp=Gtt_)4l81TU1R!n20xljJzmprZ@0y*ft0y9Td8 zw+ODT!CXbcPj6rtTI{>EX#C0B&>WJZzpY~6oI8lDl#_FHZv{BbzhMW^PE^k^VejC| zWLjLDcc@)44^DvzrXozZg8M6f-k~%D`W|m(8JJkq$HO9 zNtJRG46UAjX7yNIEPEp;CLHRuF0Rl+{``0c7kyz}-c<$wm zoa$n?&mROdRzsVV#Cah0(=-R$t88@c9|`r}H3k>r?!G`+zj#y{nhc~QxIZ2sU4OPk zAmlum;%d-RdtNggONRQQXVIQdfil@WQO4Wcpth%mzuOm@ZG4~f#~#kFsyK4lMTO*~8>dYS&4N zb<6C@(!|A0Q;e*8HZz_n#AB>p))i~iajz+V>bloLlH%#Vb z^vaBdh!Hn+?!&u8$MO%#e0i*H>PeMHy*ZdFBCi_1X5musO+JhGf=?@X^NLSwr&ld~ zX3wPdj>8)Rc#lGowf=gCtO`%+>Z7CnkXskR5<;%J8z1o90*sgP3L6c>BY7+&J#>ej zV?jlfck5#TY>^ziuOP&CvuivQz-CS{H3K16#_pjw0Glwjv_T1a)Vl0u3juVpU2lT` z>`MjrKC^>!*nVfKlL3A#!^|mV=siY%mkkU-avn6efFvJND5qthcGn0Yds7JdFCAQC6O_aV${3C}(3Oav=iO7Wqfn;{+av57*GJ#yt9bO-g;a0z_HjG;q-vW$?W8GsgqtZqiAh%! zNzhR^7VNPdAw28)qa;{s`Y_alA~|jhwBBa93sh=B?YC)jk$A=5(VSi}sETH^N(2GM z!~!*qKxD<<%8D5zN8uPI1Ofbb#$Rbwp!c2q5qIDz-d{mx!MZ^2nlyz%C^ci(08mtO zVO16iAylck2Y}=Et(KLb5KM(>bpZ7F^tnm|B+(!iyx#ysp1SWhkPk$jouM4jh1%Jz zwzs*!96}LU6A(I&Q@+@b&)ofY#C0hlPQp9$;x&@gGXH>pV$bDQX>6+xgDBH+yCdL) zE|18ms}qfiiMb}i-Pc525&OWPT-(p@X%|a`1U-A#wb;pIr6OIJROs9C9J|TowK|yV zpC;wNk$ExT-e`G5;mXK8PZ7ao)O@Lq7sN2};&}`;YO>BPDKqn<>ty6PHfrs})O9=F_g+~u_7D8U~n&)^v4 zsWt=wJE&os-V|wg2S&Da$$O24vB^R~A#7mnfqq$zLJSpZHmK+6JqRQHYhpmBo$9z_ zf=^M;YS|Pdr$OzFYr_(WIJE#rL`>oj0)!JJuWC_43Pm?;m&2yiCI{EyRBEGdX=%y0 z^gB_jEsz&0wN`Ls8GXJyiS6#`|AOr-Tn%#AU6`*dTEkm z&Px%V-0%kheQ04}VIV`yqg@h%`a5^Eh{lbuXhusgO%h;i7)-Nzc~5e<*2O%*9j|Z% zrq8&`!T5_#8#66cE^nn;4{5tk*OeJnhK1o%D|Dqi^ZIB!ois}&;C1TFkS*`P=aBr* zpV*Gnx|YXV%Eg@CK6%Rley-AzjqS8~HbHMT@tv(=tkW+uMx~Zt-*#@M53X~6hl6?M zOq4kJ=4Bp}8dWQw>Zh!yp1bn-AAQ}0sj=}#*|LWgOb7e>TJU~V?%USN$b-r*xj5E+ zu>)3oN@CgiOOgsxN3UaTUXg4o)&O?My1K0O+VgR?66l>z3?mvunoJz@I_ zV)7`;w0|V6_FK|}Zx?5DU_s6LXN&pA;Jk;O4QIpR_V|U-G80lNDo%n@m=%sXP)S8d z6qjt>+7dQq*56(nngr)-w!i#|iJ5IBwS|``18%!*f zm`w92DVao`#>EkS9Iv=#T;tfyN&=E3YtDTRePCb&&xTDxzRaZ7h6RTWgt@3hwjo$G zsBVab=}6)WF9@{cGVy$H9h0TwWA3@b{XqNi+5?yZ?^GJD^H?HC<~6@^So?~XaEw=& z;Yz?0xDR0%MYpuHv_LP|JCPMyz?+b#4StEqoZmtF)c`>J6AT| z%Y6`(9JoK*7CzJ(iaT*-`iT;hoXpY{WO>xQ_z?(-#KeaQr+W&e=a9ns1S*4-v)fe_ zcpx9~n_HGJER)B=ZDkULG0x`ZW=JZg#+_HakNaMxgXm{pz$#oWtDPoc9fgr~Na}HB zA=r!l%-F|GXdz#OLAU5?=^@4L9xt~)UhEaA57d91B<4qZ#e9KXM8x2b`e?jYsoG&g zTLWr8Wqgcu;tVvGeLOwLe^NXYbYyb*!Z5#syQ99U42g!Fagl_R8d+YE=@Udpdpl9E zYELp(XK=laK)x==7rki^r_BRqRX^QBdwjWUcWvqoV;}<&I;ObS2X;CNVzh3UvYKIaOy0(l zZ^^`*U3{o6SS?ds&IThP;&!B3y0Ds11_Z=rBP6_3szc6mrb&~8!PI(=T-hz@#5&C0 z85{^WbGo$fI!Gc}L^%czFY0)0_X3zheNmQ58TwHQf_%d0y&XUjXF19*i2xEUp#m2q zQQ&*>6ar>tph9|(gpS7OdIEq99h&b4K#8#UrqduvpsM6DoCME(#D$-ij#g8l~;4__TJ*-~^bIK|ekmU;g`L7K4D2xNyK1 z&jcI-j_DGE@-_D-N;8pwR9Abn>Z7h^Y9b;As83>d(&OoU#2iMA24j#!{BcTt^3vS* z9hvN71-DY!Xo>jj5A$)C3gCU=MZeGNa8XGICPm~n$E0tad6JwjfJ}WtfbqURgvtY1zLExtjin$PU>3EAX=|t27PPQ-aabvxzaWXNkb*63DXvIy7 zm|I@dCMf9r7@^vtq=l|BJ`7!!!W@S`n=wKv8wCzK7B%^`)q4y z2!@nlk3)HbLes(2I!<@n*qFgW^;lYJZ|OC(O8UUPpfEg2CW5NZpFREd-`%BMqs@DE zeY2ZQ$Ow%NMN)*~qe!1BATv#nOZ6dLhO()W_xGKrp0cP{3ptEx!UQaw2tdd4)g9-u z**lvha&vP#Xy9nAcnkvIA|QF%86^yzg}df~+1w^In$hIk!|Fp$k`1c^oN+HN9c6sm zscjlOry;>ub%}t@y1TnOo0wT)04^NKf062vRpED_O*z+l2=m@pm6-y$l^+LQ`Lng4 zLP=ffZZ+SLFA*7kgf>J5Hhx**lF`31-ZO3pzYa(6eqmOia)aMCQ^pkr6_`NM>ya9{rk{XaB8#c%5y~_ufgzSfj9D)>Td25o~85tRK zV($nB8o$f-rcJ5jz65AzH649B(5KVU(fOm#vwXuEI4dTKx{zTO4o_ z5JAR{7tZTTy46P+k7XOs*)Q5MW7Cigl)`}1U`TbC--DKK1ewY3aeug2NAIPUn!Fhh zL>0K+u!|w>I@i`;>2$#$t^JJXu)2gIHFjiC;xI#lc|guq zmTPHJ$%ri`AByAqd`0h96wYvWNaMxC?#oEknKNc{ zuk}9i`n>RHOrFGm`Z*;?2eWSy(wY-)Zf>n|Zn{ahqkf#<2N86c&Nxo4Fh%8INH)!j zMwsZj)Snshg(mbWtvvy^tw&!^4|6FuTuX)dc7|Sa$IG_ip_PHX#%Cu#^Tj2U(>=cY z%})_?ns?#x*h-9G3}7#EBQP+bgy$<78b;gkw*ZX{M8kz#2r={^S@!q4a~;vG7Y-NG zUD_pa*%AV@rojzri7Pu4<_#gUhT(J&d!O)|$+p(k5DC}yVdGxo&WTFfQ0%PaWceHW zJ?0^7kKrwHtM>k~z(%-zs-F#dU*r{%Amy=(3d|7YssjVGvA~Mou8;^Nc~o zE{#^)OB0srd0c_ov31etb{QRM>ilLiZc^9Xzkk_hXG1+WT(s_{Rv}*o7PC@3CrG@ zK5AjdlnDMdOk!_}jK+b!)**6f-QrWQ!i5SW&~Tamv}ha8yiqSOS7c7b1VP~x6q&3hiV9Y=kkrDoDQhD)A~=gXda69{l}Em5I2V&qFpv`Rs+x+D zl7mMZre8?tfFhWSG%#k;oz_yi0e{(m^-%6v)=bL^j4+w1=TaGS14oC?-jZL43 zR15g>nV82S;p`qkt0vl2A}s{8}GUe$EO6JAjM|ZQT`j>{D~DpkML`S z=RQ`E>Z}7PDYgEd`NQNs#nrq-XIeYm>^a)LR^MD-SwO6|Mpw`Fp@q2WK2ndj9WK&J z8$*$Ud@d4bS7{^AylMzcN6+G&zaRNt_;I?8^8{-g{>Jv0IqvnhFS6Dx@A;f=ITNhr ze9(Jdt7&gdepL}^k8QQM*qX6%*>7V;+W46d|EvzCKXnLU@1y?v_Zdob3S$>ztP5Bx zX6;SRR?)4|#ou+J#p)mC;uTiQ@j89pDDJ8UrP!tFfSzkGddYy%%i>Ha3a%olxl&#+ zI_4^>31O~+R)E<=2|6G7u)mQ7^hCGS6gd7)W;+l5Tt;JH-h~TnjVtbyREB);7#+?+ zK&k7dCo9-`i`jq|0!)<#`193y#p#($<6_ zuv!RZ1X2qQUbJCQ9XudzRP2 z(LPKdliXHjhUxBI?xEmUl)0YJ-0&c~md7uNR->{U$CYRTR4Qn16=wrc4dCXQE0Fr(J$<>+MJ&gP zMh{qt_bE3ronYmS2Z@V7p8`1rrkxv|;t4*%z$TvNy^J!E?9WMh6p`vh=duRGgp;it zwt3_K^n>dfm@st03N1NW|2e*YM%kDErY#)^0L^lT!?n4w;c^;=;69)FlOZd-cUwh{ z6&aq(NzxydIcxs!;0Ee&VgJvo=M>PtvE!d1;R3J<5^yP;)vPs0_O3xl%qSS76W-Jd z=A>offjxQTILX*|xx~V?Rw1IjCJ{lb#U#-QwDtlFT`f^2Mw)nno1L$h{VC1=H#zcm zMD*4`+4@IBxEZl3N4Q0Ptyirzi-^v0jar2W_ZYOs5c#*NwPq2~`!__^Xpa1?YQfjS zVe22O7B?eS<;WUE(+SL`o9DT0{j?a^k2NuF7^H8+rjGhnx)>A zuNBK3+yR`=M9VL5>G28EJUpAtOwdTIzvEj6QjB$j_zUq}cGYtE3%xbD3i3c}<(>+O13 z#aB})u2l`mQ%a=T+O2)mk!a!G-wuf9!FmwtzM+$@rkX_~B>q(DL;^~Tv|ZRf-D$A- zx|?q;clIUI4g}AiKex*sb;&$CfAVpaReQ2>3Aw-MVU?49sdbq+p)12Wz?sg+ZjF_w z3;0Of=RL%ey_aTG$HX^BJuEVldNWWaA*N>8BB-w*^>y^#mJI!ngYmNZ7mCa>jjW0= zeIwD9fV}PCRf?35ly2P1n*rOd+)*?>dodkBvb?ZAAa&oxWZd*F+JR@?K6TFE@#rl9u!*?sGhj$*}+?ojN3zfc@gSR-~0C2wGxlVm8n@-7(z#? zFr~qFQoQiu#olw8Ct6f*61#Sk+SQya`lNWgz_BsNh@uzRXb?T8=3o@Nn2#UdiUZ+38;d-=H&o;;arcMEmnBklcUd{UUW1ET67Te{_DrF z#j^A&$A)~+mA=Mbzqh0&r>0&kFDRZ-+);UcGpXmokH^|>{7g$LD>4`wg&tIRrjEzw zgb>Lq`%b;X?D2Y@OB?I92nxEX?v+%Udo%b)M!oN((Y*xOO9jRWMzibV9d896n0@ym z^Y|5aLn&R)+%SHK`Uk@_*}fg?L-zSi9o9T?RaDmI-C#}g*(42t+Mk&}9}H6EwY}l@ zR<4S_)}&ErZZBdx_nh-nEXKtssl1*14g`F(8>o3^2Y zi`;$ko42r{#vk4e8g7a_si6vk^?3pKi%rRoPgj?snqFNr*_NbO5=7@yKK@;c*QHR; zf7-btbIJ0MaB@a}Z;wknmP~E_6cq^yjJcWSpF^&Gh7>iUM{gBbFjI#NuNf3|YW10k+8P z?_Z*;`PW6)JgayELsrI0?0%3aZ_wg?YP>h^l%WneYYyPmTVf(hwrV)?LE3$Y2N#$ji;ZqOFSNxw?ri5bZis)VZe1Ev zpdejP>`zaEK$0D9`1K9exU^#RoNx2MWW?36hYc?;su@Je<{bQ0q+i}9YGIeyUa<#0nq zR~8oOoC2*V$Tnp_Ek3^PYCQsRlEPLw9w=U%cv>Rx`z_unAx*pLLy2lmjX~N0Gp#4kKDi(LqxG|%35MyS5+qiztP_ZroyKIm)hTrE!klK4F6ldg>L zMMCGfGnb8IUga7phIW`Ii?^36N=ToX#}e+wZ5Nf0Fn)C_Q*Kvej&ITo>4AT-m z8HME{#qIZU?LX@yGdVhOIxcxQ_f6g(PR|3tz5V2Y`TR@dt+ z8hL{r<^#9^bTgZ@4vqeTfyNI-X+Gr?ez9}>882M`GOw;{O%^SZ&wR{dNskU!MnAz+ zZq1zt1}6kJh)m67HiD_NuHUnJFN647v*>%vox*!hzP%*8SGZ5qREmkT>uw!L5J15R)=raWi|tVM?L^B%d6kq zG6)&H8~-SAa_Y%t)VN&6h^801MY-v^s{O3cKu0^fv`O8SwUwu>ZMY^9xA2RbPq=QS zaD`1p#`LQ}HdX;*m} z?+Ewkl|Nf(U~d0}qh7jmEc!bR_Uj?zjru;2D?+T9R8I}t%3be@%uGLg26GujM@47V z!U2AnqZA9f$g?AtNj(v9(n?W3_Q*X$LyKonr3z&GB<`HK zBdSO0mJV|l(7j#J&h*6EnNi)ZCE+gUC&=oH_bXrnk+tA1wdst$0BKlSvUYFcI&8)B zG6JjC8b4qS6pl%Jf<3Dv8>FdQA34>jU}G-x^|a=uhAzRf#ROJUkyga;he$s3Fpb@z z+*wfk8N|G{sg%+`a^uwd2)j2)ipDLWr!Nz`7UV-iURliEtzP1dyA*R;eqA?&)Rm!3 zudlKE1UdWdi;RzR1HO5KxD`SK~`tWDm|a%Sd+^T#-19FLh0AIFg#&=^JS+ z)y{tFi{Ih_9;Hy%q)rHfyNHAnGENc}b|g)`5V-x#>YOD&Cg-8^_B9@06g#Gum~&GmZl)41wJEioz{?);1q+9?hReAn zwYWYNJ3~yRv)=YA0OyFfz0iEB<2l@h0-ZC;v+fdxerM~n+#!NV_OH8}-B_&g1&COEmruOvl_`RSu!=?0Z06$egb zBkFCtF0NwhTpTAkO5!mq_{91cU7Z2P~gUhv64$Q5+aiu5y9vF{CdsI z_pyd=b(q+s?!iDvZCUXCz)y$UMjaZ1?4Rp{`&vknY)SBWoJdT4ugQEzb#G(TOFdS! z?|uw)6V^eF;lxId6&Grb0lxcuLUFw(rh4bKnkK*RZ=?jVTUot7SMcZuWoq=@cMzjpba}@@9$m~3viOJn%A8m>R zcU<^feOEfJUih3wj%_U9zr6-zt9Lgc0)9sW5AfgXI9~{=Wp)0MY-$?aOpLsyMFP0% z(V%B;XKE3E^h5Two0oFXb=o%*!K5qhvR%l@GJU6WmB<$+KP^k7o^D|s0}8=^Qs6N$ LG)GsWoWuSFD&yV4 literal 0 HcmV?d00001 diff --git a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/README.md b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/README.md new file mode 100644 index 000000000..485a82d86 --- /dev/null +++ b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/README.md @@ -0,0 +1,41 @@ +# [1001.Grid Illumination][title] + +## Description +You are given a **0-indexed** `m x n` matrix `grid` consisting of **positive** integers. + +You can start at **any** cell in the first column of the matrix, and traverse the grid in the following way: + +- From a cell `(row, col)`, you can move to any of the cells: `(row - 1, col + 1)`, `(row, col + 1)` and `(row + 1, col + 1)` such that the value of the cell you move to, should be **strictly** bigger than the value of the current cell. + +Return the **maximum** number of **moves** that you can perform. + +**Example 1:** + +![1](./1.png) + +``` +Input: grid = [[2,4,3,5],[5,4,9,3],[3,4,2,11],[10,9,13,15]] +Output: 3 +Explanation: We can start at the cell (0, 0) and make the following moves: +- (0, 0) -> (0, 1). +- (0, 1) -> (1, 2). +- (1, 2) -> (2, 3). +It can be shown that it is the maximum number of moves that can be made. +``` + +**Example 2:** + +![2](./2.png) + +``` +Input: grid = [[3,2,4],[2,1,9],[1,1,7]] +Output: 0 +Explanation: Starting from any cell in the first column we cannot perform any moves. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/grid-illumination/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go index d115ccf5e..71e4f5d66 100755 --- a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go +++ b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + rows, cols := len(grid), len(grid[0]) + dp := make([][]int, rows) + for i := range rows { + dp[i] = make([]int, cols) + } + ans := 0 + for j := cols - 2; j >= 0; j-- { + for i := 0; i < rows; i++ { + if i-1 >= 0 && grid[i-1][j+1] > grid[i][j] { + dp[i][j] = max(dp[i][j], dp[i-1][j+1]+1) + } + if grid[i][j+1] > grid[i][j] { + dp[i][j] = max(dp[i][j], dp[i][j+1]+1) + } + if i+1 < rows && grid[i+1][j+1] > grid[i][j] { + dp[i][j] = max(dp[i][j], dp[i+1][j+1]+1) + } + } + } + for i := 0; i < rows; i++ { + ans = max(ans, dp[i][0]) + } + return ans } diff --git a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution_test.go b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution_test.go index 14ff50eb4..9f3ebcc4c 100755 --- a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution_test.go +++ b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/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{{2, 3, 4, 5}, {5, 4, 9, 3}, {3, 4, 2, 11}, {10, 9, 13, 15}}, 3}, + {"TestCase2", [][]int{{3, 2, 4}, {2, 1, 9}, {1, 1, 7}}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b37dce97d2db91997d95a58d3ef63b97c5caf74e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 30 Oct 2024 09:07:55 +0800 Subject: [PATCH 099/450] Add solution and test-cases for problem 1671 --- .../README.md | 31 ++++++++-------- .../Solution.go | 35 +++++++++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 56 insertions(+), 23 deletions(-) diff --git a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md index 24e6f92bb..c805eb70a 100755 --- a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md +++ b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md @@ -1,28 +1,31 @@ # [1671.Minimum Number of Removals to Make Mountain Array][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 may recall that an array `arr` is a **mountain array** if and only if: + +- `arr.length >= 3` +- There exists some index `i` (**0-indexed**) with `0 < i < arr.length - 1` such that: + + - `arr[0] < arr[1] < ... < arr[i - 1] < arr[i]` + - `arr[i] > arr[i + 1] > ... > arr[arr.length - 1]` + +Given an integer array `nums`, return the **minimum** number of elements to remove to make `nums` a **mountain array**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,1] +Output: 0 +Explanation: The array itself is a mountain array so we do not need to remove any elements. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Number of Removals to Make Mountain Array -```go ``` - +Input: nums = [2,1,1,5,6,2,3,1] +Output: 3 +Explanation: One solution is to remove the elements at indices 0, 1, and 5, making the array nums = [1,5,6,3,1]. +``` ## 结语 diff --git a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go index d115ccf5e..1bdebad00 100644 --- a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go +++ b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + l := len(nums) + if l < 3 { + return 0 + } + left, right := make([]int, l), make([]int, l) + left[0] = 1 + for i := 1; i < l; i++ { + left[i] = 1 + for pre := i - 1; pre >= 0; pre-- { + if nums[pre] < nums[i] { + left[i] = max(left[i], left[pre]+1) + } + } + } + right[l-1] = 1 + for i := l - 2; i >= 0; i-- { + right[i] = 1 + for next := i + 1; next < l; next++ { + if nums[i] > nums[next] { + right[i] = max(right[i], right[next]+1) + } + } + } + ans := 0 + for i := 1; i < l-1; i++ { + if left[i] == 1 || right[i] == 1 { + continue + } + now := left[i] + right[i] - 1 + ans = max(ans, now) + } + return l - ans } diff --git a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution_test.go b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution_test.go index 14ff50eb4..0ac25d4f9 100644 --- a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution_test.go +++ b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/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, 3, 1}, 0}, + {"TestCase3", []int{2, 1, 1, 5, 6, 2, 3, 1}, 3}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 92ebe8d15b20fb2946eef2c0e18464ebe54fdb2f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 2 Nov 2024 09:38:37 +0800 Subject: [PATCH 100/450] Add solution and test-cases for problem 2490 --- .../2490.Circular-Sentence/README.md | 51 ++++++++++++++----- .../2490.Circular-Sentence/Solution.go | 15 +++++- .../2490.Circular-Sentence/Solution_test.go | 12 ++--- 3 files changed, 57 insertions(+), 21 deletions(-) diff --git a/leetcode/2401-2500/2490.Circular-Sentence/README.md b/leetcode/2401-2500/2490.Circular-Sentence/README.md index b03d52c8d..68f11317f 100755 --- a/leetcode/2401-2500/2490.Circular-Sentence/README.md +++ b/leetcode/2401-2500/2490.Circular-Sentence/README.md @@ -1,28 +1,53 @@ # [2490.Circular Sentence][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 +A **sentence** is a list of words that are separated by a **single** space with no leading or trailing spaces. + +- For example, `"Hello World"`, `"HELLO"`, `"hello world hello world"` are all sentences. + +Words consist of **only** uppercase and lowercase English letters. Uppercase and lowercase English letters are considered different. + +A sentence is **circular** if: + +- The last character of a word is equal to the first character of the next word. +- The last character of the last word is equal to the first character of the first word. + +For example, `"leetcode exercises sound delightful"`, `"eetcode"`, `"leetcode eats soul"` are all circular sentences. However, `"Leetcode is cool"`, `"happy Leetcode"`, `"Leetcode"` and `"I like Leetcode"` are **not** circular sentences. + +Given a string `sentence`, return `true` if it is circular. Otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: sentence = "leetcode exercises sound delightful" +Output: true +Explanation: The words in sentence are ["leetcode", "exercises", "sound", "delightful"]. +- leetcode's last character is equal to exercises's first character. +- exercises's last character is equal to sound's first character. +- sound's last character is equal to delightful's first character. +- delightful's last character is equal to leetcode's first character. +The sentence is circular. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Circular Sentence -```go +``` +Input: sentence = "eetcode" +Output: true +Explanation: The words in sentence are ["eetcode"]. +- eetcode's last character is equal to eetcode's first character. +The sentence is circular. ``` +**Example 3:** + +``` +Input: sentence = "Leetcode is cool" +Output: false +Explanation: The words in sentence are ["Leetcode", "is", "cool"]. +- Leetcode's last character is not equal to is's first character. +The sentence is not circular. +``` ## 结语 diff --git a/leetcode/2401-2500/2490.Circular-Sentence/Solution.go b/leetcode/2401-2500/2490.Circular-Sentence/Solution.go index d115ccf5e..91057f2c4 100644 --- a/leetcode/2401-2500/2490.Circular-Sentence/Solution.go +++ b/leetcode/2401-2500/2490.Circular-Sentence/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(sentence string) bool { + l := len(sentence) + if sentence[0] != sentence[l-1] { + return false + } + for i := range sentence { + if sentence[i] == ' ' { + if sentence[i-1] != sentence[i+1] { + return false + } + } + } + return true } diff --git a/leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go b/leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go index 14ff50eb4..68f7b1bc3 100644 --- a/leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go +++ b/leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "leetcode exercises sound delightful", true}, + {"TestCase2", "eetcode", true}, + {"TestCase3", "Leetcode is cool", false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b1b387240cc0fc98f1b285b6385c217f7915f886 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 4 Nov 2024 09:06:17 +0800 Subject: [PATCH 101/450] Add solution and test-cases for problem 3163 --- .../3163.String-Compression-III/README.md | 42 +++++++++++++------ .../3163.String-Compression-III/Solution.go | 32 +++++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 65 insertions(+), 22 deletions(-) diff --git a/leetcode/3101-3200/3163.String-Compression-III/README.md b/leetcode/3101-3200/3163.String-Compression-III/README.md index cef15e25f..09540cf49 100755 --- a/leetcode/3101-3200/3163.String-Compression-III/README.md +++ b/leetcode/3101-3200/3163.String-Compression-III/README.md @@ -1,28 +1,44 @@ # [3163.String Compression III][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 +Given a string `word`, compress it using the following algorithm: + +- Begin with an empty string `comp`. While `word` is **not** empty, use the following operation: + + - Remove a maximum length prefix of `word` made of a single character `c` repeating **at most** 9 times. + - Append the length of the prefix followed by `c` to `comp`. + +Return the string `comp`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: word = "abcde" + +Output: "1a1b1c1d1e" -## 题意 -> ... +Explanation: -## 题解 +Initially, comp = "". Apply the operation 5 times, choosing "a", "b", "c", "d", and "e" as the prefix in each operation. -### 思路1 -> ... -String Compression III -```go +For each prefix, append "1" followed by the character to comp. ``` +**Example 2:** + +``` +Input: word = "aaaaaaaaaaaaaabb" + +Output: "9a5a2b" + +Explanation: + +Initially, comp = "". Apply the operation 3 times, choosing "aaaaaaaaa", "aaaaa", and "bb" as the prefix in each operation. + +For prefix "aaaaaaaaa", append "9" followed by "a" to comp. +For prefix "aaaaa", append "5" followed by "a" to comp. +For prefix "bb", append "2" followed by "b" to comp. +``` ## 结语 diff --git a/leetcode/3101-3200/3163.String-Compression-III/Solution.go b/leetcode/3101-3200/3163.String-Compression-III/Solution.go index d115ccf5e..649eb3f97 100644 --- a/leetcode/3101-3200/3163.String-Compression-III/Solution.go +++ b/leetcode/3101-3200/3163.String-Compression-III/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(word string) string { + buf := strings.Builder{} + count := uint8(1) + bs := []byte(word) + pre := bs[0] + for i := 1; i < len(bs); i++ { + b := bs[i] + if b == pre { + count++ + if count == 9 { + buf.WriteByte(count + '0') + buf.WriteByte(b) + count = 0 + } + continue + } + if count != 0 { + buf.WriteByte(count + '0') + buf.WriteByte(pre) + } + pre = b + count = 1 + } + if count != 0 { + buf.WriteByte(count + '0') + buf.WriteByte(pre) + } + return buf.String() } diff --git a/leetcode/3101-3200/3163.String-Compression-III/Solution_test.go b/leetcode/3101-3200/3163.String-Compression-III/Solution_test.go index 14ff50eb4..779084f32 100644 --- a/leetcode/3101-3200/3163.String-Compression-III/Solution_test.go +++ b/leetcode/3101-3200/3163.String-Compression-III/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcde", "1a1b1c1d1e"}, + {"TestCase2", "aaaaaaaaaaaaaabb", "9a5a2b"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ffba06c9deb9d94cefaf3426c8e7d7f5b2913b3b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 5 Nov 2024 09:28:43 +0800 Subject: [PATCH 102/450] Add solution and test-cases for problem 2914 --- .../README.md | 42 +++++++++++++------ .../Solution.go | 24 ++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/README.md b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/README.md index f0661fed0..630af23da 100755 --- a/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/README.md +++ b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/README.md @@ -1,28 +1,44 @@ # [2914.Minimum Number of Changes to Make Binary String Beautiful][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 a **0-indexed** binary string `s` having an even length. + +A string is **beautiful** if it's possible to partition it into one or more substrings such that: + +- Each substring has an **even length**. +- Each substring contains **only** `1`'s or **only** `0`'s. + +You can change any character in `s` to `0` or `1`. + +Return the **minimum** number of changes required to make the string `s` beautiful. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "1001" +Output: 2 +Explanation: We change s[1] to 1 and s[3] to 0 to get string "1100". +It can be seen that the string "1100" is beautiful because we can partition it into "11|00". +It can be proven that 2 is the minimum number of changes needed to make the string beautiful. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Number of Changes to Make Binary String Beautiful -```go ``` +Input: s = "10" +Output: 1 +Explanation: We change s[1] to 1 to get string "11". +It can be seen that the string "11" is beautiful because we can partition it into "11". +It can be proven that 1 is the minimum number of changes needed to make the string beautiful. +``` + +**Example 3:** +``` +Input: s = "0000" +Output: 0 +Explanation: We don't need to make any changes as the string "0000" is beautiful already. +``` ## 结语 diff --git a/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution.go b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution.go index d115ccf5e..b7c4444b9 100644 --- a/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution.go +++ b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + ans := 0 + cur := s[0] + c := 1 + for i := 1; i < len(s); i++ { + if s[i] == cur { + c = 1 - c + continue + } + if c == 0 { + c = 1 + cur = s[i] + continue + } + ans++ + i++ + if i != len(s) { + cur = s[i] + c = 1 + } + } + return ans } diff --git a/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution_test.go b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution_test.go index 14ff50eb4..02406c9f2 100644 --- a/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution_test.go +++ b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "1001", 2}, + {"TestCase2", "10", 1}, + {"TestCase3", "0000", 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 38dd79304bf2f647266474ba6e2c05a21088ffb8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 6 Nov 2024 09:00:39 +0800 Subject: [PATCH 103/450] Add solution and test-cases for problem 3011 --- .../README.md | 40 +++++++++++++------ .../Solution.go | 33 ++++++++++++++- .../Solution_test.go | 12 +++--- 3 files changed, 64 insertions(+), 21 deletions(-) diff --git a/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/README.md b/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/README.md index cba6d1063..1fc5c525f 100755 --- a/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/README.md +++ b/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/README.md @@ -1,28 +1,42 @@ # [3011.Find if Array Can Be Sorted][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 a **0-indexed** array of **positive** integers `nums`. + +In one **operation**, you can swap any two **adjacent** elements if they have the **same** number of `set bits`. You are allowed to do this operation **any** number of times (**including zero**). + +Return `true` if you can sort the array, else return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [8,4,2,30,15] +Output: true +Explanation: Let's look at the binary representation of every element. The numbers 2, 4, and 8 have one set bit each with binary representation "10", "100", and "1000" respectively. The numbers 15 and 30 have four set bits each with binary representation "1111" and "11110". +We can sort the array using 4 operations: +- Swap nums[0] with nums[1]. This operation is valid because 8 and 4 have one set bit each. The array becomes [4,8,2,30,15]. +- Swap nums[1] with nums[2]. This operation is valid because 8 and 2 have one set bit each. The array becomes [4,2,8,30,15]. +- Swap nums[0] with nums[1]. This operation is valid because 4 and 2 have one set bit each. The array becomes [2,4,8,30,15]. +- Swap nums[3] with nums[4]. This operation is valid because 30 and 15 have four set bits each. The array becomes [2,4,8,15,30]. +The array has become sorted, hence we return true. +Note that there may be other sequences of operations which also sort the array. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find if Array Can Be Sorted -```go ``` +Input: nums = [1,2,3,4,5] +Output: true +Explanation: The array is already sorted, hence we return true. +``` + +**Example 3:** +``` +Input: nums = [3,16,8,4,2] +Output: false +Explanation: It can be shown that it is not possible to sort the input array using any number of operations. +``` ## 结语 diff --git a/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution.go b/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution.go index d115ccf5e..8af17cd12 100644 --- a/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution.go +++ b/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +func countOfOne3011(n int) int { + c := 0 + for n != 0 { + c++ + n = n & (n - 1) + } + return c +} + +func Solution(nums []int) bool { + ma, mi := nums[0], nums[0] + cur := countOfOne3011(nums[0]) + list := make([][2]int, 0) + for i := 1; i < len(nums); i++ { + now := countOfOne3011(nums[i]) + if now == cur { + ma = max(ma, nums[i]) + mi = min(mi, nums[i]) + continue + } + list = append(list, [2]int{ma, mi}) + cur = now + ma, mi = nums[i], nums[i] + } + list = append(list, [2]int{ma, mi}) + for i := 1; i < len(list); i++ { + if list[i][1] <= list[i-1][0] { + return false + } + } + return true } diff --git a/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution_test.go b/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution_test.go index 14ff50eb4..59250c3e5 100644 --- a/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution_test.go +++ b/leetcode/3001-3100/3011.Find-if-Array-Can-Be-Sorted/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{8, 4, 2, 30, 15}, true}, + {"TestCase2", []int{1, 2, 3, 4, 5}, true}, + {"TestCase3", []int{3, 16, 8, 4, 3}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5e3c6344d3dab7a51413b325a850c8c8ab93711a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 8 Nov 2024 09:15:17 +0800 Subject: [PATCH 104/450] Add solution and test-cases for problem 617 --- .../0617.Merge-Two-Binary-Trees/README.md | 31 ++++++------ .../0617.Merge-Two-Binary-Trees/Solution.go | 18 ++++++- .../Solution_test.go | 47 ++++++++++++++---- .../0617.Merge-Two-Binary-Trees/merge.jpg | Bin 0 -> 34675 bytes 4 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 leetcode/601-700/0617.Merge-Two-Binary-Trees/merge.jpg diff --git a/leetcode/601-700/0617.Merge-Two-Binary-Trees/README.md b/leetcode/601-700/0617.Merge-Two-Binary-Trees/README.md index 6a40013fa..8c01cc579 100644 --- a/leetcode/601-700/0617.Merge-Two-Binary-Trees/README.md +++ b/leetcode/601-700/0617.Merge-Two-Binary-Trees/README.md @@ -1,28 +1,29 @@ # [617.Merge Two Binary Trees][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 two binary trees `root1` and `root2`. -**Example 1:** +Imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge the two trees into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of the new tree. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Return the merged tree. + +**Note**: The merging process must start from the root nodes of both trees. -## 题意 -> ... +**Example 1:** -## 题解 +![1](./merge.jpg) -### 思路1 -> ... -Merge Two Binary Trees -```go ``` +Input: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7] +Output: [3,4,5,5,4,null,7] +``` + +**Example 2:** +``` +Input: root1 = [1], root2 = [1,2] +Output: [2,2] +``` ## 结语 diff --git a/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution.go b/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution.go index d115ccf5e..c8b50409b 100644 --- a/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution.go +++ b/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root1 *TreeNode, root2 *TreeNode) *TreeNode { + if root1 == nil { + return root2 + } + if root2 == nil { + return root1 + } + r := &TreeNode{Val: root1.Val + root2.Val} + r.Left = Solution(root1.Left, root2.Left) + r.Right = Solution(root1.Right, root2.Right) + return r } diff --git a/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution_test.go b/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution_test.go index 14ff50eb4..63dd57b5d 100644 --- a/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution_test.go +++ b/leetcode/601-700/0617.Merge-Two-Binary-Trees/Solution_test.go @@ -10,30 +10,57 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + r1, r2 *TreeNode + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 5}, + }, + Right: &TreeNode{Val: 2}, + }, &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 7}, + }, + }, &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 5}, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{ + Val: 5, + Right: &TreeNode{Val: 7}, + }, + }}, + {"TestCase2", &TreeNode{Val: 1}, &TreeNode{Val: 1, Left: &TreeNode{Val: 2}}, &TreeNode{Val: 2, Left: &TreeNode{Val: 2}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.r1, c.r2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.r1, c.r2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0617.Merge-Two-Binary-Trees/merge.jpg b/leetcode/601-700/0617.Merge-Two-Binary-Trees/merge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5d33535a8c835e724d5dc0bdde515396576e285 GIT binary patch literal 34675 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 Date: Sat, 9 Nov 2024 16:51:52 +0800 Subject: [PATCH 105/450] Add solution and test-cases for problem 3133 --- .../3133.Minimum-Array-End/README.md | 31 ++++++++++-------- .../3133.Minimum-Array-End/Solution.go | 32 +++++++++++++++++-- .../3133.Minimum-Array-End/Solution_test.go | 19 ++++++----- 3 files changed, 57 insertions(+), 25 deletions(-) diff --git a/leetcode/3101-3200/3133.Minimum-Array-End/README.md b/leetcode/3101-3200/3133.Minimum-Array-End/README.md index 785a87f95..825dc1744 100755 --- a/leetcode/3101-3200/3133.Minimum-Array-End/README.md +++ b/leetcode/3101-3200/3133.Minimum-Array-End/README.md @@ -1,28 +1,33 @@ # [3133.Minimum Array End][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 two integers `n` and `x`. You have to construct an array of **positive** integers `nums` of size `n` where for every `0 <= i < n - 1`, `nums[i + 1]` is **greater than** `nums[i]`, and the result of the bitwise `AND` operation between all elements of `nums` is `x`. + +Return the **minimum** possible value of `nums[n - 1]`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: n = 3, x = 4 -## 题意 -> ... +Output: 6 -## 题解 +Explanation: -### 思路1 -> ... -Minimum Array End -```go +nums can be [4,5,6] and its last element is 6. ``` +**Example 2:** + +``` +Input: n = 2, x = 7 + +Output: 15 + +Explanation: + +nums can be [7,15] and its last element is 15. +``` ## 结语 diff --git a/leetcode/3101-3200/3133.Minimum-Array-End/Solution.go b/leetcode/3101-3200/3133.Minimum-Array-End/Solution.go index d115ccf5e..eee6811a6 100644 --- a/leetcode/3101-3200/3133.Minimum-Array-End/Solution.go +++ b/leetcode/3101-3200/3133.Minimum-Array-End/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, x int) int64 { + ans := int64(x) + if n == 1 { + return ans + } + nn := int64(n) - 1 + zero := 0 + c := int64(0) + for { + zero++ + c = 1 << (zero - 1) + if nn <= c { + break + } + nn -= c + } + c |= (nn - 1) + cur := int64(1) + for ; c > 0; c >>= 1 { + for ans&cur != 0 { + cur <<= 1 + } + now := c & 1 + if now == 1 { + ans |= cur + continue + } + cur <<= 1 + } + return ans } diff --git a/leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go b/leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go index 14ff50eb4..bea26a462 100644 --- a/leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go +++ b/leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, x int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 4, 6}, + {"TestCase2", 2, 7, 15}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.x) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.x) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0ea4c036ccaf9119e95321cad9723468e87b52d4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Nov 2024 13:05:33 +0800 Subject: [PATCH 106/450] Add solution and test-cases for problem 3097 --- .../README.md | 43 +++++++++++----- .../Solution.go | 51 ++++++++++++++++++- .../Solution_test.go | 21 ++++---- 3 files changed, 91 insertions(+), 24 deletions(-) diff --git a/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/README.md b/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/README.md index d6f546b15..6cdfa04d0 100755 --- a/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/README.md +++ b/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/README.md @@ -1,28 +1,47 @@ # [3097.Shortest Subarray With OR at Least K II][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 `nums` of **non-negative** integers and an integer `k`. + +An array is called **special** if the bitwise `OR` of all of its elements is **at least** `k`. + +Return the length of the **shortest special non-empty** subarray of `nums`, or return `-1` if no special subarray exists. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3], k = 2 + +Output: 1 + +Explanation: + +The subarray [3] has OR value of 3. Hence, we return 1. ``` -## 题意 -> ... +**Example 2:** + +``` +Input: nums = [2,1,8], k = 10 -## 题解 +Output: 3 + +Explanation: + +The subarray [2,1,8] has OR value of 11. Hence, we return 3. +``` + +**Example 3:** -### 思路1 -> ... -Shortest Subarray With OR at Least K II -```go ``` +Input: nums = [1,2], k = 0 +Output: 1 + +Explanation: + +The subarray [1] has OR value of 1. Hence, we return 1. +``` ## 结语 diff --git a/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution.go b/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution.go index d115ccf5e..d5537dce9 100644 --- a/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution.go +++ b/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution.go @@ -1,5 +1,52 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) int { + // 统计一个范围的1的位置的个数, 直接ok操作,没有个数统计,应该是没法滑动窗口,我没想到怎么滑动 + // 转成数字看是否比k大 + bitCount := [32]int{} + var ( + setBit func(int, int) + toNumber func() int + ) + setBit = func(n, del int) { + one := 1 + for i := 0; i < 32; i++ { + if n&one == one { + bitCount[i] += del + } + one <<= 1 + } + } + toNumber = func() int { + res := 0 + cur := 1 + for i := 0; i < 32; i++ { + if bitCount[i] > 0 { + res += cur + } + cur <<= 1 + } + return res + } + start, end := 0, 0 + ans := -1 + for ; end < len(nums); end++ { + setBit(nums[end], 1) + r := toNumber() + if r < k { + continue + } + for ; start < end; start++ { + setBit(nums[start], -1) + if toNumber() < k { + setBit(nums[start], 1) + break + } + } + tmpL := end - start + 1 + if ans == -1 || tmpL < ans { + ans = tmpL + } + } + return ans } diff --git a/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution_test.go b/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution_test.go index 14ff50eb4..2acca2243 100644 --- a/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution_test.go +++ b/leetcode/3001-3100/3097.Shortest-Subarray-With-OR-at-Least-K-II/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3}, 2, 1}, + {"TestCase2", []int{2, 1, 8}, 10, 3}, + {"TestCase3", []int{1, 2}, 0, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7a003e1e95b8999bd37c7481d02b14aac61f5228 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 11 Nov 2024 09:32:09 +0800 Subject: [PATCH 107/450] Add solution and test-cases for problem 2601 --- .../README.md | 45 +++++++++++++++++++ .../Solution.go | 37 ++++++++++++++- .../Solution_test.go | 12 ++--- 3 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 leetcode/2601-2700/2601.Prime-Subtraction-Operation/README.md diff --git a/leetcode/2601-2700/2601.Prime-Subtraction-Operation/README.md b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/README.md new file mode 100644 index 000000000..642f31ad5 --- /dev/null +++ b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/README.md @@ -0,0 +1,45 @@ +# [2601.Prime Subtraction Operation][title] + +## Description +You are given a **0-indexed** integer array `nums` of length `n`. + +You can perform the following operation as many times as you want: + +- Pick an index `i` that you haven’t picked before, and pick a prime `p` **strictly less than** `nums[i]`, then subtract `p` from `nums[i]`. + +Return true if you can make `nums` a strictly increasing array using the above operation and false otherwise. + +A **strictly increasing array** is an array whose each element is strictly greater than its preceding element. + +**Example 1:** + +``` +Input: nums = [4,9,6,10] +Output: true +Explanation: In the first operation: Pick i = 0 and p = 3, and then subtract 3 from nums[0], so that nums becomes [1,9,6,10]. +In the second operation: i = 1, p = 7, subtract 7 from nums[1], so nums becomes equal to [1,2,6,10]. +After the second operation, nums is sorted in strictly increasing order, so the answer is true. +``` + +**Example 2:** + +``` +Input: nums = [6,8,11,12] +Output: true +Explanation: Initially nums is sorted in strictly increasing order, so we don't need to make any operations. +``` + +**Example 3:** + +``` +Input: nums = [5,8,3] +Output: false +Explanation: It can be proven that there is no way to perform operations to make nums sorted in strictly increasing order, so the answer is false. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/prime-subtraction-operation +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go index d115ccf5e..dd06ed7c2 100755 --- a/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go +++ b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func checkPrime(x int) bool { + for i := 2; i <= int(math.Sqrt(float64(x))); i++ { + if x%i == 0 { + return false + } + } + return true +} + +func Solution(nums []int) bool { + for i := 0; i < len(nums); i++ { + var bound int + if i == 0 { + bound = nums[0] + } else { + bound = nums[i] - nums[i-1] + } + + if bound <= 0 { + return false + } + + largestPrime := 0 + for j := bound - 1; j >= 2; j-- { + if checkPrime(j) { + largestPrime = j + break + } + } + + nums[i] = nums[i] - largestPrime + } + return true } diff --git a/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go index 14ff50eb4..3b546bbbc 100755 --- a/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go +++ b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 9, 6, 10}, true}, + {"TestCase2", []int{6, 8, 11, 12}, true}, + {"TestCase3", []int{5, 8, 3}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From febf8b23705729c9cb97686fb975665c149211cd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 12 Nov 2024 09:18:51 +0800 Subject: [PATCH 108/450] Add solution and test-cases for problem 2070 --- .../README.md | 44 ++++++++---- .../Solution.go | 72 ++++++++++++++++++- .../Solution_test.go | 23 +++--- 3 files changed, 113 insertions(+), 26 deletions(-) diff --git a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md index bd2a3ef12..b773e23f8 100755 --- a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md +++ b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md @@ -1,28 +1,46 @@ # [2070.Most Beautiful Item for Each Query][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 a 2D integer array `items` where `items[i] = [pricei, beautyi]` denotes the **price** and **beauty** of an item respectively. + +You are also given a **0-indexed** integer array `queries`. For each `queries[j]`, you want to determine the **maximum beauty** of an item whose **price** is **less than or equal** to `queries[j]`. If no such item exists, then the answer to this query is `0`. + +Return an array `answer` of the same length as `queries` where `answer[j]` is the answer to the `jth` query. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: items = [[1,2],[3,2],[2,4],[5,6],[3,5]], queries = [1,2,3,4,5,6] +Output: [2,4,5,5,6,6] +Explanation: +- For queries[0]=1, [1,2] is the only item which has price <= 1. Hence, the answer for this query is 2. +- For queries[1]=2, the items which can be considered are [1,2] and [2,4]. + The maximum beauty among them is 4. +- For queries[2]=3 and queries[3]=4, the items which can be considered are [1,2], [3,2], [2,4], and [3,5]. + The maximum beauty among them is 5. +- For queries[4]=5 and queries[5]=6, all items can be considered. + Hence, the answer for them is the maximum beauty of all items, i.e., 6. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Most Beautiful Item for Each Query -```go ``` +Input: items = [[1,2],[1,2],[1,3],[1,4]], queries = [1] +Output: [4] +Explanation: +The price of every item is equal to 1, so we choose the item with the maximum beauty 4. +Note that multiple items can have the same price and/or beauty. +``` + +**Example 3:** +``` +Input: items = [[10,1000]], queries = [5] +Output: [0] +Explanation: +No item has a price less than or equal to 5, so no item can be chosen. +Hence, the answer to the query is 0. +``` ## 结语 diff --git a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go index d115ccf5e..601ec5ed7 100644 --- a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go +++ b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go @@ -1,5 +1,73 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type segNode2070 struct { + l, r, m int + left, right *segNode2070 +} + +func buildSegTree2070(left, right int, nums []int, m map[int]int) *segNode2070 { + if left == right { + return &segNode2070{ + l: left, r: right, m: m[nums[left]], + } + } + + mid := (left + right) / 2 + leftChild := buildSegTree2070(left, mid, nums, m) + rightChild := buildSegTree2070(mid+1, right, nums, m) + + node := &segNode2070{ + l: left, r: right, m: max(leftChild.m, rightChild.m), + left: leftChild, right: rightChild, + } + return node +} +func queryMax2070(node *segNode2070, left, right int) int { + if node.l == left && node.r == right { + return node.m + } + + mid := (node.l + node.r) / 2 + + if right <= mid { + return queryMax2070(node.left, left, right) + } else if left > mid { + return queryMax2070(node.right, left, right) + } else { + leftMax := queryMax2070(node.left, left, mid) + rightMax := queryMax2070(node.right, mid+1, right) + return max(leftMax, rightMax) + } +} + +func Solution(items [][]int, queries []int) []int { + ans := make([]int, len(queries)) + p2b := make(map[int]int) + keys := make([]int, 0) + for _, item := range items { + p, b := item[0], item[1] + v, ok := p2b[p] + if !ok { + keys = append(keys, p) + } + if v < b { + p2b[p] = b + } + } + l := len(keys) + sort.Ints(keys) + tree := buildSegTree2070(0, l-1, keys, p2b) + for i, q := range queries { + idx := sort.Search(l, func(i int) bool { + return keys[i] > q + }) + if idx == 0 { + ans[i] = 0 + continue + } + ans[i] = queryMax2070(tree, 0, idx-1) + } + return ans } diff --git a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go index 14ff50eb4..9e35f9c18 100644 --- a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go +++ b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + items [][]int + queries []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}, {3, 2}, {2, 4}, {5, 6}, {3, 5}}, []int{1, 2, 3, 4, 5, 6}, []int{2, 4, 5, 5, 6, 6}}, + {"TestCase2", [][]int{{1, 2}, {1, 2}, {1, 3}, {1, 4}}, []int{1}, []int{4}}, + {"TestCase3", [][]int{{10, 1000}}, []int{5}, []int{0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.items, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.items, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 74dd1af58ddabd9eaa3c87fce990ccf7251514fd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 13 Nov 2024 09:27:42 +0800 Subject: [PATCH 109/450] Add solution and test-cases for problem 2563 --- .../README.md | 33 +++++++++++++++++++ .../Solution.go | 26 +++++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/README.md diff --git a/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/README.md b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/README.md new file mode 100644 index 000000000..010b772c6 --- /dev/null +++ b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/README.md @@ -0,0 +1,33 @@ +# [2563.Count the Number of Fair Pairs][title] + +## Description +Given a **0-indexed** integer array `nums` of size `n` and two integers `lower` and `upper`, return the number of fair pairs. + +A pair `(i, j)` is **fair** if: + +- `0 <= i < j < n`, and +- `lower <= nums[i] + nums[j] <= upper` + + +**Example 1:** + +``` +Input: nums = [0,1,7,4,4,5], lower = 3, upper = 6 +Output: 6 +Explanation: There are 6 fair pairs: (0,3), (0,4), (0,5), (1,3), (1,4), and (1,5). +``` + +**Example 2:** + +``` +Input: nums = [1,7,9,2,5], lower = 11, upper = 11 +Output: 1 +Explanation: There is a single fair pair: (2,3). +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-fair-pairs +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go index d115ccf5e..a4fb8135f 100755 --- a/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go +++ b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, lower, upper int) int64 { + sort.Ints(nums) + var ans int64 = 0 + l := len(nums) + for i := 0; i < len(nums); i++ { + // 1, 2, 3, 4 + tmpL := l - i - 1 + leftIndex := sort.Search(tmpL, func(ii int) bool { + return nums[i]+nums[ii+1+i] >= lower + }) + if leftIndex == tmpL { + continue + } + rightIndex := sort.Search(tmpL, func(ii int) bool { + return nums[i]+nums[ii+1+i] > upper + }) + if rightIndex == tmpL && nums[i]+nums[l-1] > upper { + continue + } + ans += int64(rightIndex - leftIndex) + } + return ans } diff --git a/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go index 14ff50eb4..46fe51f4f 100755 --- a/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go +++ b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + l, p int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 7, 4, 4, 5}, 3, 6, 6}, + {"TestCase2", []int{1, 7, 9, 2, 5}, 11, 11, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.l, c.p) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.nums, c.l, c.p) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4c61429361a7a71f0ddfde3d27886e6ef13ec505 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 14 Nov 2024 09:07:55 +0800 Subject: [PATCH 110/450] Add solution and test-cases for problem 2064 --- .../README.md | 45 +++++++++++++------ .../Solution.go | 36 ++++++++++++++- .../Solution_test.go | 23 +++++----- 3 files changed, 78 insertions(+), 26 deletions(-) diff --git a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md index 161871ba1..bec7f6c41 100755 --- a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md +++ b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md @@ -1,28 +1,47 @@ # [2064.Minimized Maximum of Products Distributed to Any Store][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 integer `n` indicating there are `n` specialty retail stores. There are `m` product types of varying amounts, which are given as a **0-indexed** integer array `quantities`, where `quantities[i]` represents the number of products of the `ith` product type. + +You need to distribute **all products** to the retail stores following these rules: + +- A store can only be given **at most one product type** but can be given **any** amount of it. +- After distribution, each store will have been given some number of products (possibly `0`). Let `x` represent the maximum number of products given to any store. You want `x` to be as small as possible, i.e., you want to **minimize** the **maximum** number of products that are given to any store. + +Return the minimum possible `x`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 6, quantities = [11,6] +Output: 3 +Explanation: One optimal way is: +- The 11 products of type 0 are distributed to the first four stores in these amounts: 2, 3, 3, 3 +- The 6 products of type 1 are distributed to the other two stores in these amounts: 3, 3 +The maximum number of products given to any store is max(2, 3, 3, 3, 3, 3) = 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimized Maximum of Products Distributed to Any Store -```go ``` +Input: n = 7, quantities = [15,10,10] +Output: 5 +Explanation: One optimal way is: +- The 15 products of type 0 are distributed to the first three stores in these amounts: 5, 5, 5 +- The 10 products of type 1 are distributed to the next two stores in these amounts: 5, 5 +- The 10 products of type 2 are distributed to the last two stores in these amounts: 5, 5 +The maximum number of products given to any store is max(5, 5, 5, 5, 5, 5, 5) = 5. +``` + +**Example 3:** +``` +Input: n = 1, quantities = [100000] +Output: 100000 +Explanation: The only optimal way is: +- The 100000 products of type 0 are distributed to the only store. +The maximum number of products given to any store is max(100000) = 100000. +``` ## 结语 diff --git a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go index d115ccf5e..49c54aa8f 100644 --- a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go +++ b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +import "slices" + +func Solution(n int, quantities []int) int { + m := slices.Max(quantities) + if n == len(quantities) { + return m + } + var ok func(int) bool + ok = func(x int) bool { + need := n + for _, n := range quantities { + a := n / x + if n%x != 0 { + a++ + } + if need < a { + return false + } + need -= a + } + return true + } + left, right := 1, m+1 + ans := 0 + for left < right { + mid := (left + right) / 2 + if ok(mid) { + right = mid + ans = mid + } else { + left = mid + 1 + } + } + return ans } diff --git a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go index 14ff50eb4..e43d6f72a 100644 --- a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go +++ b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + quantities []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 6, []int{11, 6}, 3}, + {"TestCase2", 7, []int{15, 10, 10}, 5}, + {"TestCase3", 1, []int{100000}, 100000}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.quantities) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.quantities) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 03fef0e0bfb0d72c74304fef28cf66b4233a2bef Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 15 Nov 2024 09:47:27 +0800 Subject: [PATCH 111/450] Add solution and test-cases for problem 1574 --- .../README.md | 34 ++++++----- .../Solution.go | 56 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 82 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md index 55c7d35d9..40ffed386 100755 --- a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md +++ b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md @@ -1,28 +1,36 @@ # [1574.Shortest Subarray to be Removed to Make Array Sorted][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 +Given an integer array `arr`, remove a subarray (can be empty) from `arr` such that the remaining elements in `arr` are **non-decreasing**. + +Return the length of the shortest subarray to remove. + +A **subarray** is a contiguous subsequence of the array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,2,3,10,4,2,3,5] +Output: 3 +Explanation: The shortest subarray we can remove is [10,4,2] of length 3. The remaining elements after that will be [1,2,3,3,5] which are sorted. +Another correct solution is to remove the subarray [3,10,4]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Shortest Subarray to be Removed to Make Array Sorted -```go ``` +Input: arr = [5,4,3,2,1] +Output: 4 +Explanation: Since the array is strictly decreasing, we can only keep a single element. Therefore we need to remove a subarray of length 4, either [5,4,3,2] or [4,3,2,1]. +``` + +**Example3 :** +``` +Input: arr = [1,2,3] +Output: 0 +Explanation: The array is already non-decreasing. We do not need to remove any elements. +``` ## 结语 diff --git a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go index d115ccf5e..6b4c7ed4d 100644 --- a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go +++ b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go @@ -1,5 +1,57 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func Solution(arr []int) int { + if sort.IsSorted(sort.IntSlice(arr)) { + return 0 + } + l := len(arr) + ll, rr := make([]int, l), make([]int, l) + ll[0] = 1 + for i := 1; i < l; i++ { + if arr[i] >= arr[i-1] { + ll[i] = ll[i-1] + 1 + continue + } + ll[i] = 1 + } + rr[l-1] = 1 + for i := l - 2; i >= 0; i-- { + if arr[i] <= arr[i+1] { + rr[i] = rr[i+1] + 1 + continue + } + rr[i] = 1 + } + + var ok func(int) bool + ok = func(length int) bool { + start, end := 0, length-1 + for ; end < l; start, end = start+1, end+1 { + lok := (start == 0 || ll[start-1] == start) + rok := (end == l-1 || rr[end+1] == l-end-1) + if lok && rok { + if start == 0 || end == l-1 || (arr[start-1] <= arr[end+1]) { + return true + } + continue + } + } + return false + } + left, right := 1, l+1 + ans := l - 1 + for left < right { + mid := (left + right) / 2 + if ok(mid) { + right = mid + ans = mid + } else { + left = mid + 1 + } + } + return ans } diff --git a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go index 14ff50eb4..0b11ab56e 100644 --- a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go +++ b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go @@ -10,12 +10,12 @@ 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, 3, 10, 4, 2, 3, 5}, 3}, + {"TestCase2", []int{5, 4, 3, 2, 1}, 4}, + {"TestCase3", []int{1, 2, 3}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 94ed8ea4708ebe615f5234dce8322a4665bc0ca8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 16 Nov 2024 12:49:49 +0800 Subject: [PATCH 112/450] Add solution and test-cases for problem 3254 --- .../README.md | 46 ++++++++++++++----- .../Solution.go | 22 ++++++++- .../Solution_test.go | 21 +++++---- 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md index 67f11bdeb..e93c296b1 100755 --- a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md +++ b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md @@ -1,28 +1,50 @@ # [3254.Find the Power of K-Size Subarrays I][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 integers `nums` of length `n` and a positive integer `k`. + +The **power** of an array is defined as: + +- Its **maximum** element if all of its elements are **consecutive** and **sorted** in **ascending** order. +- -1 otherwise. + +You need to find the **power** of all subarrays of `nums` of size `k`. + +Return an integer array `results` of size `n - k + 1`, where `results[i]` is the power of `nums[i..(i + k - 1)]`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4,3,2,5], k = 3 + +Output: [3,4,-1,-1,-1] + +Explanation: + +There are 5 subarrays of nums of size 3: + +[1, 2, 3] with the maximum element 3. +[2, 3, 4] with the maximum element 4. +[3, 4, 3] whose elements are not consecutive. +[4, 3, 2] whose elements are not sorted. +[3, 2, 5] whose elements are not consecutive. +``` + +**Example 2:** + ``` +Input: nums = [2,2,2,2,2], k = 4 -## 题意 -> ... +Output: [-1,-1] +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Find the Power of K-Size Subarrays I -```go ``` +Input: nums = [3,2,3,2,3,2], k = 2 +Output: [-1,3,-1,3,-1] +``` ## 结语 diff --git a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go index d115ccf5e..8ca72db5c 100644 --- a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go +++ b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) []int { + l := len(nums) + ml := make([]int, l) + ml[0] = 1 + for i := 1; i < l; i++ { + if nums[i]-nums[i-1] == 1 { + ml[i] = ml[i-1] + 1 + continue + } + ml[i] = 1 + } + ans := make([]int, l-k+1) + idx := 0 + for i := k - 1; i < l; i, idx = i+1, idx+1 { + ans[idx] = -1 + if ml[i] >= k { + ans[idx] = nums[i] + } + } + return ans } diff --git a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go index 14ff50eb4..8aa8c3324 100644 --- a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go +++ b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4, 3, 2, 5}, 3, []int{3, 4, -1, -1, -1}}, + {"TestCase2", []int{2, 2, 2, 2, 2}, 4, []int{-1, -1}}, + {"TestCase3", []int{3, 2, 3, 2, 3, 2}, 2, []int{-1, 3, -1, 3, -1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1928bd3b8d7bd2eeebc56401012abb2afe3f9b0f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 16 Nov 2024 18:45:13 +0800 Subject: [PATCH 113/450] Add solution and test-cases for problem 3255 --- .../README.md | 46 ++++++++++++++----- .../Solution.go | 22 ++++++++- .../Solution_test.go | 21 +++++---- 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md index 8d3be4f11..126aeb788 100755 --- a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md +++ b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md @@ -1,28 +1,50 @@ # [3255.Find the Power of K-Size Subarrays II][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 integers `nums` of length `n` and a positive integer `k`. + +The **power** of an array is defined as: + +- Its **maximum** element if all of its elements are **consecutive** and **sorted** in **ascending** order. +- -1 otherwise. + +You need to find the **power** of all subarrays of `nums` of size `k`. + +Return an integer array `results` of size `n - k + 1`, where `results[i]` is the power of `nums[i..(i + k - 1)]`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4,3,2,5], k = 3 + +Output: [3,4,-1,-1,-1] + +Explanation: + +There are 5 subarrays of nums of size 3: + +[1, 2, 3] with the maximum element 3. +[2, 3, 4] with the maximum element 4. +[3, 4, 3] whose elements are not consecutive. +[4, 3, 2] whose elements are not sorted. +[3, 2, 5] whose elements are not consecutive. +``` + +**Example 2:** + ``` +Input: nums = [2,2,2,2,2], k = 4 -## 题意 -> ... +Output: [-1,-1] +``` -## 题解 +**Example 2:** -### 思路1 -> ... -Find the Power of K-Size Subarrays II -```go ``` +Input: nums = [3,2,3,2,3,2], k = 2 +Output: [-1,3,-1,3,-1] +``` ## 结语 diff --git a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go index d115ccf5e..8ca72db5c 100644 --- a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go +++ b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) []int { + l := len(nums) + ml := make([]int, l) + ml[0] = 1 + for i := 1; i < l; i++ { + if nums[i]-nums[i-1] == 1 { + ml[i] = ml[i-1] + 1 + continue + } + ml[i] = 1 + } + ans := make([]int, l-k+1) + idx := 0 + for i := k - 1; i < l; i, idx = i+1, idx+1 { + ans[idx] = -1 + if ml[i] >= k { + ans[idx] = nums[i] + } + } + return ans } diff --git a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go index 14ff50eb4..8aa8c3324 100644 --- a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go +++ b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4, 3, 2, 5}, 3, []int{3, 4, -1, -1, -1}}, + {"TestCase2", []int{2, 2, 2, 2, 2}, 4, []int{-1, -1}}, + {"TestCase3", []int{3, 2, 3, 2, 3, 2}, 2, []int{-1, 3, -1, 3, -1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8c22e69bcb81ff603b067893abe64c0d8fb4494d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 17 Nov 2024 12:23:47 +0800 Subject: [PATCH 114/450] Add solution and test-cases for problem 862 --- .../README.md | 28 +++---- .../Solution.go | 77 ++++++++++++++++++- .../Solution_test.go | 46 ++++++++--- 3 files changed, 127 insertions(+), 24 deletions(-) diff --git a/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/README.md b/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/README.md index 536503029..3e5c38c57 100644 --- a/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/README.md +++ b/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/README.md @@ -1,28 +1,30 @@ # [862.Shortest Subarray with Sum at Least K][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 +Given an integer array `nums` and an integer `k`, return the length of the shortest non-empty **subarray** of `nums` with a sum of at least `k`. If there is no such **subarray**, return `-1`. + +A **subarray** is a **contiguous** part of an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1], k = 1 +Output: 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Shortest Subarray with Sum at Least K -```go +``` +Input: nums = [1,2], k = 4 +Output: -1 ``` +**Example 3:** + +``` +Input: nums = [2,-1,2], k = 3 +Output: 3 +``` ## 结语 diff --git a/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution.go b/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution.go index d115ccf5e..bcb606fb6 100644 --- a/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution.go +++ b/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution.go @@ -1,5 +1,80 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "container/list" + "math" +) + +func Solution(nums []int, k int) int { + n := len(nums) + prefixSum := make([]int, n+1) + for i := 0; i < n; i++ { + prefixSum[i+1] = prefixSum[i] + nums[i] + } + + minLength := math.MaxInt32 + deque := list.New() + + for i := 0; i <= n; i++ { + for deque.Len() > 0 && prefixSum[i]-prefixSum[deque.Front().Value.(int)] >= k { + minLength = min(minLength, i-deque.Remove(deque.Front()).(int)) + } + + for deque.Len() > 0 && prefixSum[i] <= prefixSum[deque.Back().Value.(int)] { + deque.Remove(deque.Back()) + } + + deque.PushBack(i) + } + + if minLength == math.MaxInt32 { + return -1 + } + return minLength +} + +type heap862 struct { + v, i int +} +type heap862list []heap862 + +func (h *heap862list) Len() int { + return len(*h) +} +func (h *heap862list) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap862list) Less(i, j int) bool { + return (*h)[i].v < (*h)[j].v +} +func (h *heap862list) Push(x any) { + *h = append(*h, x.(heap862)) +} +func (h *heap862list) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution1(nums []int, k int) int { + h := heap862list{{0, -1}} + cur := 0 + l := len(nums) + ans := -1 + i := 0 + for ; i < l; i++ { + cur += nums[i] + for len(h) > 0 && cur-h[0].v >= k { + top := heap.Pop(&h).(heap862) + if ans == -1 || ans > i-top.i { + ans = i - top.i + } + } + heap.Push(&h, heap862{cur, i}) + } + return ans +} diff --git a/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution_test.go b/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution_test.go index 14ff50eb4..b4c2f0e10 100644 --- a/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution_test.go +++ b/leetcode/801-900/0862.Shortest-Subarray-with-Sum-at-Least-K/Solution_test.go @@ -10,30 +10,56 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1}, 1, 1}, + {"TestCase2", []int{1, 2}, 4, -1}, + {"TestCase3", []int{2, -1, 2}, 3, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + nums []int + k int + expect int + }{ + {"TestCase1", []int{1}, 1, 1}, + {"TestCase2", []int{1, 2}, 4, -1}, + {"TestCase3", []int{2, -1, 2}, 3, 3}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution1(c.nums, c.k) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) + } + }) + } +} + +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2177923c1f21ea694a7fc88ede88d9c06aa77182 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 18 Nov 2024 09:15:48 +0800 Subject: [PATCH 115/450] Add solution and test-cases for problem 1652 --- .../1601-1700/1652.Defuse-the-Bomb/README.md | 39 ++++++++++------ .../1652.Defuse-the-Bomb/Solution.go | 44 ++++++++++++++++++- .../1652.Defuse-the-Bomb/Solution_test.go | 21 ++++----- 3 files changed, 79 insertions(+), 25 deletions(-) diff --git a/leetcode/1601-1700/1652.Defuse-the-Bomb/README.md b/leetcode/1601-1700/1652.Defuse-the-Bomb/README.md index 1e868c0bc..dcdef162b 100755 --- a/leetcode/1601-1700/1652.Defuse-the-Bomb/README.md +++ b/leetcode/1601-1700/1652.Defuse-the-Bomb/README.md @@ -1,28 +1,41 @@ # [1652.Defuse the Bomb][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 have a bomb to defuse, and your time is running out! Your informer will provide you with a **circular** array `code` of length of `n` and a key `k`. + +To decrypt the code, you must replace every number. All the numbers are replaced **simultaneously**. + +- If `k > 0`, replace the `ith` number with the sum of the **next** `k` numbers. +- If `k < 0`, replace the `ith` number with the sum of the **previous** `k` numbers. +- If `k == 0`, replace the `ith` number with `0`. + +As `code` is circular, the next element of `code[n-1]` is `code[0]`, and the previous element of `code[0]` is `code[n-1]`. + +Given the **circular** array `code` and an integer key `k`, return the decrypted code to defuse the bomb! **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: code = [5,7,1,4], k = 3 +Output: [12,10,16,13] +Explanation: Each number is replaced by the sum of the next 3 numbers. The decrypted code is [7+1+4, 1+4+5, 4+5+7, 5+7+1]. Notice that the numbers wrap around. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Defuse the Bomb -```go ``` +Input: code = [1,2,3,4], k = 0 +Output: [0,0,0,0] +Explanation: When k is zero, the numbers are replaced by 0. +``` + +**Example 3:** +``` +Input: code = [2,4,9,3], k = -2 +Output: [12,5,6,13] +Explanation: The decrypted code is [3+9, 2+3, 4+2, 9+4]. Notice that the numbers wrap around again. If k is negative, the sum is of the previous numbers. +``` ## 结语 diff --git a/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go index d115ccf5e..e1133167a 100644 --- a/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go +++ b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(code []int, k int) []int { + l := len(code) + sum := make([]int, l) + if k == 0 { + return sum + } + sum[0] = code[0] + for i := 1; i < l; i++ { + sum[i] = sum[i-1] + code[i] + } + ans := make([]int, l) + if k < 0 { + k = -k + for i := range l { + diff := i - k + if diff > 0 { + start, end := diff, i-1 + ans[i] = sum[end] + if start > 0 { + ans[i] -= sum[start-1] + } + } else { + if i > 0 { + ans[i] += sum[i-1] + } + ans[i] += sum[l-1] - sum[l+diff-1] + } + } + } else { + for i := range l { + diff := i + k + if diff < l { + ans[i] = sum[diff] - sum[i] + } else { + ans[i] += sum[l-1] - sum[i] + ans[i] += sum[diff-l] + } + } + + } + + return ans } diff --git a/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go index 14ff50eb4..4f7b6b2f8 100644 --- a/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go +++ b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + code []int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 7, 1, 4}, 3, []int{12, 10, 16, 13}}, + {"TestCase2", []int{1, 2, 3, 4}, 0, []int{0, 0, 0, 0}}, + {"TestCase3", []int{2, 4, 9, 3}, -2, []int{12, 5, 6, 13}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.code, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.code, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 90d3ebdada8313eb5d05d53a1fe2db8d2dc37b13 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 19 Nov 2024 08:59:39 +0800 Subject: [PATCH 116/450] Add solution and test-cases for problem 2461 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 31 ++++++++++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md index 8a47ee375..57d130c26 100755 --- a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md +++ b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md @@ -1,28 +1,38 @@ # [2461.Maximum Sum of Distinct Subarrays With Length K][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 integer array `nums` and an integer `k`. Find the maximum subarray sum of all the subarrays of `nums` that meet the following conditions: + +- The length of the subarray is `k`, and +- All the elements of the subarray are **distinct**. + +Return the maximum subarray sum of all the subarrays that meet the conditions. If no subarray meets the conditions, return `0`. + +A **subarray** is a contiguous non-empty sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,5,4,2,9,9,9], k = 3 +Output: 15 +Explanation: The subarrays of nums with length 3 are: +- [1,5,4] which meets the requirements and has a sum of 10. +- [5,4,2] which meets the requirements and has a sum of 11. +- [4,2,9] which meets the requirements and has a sum of 15. +- [2,9,9] which does not meet the requirements because the element 9 is repeated. +- [9,9,9] which does not meet the requirements because the element 9 is repeated. +We return 15 because it is the maximum subarray sum of all the subarrays that meet the conditions ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Sum of Distinct Subarrays With Length K -```go ``` - +Input: nums = [4,4,4], k = 3 +Output: 0 +Explanation: The subarrays of nums with length 3 are: +- [4,4,4] which does not meet the requirements because the element 4 is repeated. +We return 0 because no subarrays meet the conditions. +``` ## 结语 diff --git a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go index d115ccf5e..d3599667b 100644 --- a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go +++ b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) int64 { + l := len(nums) + count := make(map[int]int) + cur := int64(0) + for i := 0; i < k; i++ { + count[nums[i]]++ + cur += int64(nums[i]) + } + + ans := int64(0) + if len(count) == k { + ans = cur + } + + // [1, 2], 3, 4, + s, e := 0, k + for ; e < l; s, e = s+1, e+1 { + count[nums[s]]-- + cur -= int64(nums[s]) + if count[nums[s]] == 0 { + delete(count, nums[s]) + } + count[nums[e]]++ + cur += int64(nums[e]) + if len(count) == k { + ans = max(ans, cur) + } + } + return ans } diff --git a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go index 14ff50eb4..8f70ab3fa 100644 --- a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go +++ b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 5, 4, 2, 9, 9, 9}, 3, 15}, + {"TestCase2", []int{4, 4, 4}, 3, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0c0450496e11bb1c95a53b9fac16754d3944369a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 20 Nov 2024 09:27:14 +0800 Subject: [PATCH 117/450] Add solution and test-cases for problem 2516 --- .../README.md | 33 ++++++++++ .../Solution.go | 63 ++++++++++++++++++- .../Solution_test.go | 20 +++--- 3 files changed, 104 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/README.md diff --git a/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/README.md b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/README.md new file mode 100644 index 000000000..f05cc5c77 --- /dev/null +++ b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/README.md @@ -0,0 +1,33 @@ +# [2516.Take K of Each Character From Left and Right][title] + +## Description +You are given a string `s` consisting of the characters `'a'`, `'b'`, and `'c'` and a non-negative integer `k`. Each minute, you may take either the **leftmost** character of `s`, or the **rightmost** character of `s`. + +Return the **minimum** number of minutes needed for you to take **at least** `k` of each character, or return `-1` if it is not possible to take `k` of each character. + +**Example 1:** + +``` +Input: s = "aabaaaacaabc", k = 2 +Output: 8 +Explanation: +Take three characters from the left of s. You now have two 'a' characters, and one 'b' character. +Take five characters from the right of s. You now have four 'a' characters, two 'b' characters, and two 'c' characters. +A total of 3 + 5 = 8 minutes is needed. +It can be proven that 8 is the minimum number of minutes needed. +``` + +**Example 2:** + +``` +Input: s = "a", k = 1 +Output: -1 +Explanation: It is not possible to take one 'b' or 'c' so return -1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/take-k-of-each-character-from-left-and-right +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go index d115ccf5e..61d0c3db3 100755 --- a/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go +++ b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(s string, k int) int { + if k == 0 { + return 0 + } + l := len(s) + left, right := make([][3]int, l), make([][3]int, l) + left[0][s[0]-'a'] = 1 + for i := 1; i < l; i++ { + left[i] = left[i-1] + left[i][s[i]-'a']++ + } + right[l-1][s[l-1]-'a'] = 1 + for i := l - 2; i >= 0; i-- { + right[i] = right[i+1] + right[i][s[i]-'a']++ + } + ans := -1 + for i := l - 1; i > 0; i-- { + a, b, c := right[i][0], right[i][1], right[i][2] + if a >= k && b >= k && c >= k { + if ans == -1 || ans > l-i { + ans = l - i + } + continue + } + idx := sort.Search(i, func(ii int) bool { + return left[ii][0]+a >= k && left[ii][1]+b >= k && left[ii][2]+c >= k + }) + if idx == i { + continue + } + diff := l - i + idx + 1 + if ans == -1 || ans > diff { + ans = diff + } + } + + for i := 0; i < l-1; i++ { + a, b, c := left[i][0], left[i][1], left[i][2] + if a >= k && b >= k && c >= k { + if ans == -1 || ans > i+1 { + ans = i + 1 + } + continue + } + ll := l - i - 1 + start := i + 1 + idx := sort.Search(ll, func(ii int) bool { + return right[start][0]+a >= k && right[start][1]+b >= k && right[start][2]+c >= k + }) + if idx == ll { + continue + } + diff := i + 1 + l - i + if ans == -1 || ans > diff { + ans = diff + } + } + return ans } diff --git a/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go index 14ff50eb4..90bf4bc31 100755 --- a/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go +++ b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aabaaaacaabc", 2, 8}, + {"TestCase2", "a", 1, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 604599290e7f82169121b483c520d28f81ca324e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 21 Nov 2024 09:19:46 +0800 Subject: [PATCH 118/450] Add solution and test-cases for problem 2257 --- .../1.png | Bin 0 -> 17896 bytes .../2.png | Bin 0 -> 8198 bytes .../README.md | 33 ++++---- .../Solution.go | 77 +++++++++++++++++- .../Solution_test.go | 22 ++--- 5 files changed, 105 insertions(+), 27 deletions(-) create mode 100644 leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/1.png create mode 100644 leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/2.png diff --git a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/1.png b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ca001435dab36fe37eb7bf3a847731ada89c776 GIT binary patch literal 17896 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 z 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 literal 0 HcmV?d00001 diff --git a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md index 0b9064584..284fbc24d 100755 --- a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md +++ b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md @@ -1,28 +1,33 @@ # [2257.Count Unguarded Cells in the Grid][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 two integers m and n representing a **0-indexed** `m x n` grid. You are also given two 2D integer arrays `guards` and `walls` where `guards[i] = [rowi, coli]` and `walls[j] = [rowj, colj]` represent the positions of the `ith` guard and `jth` wall respectively. + +A guard can see **every** cell in the four cardinal directions (north, east, south, or west) starting from their position unless **obstructed** by a wall or another guard. A cell is **guarded** if there is **at least** one guard that can see it. + +Return the number of unoccupied cells that are **not guarded**. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: m = 4, n = 6, guards = [[0,0],[1,1],[2,3]], walls = [[0,1],[2,2],[1,4]] +Output: 7 +Explanation: The guarded and unguarded cells are shown in red and green respectively in the above diagram. +There are a total of 7 unguarded cells, so we return 7. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Count Unguarded Cells in the Grid -```go ``` - +Input: m = 3, n = 3, guards = [[1,1]], walls = [[0,1],[1,0],[2,1],[1,2]] +Output: 4 +Explanation: The unguarded cells are shown in green in the above diagram. +There are a total of 4 unguarded cells, so we return 4. +``` ## 结语 diff --git a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go index d115ccf5e..bfd5fdbf2 100644 --- a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go +++ b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go @@ -1,5 +1,78 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(m int, n int, guards [][]int, walls [][]int) int { + count := m * n + count -= len(guards) + count -= len(walls) + wm := make(map[int]map[int]struct{}) + for _, w := range walls { + if _, ok := wm[w[0]]; !ok { + wm[w[0]] = make(map[int]struct{}) + } + wm[w[0]][w[1]] = struct{}{} + } + gm := make(map[int]map[int]struct{}) + for _, g := range guards { + if _, ok := gm[g[0]]; !ok { + gm[g[0]] = make(map[int]struct{}) + } + gm[g[0]][g[1]] = struct{}{} + } + + used := make(map[[2]int]struct{}) + for _, g := range guards { + x, y := g[0], g[1] + for i := x - 1; i >= 0; i-- { + if v, ok := gm[i]; ok { + if _, ok := v[y]; ok { + break + } + } + if v, ok := wm[i]; ok { + if _, ok := v[y]; ok { + break + } + } + used[[2]int{i, y}] = struct{}{} + } + + for i := x + 1; i < m; i++ { + if v, ok := gm[i]; ok { + if _, ok := v[y]; ok { + break + } + } + if v, ok := wm[i]; ok { + if _, ok := v[y]; ok { + break + } + } + used[[2]int{i, y}] = struct{}{} + } + + rows := gm[x] + for i := y + 1; i < n; i++ { + if _, ok := rows[i]; ok { + break + } + if v, ok := wm[x]; ok { + if _, ok := v[i]; ok { + break + } + } + used[[2]int{x, i}] = struct{}{} + } + for i := y - 1; i >= 0; i-- { + if _, ok := rows[i]; ok { + break + } + if v, ok := wm[x]; ok { + if _, ok := v[i]; ok { + break + } + } + used[[2]int{x, i}] = struct{}{} + } + } + return count - len(used) } diff --git a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution_test.go b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution_test.go index 14ff50eb4..abb129b70 100644 --- a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution_test.go +++ b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + m, n int + guards, walls [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, 6, [][]int{{0, 0}, {1, 1}, {2, 3}}, [][]int{{0, 1}, {2, 2}, {1, 4}}, 7}, + {"TestCase2", 3, 3, [][]int{{1, 1}}, [][]int{{0, 1}, {1, 0}, {2, 1}, {1, 2}}, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.m, c.n, c.guards, c.walls) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.m, c.n, c.guards, c.walls) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2747dda1557ece2c6fee7e7ffdafc51a3b5347a7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 22 Nov 2024 09:26:28 +0800 Subject: [PATCH 119/450] Add solution and test-cases for problem 2729 --- .../README.md | 35 +++++++++++++++++++ .../Solution.go | 24 +++++++++++-- .../Solution_test.go | 11 +++--- 3 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/README.md diff --git a/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/README.md b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/README.md new file mode 100644 index 000000000..8fb3f6c03 --- /dev/null +++ b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/README.md @@ -0,0 +1,35 @@ +# [2729.Check if The Number is Fascinating][title] + +## Description +You are given an integer `n` that consists of exactly `3` digits. + +We call the number `n` **fascinating** if, after the following modification, the resulting number contains all the digits from `1` to `9` **exactly** once and does not contain any `0`'s: + +- **Concatenate** `n` with the numbers `2 * n` and `3 * n`. + +Return `true` if `n` is fascinating, or `false` otherwise. + +**Concatenating** two numbers means joining them together. For example, the concatenation of `121` and `371` is `121371`. + +**Example 1:** + +``` +Input: n = 192 +Output: true +Explanation: We concatenate the numbers n = 192 and 2 * n = 384 and 3 * n = 576. The resulting number is 192384576. This number contains all the digits from 1 to 9 exactly once. +``` + +**Example 2:** + +``` +Input: n = 100 +Output: false +Explanation: We concatenate the numbers n = 100 and 2 * n = 200 and 3 * n = 300. The resulting number is 100200300. This number does not satisfy any of the conditions. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-the-number-is-fascinating +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go index d115ccf5e..d9b50855a 100755 --- a/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go +++ b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) bool { + checker := [10]int{} + var checkNum func(n int) + checkNum = func(n int) { + for n > 0 { + x := n % 10 + checker[x]++ + n /= 10 + } + } + checkNum(n) + checkNum(n + n) + checkNum(n + n + n) + if checker[0] > 0 { + return false + } + for i := 1; i < 10; i++ { + if checker[i] != 1 { + return false + } + } + return true } diff --git a/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go index 14ff50eb4..ac8d4b22b 100755 --- a/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go +++ b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 192, true}, + {"TestCase2", 100, false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d280aa468f738a58c212f0c4ec2dbdfdc52487ee Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 23 Nov 2024 14:20:55 +0800 Subject: [PATCH 120/450] Add solution and test-cases for problem 1861 --- .../1801-1900/1861.Rotating-the-Box/1.png | Bin 0 -> 19382 bytes .../1801-1900/1861.Rotating-the-Box/2.png | Bin 0 -> 28549 bytes .../1801-1900/1861.Rotating-the-Box/3.png | Bin 0 -> 71941 bytes .../1801-1900/1861.Rotating-the-Box/README.md | 55 +++++++++++++----- .../1861.Rotating-the-Box/Solution.go | 28 ++++++++- .../1861.Rotating-the-Box/Solution_test.go | 33 ++++++++--- 6 files changed, 94 insertions(+), 22 deletions(-) create mode 100644 leetcode/1801-1900/1861.Rotating-the-Box/1.png create mode 100644 leetcode/1801-1900/1861.Rotating-the-Box/2.png create mode 100644 leetcode/1801-1900/1861.Rotating-the-Box/3.png diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/1.png b/leetcode/1801-1900/1861.Rotating-the-Box/1.png new file mode 100644 index 0000000000000000000000000000000000000000..aa477bd7934947396ad9013b30a0e80d2a3b66a9 GIT binary patch literal 19382 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 i%HxRIHt@M4Aa~;6mx7Fnbm?0Y-~R$Otds-* literal 0 HcmV?d00001 diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/3.png b/leetcode/1801-1900/1861.Rotating-the-Box/3.png new file mode 100644 index 0000000000000000000000000000000000000000..35f3faa6ad1b2d52dde8d974ec3305443f1b639e GIT binary patch literal 71941 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 L%7IEgeDwZbm(-$0 literal 0 HcmV?d00001 diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/README.md b/leetcode/1801-1900/1861.Rotating-the-Box/README.md index ea7cee165..dffe3590b 100755 --- a/leetcode/1801-1900/1861.Rotating-the-Box/README.md +++ b/leetcode/1801-1900/1861.Rotating-the-Box/README.md @@ -1,28 +1,57 @@ # [1861.Rotating the Box][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 `m x n` matrix of characters `box` representing a side-view of a box. Each cell of the box is one of the following: + +- A stone `'#'` +- A stationary obstacle `'*'` +- Empty `'.'` + +The box is rotated **90 degrees clockwise**, causing some of the stones to fall due to gravity. Each stone falls down until it lands on an obstacle, another stone, or the bottom of the box. Gravity **does not** affect the obstacles' positions, and the inertia from the box's rotation **does not** affect the stones' horizontal positions. + +It is **guaranteed** that each stone in `box` rests on an obstacle, another stone, or the bottom of the box. + +Return an `n x m` matrix representing the box after the rotation described above. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: box = [["#",".","#"]] +Output: [["."], + ["#"], + ["#"]] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Rotating the Box -```go ``` +Input: box = [["#",".","*","."], + ["#","#","*","."]] +Output: [["#","."], + ["#","#"], + ["*","*"], + [".","."]] +``` + +**Example 3:** + +![3](./3.png) +``` +Input: box = [["#","#","*",".","*","."], + ["#","#","#","*",".","."], + ["#","#","#",".","#","."]] +Output: [[".","#","#"], + [".","#","#"], + ["#","#","*"], + ["#","*","."], + ["#",".","*"], + ["#",".","."]] +``` ## 结语 diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/Solution.go b/leetcode/1801-1900/1861.Rotating-the-Box/Solution.go index d115ccf5e..6241d4fc6 100644 --- a/leetcode/1801-1900/1861.Rotating-the-Box/Solution.go +++ b/leetcode/1801-1900/1861.Rotating-the-Box/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(box [][]byte) [][]byte { + rows, cols := len(box), len(box[0]) + for i := 0; i < rows; i++ { + for j := cols - 2; j >= 0; j-- { + if box[i][j] == '.' || box[i][j] == '*' { + continue + } + next := j + 1 + for ; next < cols; next++ { + if box[i][next] == '#' || box[i][next] == '*' { + break + } + } + box[i][j] = '.' + box[i][next-1] = '#' + } + } + res := make([][]byte, cols) + for i := range cols { + res[i] = make([]byte, rows) + for j := 0; j < rows; j++ { + res[i][j] = box[rows-1-j][i] + } + } + + return res } diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go b/leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go index 14ff50eb4..7fc36b8b9 100644 --- a/leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go +++ b/leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go @@ -10,12 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]byte + expect [][]byte }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]byte{{'#', '.', '#'}}, [][]byte{{'.'}, {'#'}, {'#'}}}, + {"TestCase2", [][]byte{ + {'#', '.', '*', '.'}, + {'#', '#', '*', '.'}, + }, [][]byte{ + {'#', '.'}, + {'#', '#'}, + {'*', '*'}, + {'.', '.'}, + }}, + {"TestCase3", [][]byte{ + {'#', '#', '*', '.', '*', '.'}, + {'#', '#', '#', '*', '.', '.'}, + {'#', '#', '#', '.', '#', '.'}, + }, [][]byte{ + {'.', '#', '#'}, + {'.', '#', '#'}, + {'#', '#', '*'}, + {'#', '*', '.'}, + {'#', '.', '*'}, + {'#', '.', '.'}, + }}, } // 开始测试 @@ -30,10 +49,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 829a254420355f8fc68f7c684ca7449d139896dd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 24 Nov 2024 13:02:41 +0800 Subject: [PATCH 121/450] Add solution and test-cases for problem 1975 --- .../1901-2000/1975.Maximum-Matrix-Sum/1.png | Bin 0 -> 4065 bytes .../1901-2000/1975.Maximum-Matrix-Sum/2.png | Bin 0 -> 6889 bytes .../1975.Maximum-Matrix-Sum/README.md | 36 +++++++++++------- .../1975.Maximum-Matrix-Sum/Solution.go | 25 +++++++++++- .../1975.Maximum-Matrix-Sum/Solution_test.go | 13 +++---- 5 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 leetcode/1901-2000/1975.Maximum-Matrix-Sum/1.png create mode 100644 leetcode/1901-2000/1975.Maximum-Matrix-Sum/2.png diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/1.png b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/1.png new file mode 100644 index 0000000000000000000000000000000000000000..7da49b04b3ccb3a88a1844d22e4332cbfb5dd5ed GIT binary patch literal 4065 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 literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/2.png b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/2.png new file mode 100644 index 0000000000000000000000000000000000000000..76575375f64cfd71e1efdcca06e3826b67c30657 GIT binary patch literal 6889 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 Pzp&&8I5M`-+FSZxCJJK* literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md index 81bdefe9c..fa22eb4a4 100755 --- a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md +++ b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md @@ -1,28 +1,36 @@ # [1975.Maximum Matrix Sum][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 `n x n` integer `matrix`. You can do the following operation **any** number of times: + +- Choose any two **adjacent** elements of `matrix` and **multiply** each of them by ``-1`. + +Two elements are considered **adjacent** if and only if they share a **border**. + +Your goal is to **maximum** the summation of the matrix's elements. Return the **maximum** sum of the matrix's elements using the operation mentioned above. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[1,-1],[-1,1]] +Output: 4 +Explanation: We can follow the following steps to reach sum equals 4: +- Multiply the 2 elements in the first row by -1. +- Multiply the 2 elements in the first column by -1. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Maximum Matrix Sum -```go ``` - +Input: matrix = [[1,2,3],[-1,-2,-3],[1,2,3]] +Output: 16 +Explanation: We can follow the following step to reach sum equals 16: +- Multiply the 2 last elements in the second row by -1. +``` ## 结语 diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go index d115ccf5e..4159fb577 100644 --- a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go +++ b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matrix [][]int) int64 { + ans, neg := int64(0), 0 + _min := int64(100001) + zero := 0 + rows, cols := len(matrix), len(matrix[0]) + for i := range rows { + for j := range cols { + cur := int64(matrix[i][j]) + if cur == 0 { + zero++ + } + if cur < 0 { + neg++ + cur = -cur + } + ans += cur + _min = min(_min, cur) + } + } + if neg&1 == 1 && zero == 0 { + ans -= 2 * _min + } + return ans } diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution_test.go b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution_test.go index 14ff50eb4..463da125f 100644 --- a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution_test.go +++ b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, -1}, {-1, 1}}, 4}, + {"TestCase2", [][]int{{1, 2, 3}, {-1, 2, 3}, {1, 2, 3}}, 16}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2144825fab7f8ac16fdacee99fc6f6e031837661 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Nov 2024 09:28:05 +0800 Subject: [PATCH 122/450] Add solution and test-cases for problem 773 --- leetcode/701-800/0773.Sliding-Puzzle/1.jpg | Bin 0 -> 4841 bytes leetcode/701-800/0773.Sliding-Puzzle/2.jpg | Bin 0 -> 4847 bytes leetcode/701-800/0773.Sliding-Puzzle/3.jpg | Bin 0 -> 4893 bytes .../701-800/0773.Sliding-Puzzle/README.md | 46 ++++++++++---- .../701-800/0773.Sliding-Puzzle/Solution.go | 60 +++++++++++++++++- .../0773.Sliding-Puzzle/Solution_test.go | 14 ++-- 6 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 leetcode/701-800/0773.Sliding-Puzzle/1.jpg create mode 100644 leetcode/701-800/0773.Sliding-Puzzle/2.jpg create mode 100644 leetcode/701-800/0773.Sliding-Puzzle/3.jpg diff --git a/leetcode/701-800/0773.Sliding-Puzzle/1.jpg b/leetcode/701-800/0773.Sliding-Puzzle/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bffca2276dbccde16dbc4815b7584c98711d49b GIT binary patch literal 4841 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 Cz4yxi literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0773.Sliding-Puzzle/2.jpg b/leetcode/701-800/0773.Sliding-Puzzle/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93f8a7efa80557744685778a50a47c867a8fc9ef GIT binary patch literal 4847 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 literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0773.Sliding-Puzzle/README.md b/leetcode/701-800/0773.Sliding-Puzzle/README.md index d2ab9e31b..c632167f6 100644 --- a/leetcode/701-800/0773.Sliding-Puzzle/README.md +++ b/leetcode/701-800/0773.Sliding-Puzzle/README.md @@ -1,28 +1,48 @@ # [773.Sliding Puzzle][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 +On an `2 x 3` board, there are five tiles labeled from `1` to `5`, and an empty square represented by `0`. A **move** consists of choosing `0` and a 4-directionally adjacent number and swapping it. + +The state of the board is solved if and only if the board is `[[1,2,3],[4,5,0]]`. + +Given the puzzle board `board`, return the least number of moves required so that the state of the board is solved. If it is impossible for the state of the board to be solved, return `-1`. -**Example 1:** +**Example 1:** + +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: board = [[1,2,3],[4,0,5]] +Output: 1 +Explanation: Swap the 0 and the 5 in one move. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Sliding Puzzle -```go +``` +Input: board = [[1,2,3],[5,4,0]] +Output: -1 +Explanation: No number of moves will make the board solved. ``` +**Example 3:** + +![3](./3.jpg) + +``` +Input: board = [[4,1,2],[5,0,3]] +Output: 5 +Explanation: 5 is the smallest number of moves that solves the board. +An example path: +After move 0: [[4,1,2],[5,0,3]] +After move 1: [[4,1,2],[0,5,3]] +After move 2: [[0,1,2],[4,5,3]] +After move 3: [[1,0,2],[4,5,3]] +After move 4: [[1,2,0],[4,5,3]] +After move 5: [[1,2,3],[4,5,0]] +``` ## 结语 diff --git a/leetcode/701-800/0773.Sliding-Puzzle/Solution.go b/leetcode/701-800/0773.Sliding-Puzzle/Solution.go index d115ccf5e..7ff0c11bd 100644 --- a/leetcode/701-800/0773.Sliding-Puzzle/Solution.go +++ b/leetcode/701-800/0773.Sliding-Puzzle/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { - return x +func isOk773(board [2][3]int) bool { + return board[0][0] == 1 && board[0][1] == 2 && board[0][2] == 3 && + board[1][0] == 4 && board[1][1] == 5 +} + +type qItem773 struct { + key [2][3]int + zeroIndex [2]int +} + +var dir773 = [4][2]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, +} + +func Solution(board [][]int) int { + + key := [2][3]int{ + {board[0][0], board[0][1], board[0][2]}, + {board[1][0], board[1][1], board[1][2]}, + } + zeroIndex := [2]int{0, 0} + for i := range 2 { + for j := range 3 { + if board[i][j] == 0 { + zeroIndex = [2]int{i, j} + } + } + } + queue := []qItem773{ + {key, zeroIndex}, + } + used := map[[2][3]int]struct{}{ + key: struct{}{}, + } + steps := 0 + for len(queue) > 0 { + nq := make([]qItem773, 0) + for _, cur := range queue { + if isOk773(cur.key) { + return steps + } + x, y := cur.zeroIndex[0], cur.zeroIndex[1] + for _, d := range dir773 { + nx, ny := x+d[0], y+d[1] + if nx >= 0 && nx <= 1 && ny >= 0 && ny <= 2 { + b := cur.key + b[nx][ny], b[x][y] = b[x][y], b[nx][ny] + if _, ok := used[b]; !ok { + nq = append(nq, qItem773{b, [2]int{nx, ny}}) + used[b] = struct{}{} + } + } + } + } + queue = nq + steps++ + } + return -1 } diff --git a/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go b/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go index 14ff50eb4..2a49619ec 100644 --- a/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go +++ b/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go @@ -10,12 +10,12 @@ 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, 3}, {4, 0, 5}}, 1}, + {"TestCase2", [][]int{{1, 2, 3}, {5, 4, 0}}, -1}, + {"TestCase3", [][]int{{4, 1, 2}, {5, 0, 3}}, 5}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e8f374e73648394c69cf14e9d2f6e1bec3f9dbca Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 26 Nov 2024 09:03:18 +0800 Subject: [PATCH 123/450] Add solution and test-cases for problem 2924 --- .../2901-3000/2924.Find-Champion-II/1.png | Bin 0 -> 10062 bytes .../2901-3000/2924.Find-Champion-II/2.png | Bin 0 -> 10974 bytes .../2901-3000/2924.Find-Champion-II/README.md | 40 ++++++++++++------ .../2924.Find-Champion-II/Solution.go | 19 ++++++++- .../2924.Find-Champion-II/Solution_test.go | 20 ++++----- 5 files changed, 53 insertions(+), 26 deletions(-) create mode 100644 leetcode/2901-3000/2924.Find-Champion-II/1.png create mode 100644 leetcode/2901-3000/2924.Find-Champion-II/2.png diff --git a/leetcode/2901-3000/2924.Find-Champion-II/1.png b/leetcode/2901-3000/2924.Find-Champion-II/1.png new file mode 100644 index 0000000000000000000000000000000000000000..f474a6491ce141ac31d8f33ceeb29f616c5d59db GIT binary patch literal 10062 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 literal 0 HcmV?d00001 diff --git a/leetcode/2901-3000/2924.Find-Champion-II/2.png b/leetcode/2901-3000/2924.Find-Champion-II/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9efdcd57368153f6149bebf54e84d79f33402cbe GIT binary patch literal 10974 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 XO#Ine`K}cdtRkr@X(?9ATf+Yb3RWcP literal 0 HcmV?d00001 diff --git a/leetcode/2901-3000/2924.Find-Champion-II/README.md b/leetcode/2901-3000/2924.Find-Champion-II/README.md index e70b0d4b0..ac7cd1951 100755 --- a/leetcode/2901-3000/2924.Find-Champion-II/README.md +++ b/leetcode/2901-3000/2924.Find-Champion-II/README.md @@ -1,28 +1,40 @@ # [2924.Find Champion II][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 +There are `n` teams numbered from `0` to `n - 1` in a tournament; each team is also a node in a **DAG**. + +You are given the integer `n` and a **0-indexed** 2D integer array `edges` of length `m` representing the **DAG**, where `edges[i] = [ui, vi]` indicates that there is a directed edge from team `ui` to team `vi` in the graph. + +A directed edge from `a` to `b` in the graph means that team `a` is **stronger** than team `b` and team `b` is **weaker** than team `a`. + +Team `a` will be the **champion** of the tournament if there is no team `b` that is **stronger** than team `a`. + +Return the team that will be the **champion** of the tournament if there is a **unique** champion, otherwise, return `-1`. -**Example 1:** +**Notes** + +- A **cycle** is a series of nodes `a1, a2, ..., an, an+1` such that node `a1` is the same node as node `an+1`, the nodes `a1, a2, ..., an` are distinct, and there is a directed edge from the node `ai` to node `ai+1` for every `i` in the range `[1, n]`. +- A **DAG** is a directed graph that does not have any **cycle**. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, edges = [[0,1],[1,2]] +Output: 0 +Explanation: Team 1 is weaker than team 0. Team 2 is weaker than team 1. So the champion is team 0. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Find Champion II -```go ``` - +Input: n = 4, edges = [[0,2],[1,3],[1,2]] +Output: -1 +Explanation: Team 2 is weaker than team 0 and team 1. Team 3 is weaker than team 1. But team 1 and team 0 are not weaker than any other teams. So the answer is -1. +``` ## 结语 diff --git a/leetcode/2901-3000/2924.Find-Champion-II/Solution.go b/leetcode/2901-3000/2924.Find-Champion-II/Solution.go index d115ccf5e..77ba2e1f7 100644 --- a/leetcode/2901-3000/2924.Find-Champion-II/Solution.go +++ b/leetcode/2901-3000/2924.Find-Champion-II/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, edges [][]int) int { + in := make(map[int]int) + for _, e := range edges { + in[e[1]]++ + } + ans := -1 + cur := 0 + for i := range n { + if in[i] == 0 { + cur++ + ans = i + if cur > 1 { + return -1 + } + } + } + return ans } diff --git a/leetcode/2901-3000/2924.Find-Champion-II/Solution_test.go b/leetcode/2901-3000/2924.Find-Champion-II/Solution_test.go index 14ff50eb4..88c2e064a 100644 --- a/leetcode/2901-3000/2924.Find-Champion-II/Solution_test.go +++ b/leetcode/2901-3000/2924.Find-Champion-II/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + edges [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{{0, 1}, {1, 2}}, 0}, + {"TestCase2", 4, [][]int{{0, 2}, {1, 3}, {1, 2}}, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.edges) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.edges) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f6d31315cb5de34f9137301b7aa08d22926b3032 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 27 Nov 2024 09:32:40 +0800 Subject: [PATCH 124/450] Add solution and test-cases for problem 3243 --- .../1.jpg | Bin 0 -> 12430 bytes .../2.jpg | Bin 0 -> 14382 bytes .../3.jpg | Bin 0 -> 18643 bytes .../4.jpg | Bin 0 -> 11557 bytes .../5.jpg | Bin 0 -> 12668 bytes .../README.md | 33 ++++++++------ .../Solution.go | 42 +++++++++++++++++- .../Solution_test.go | 22 ++++----- 8 files changed, 71 insertions(+), 26 deletions(-) create mode 100644 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/1.jpg create mode 100644 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/2.jpg create mode 100644 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/3.jpg create mode 100644 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/4.jpg create mode 100644 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/5.jpg diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/1.jpg b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b52cf4fe9aea65e542c4373995a0c49e16df554 GIT binary patch literal 12430 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 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/2.jpg b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37f22b08dfb0e75aeead21f32d7f4b759b24a791 GIT binary patch literal 14382 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 Mau3@#U~lyQ0i^X$vj6}9 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/4.jpg b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e60e8bf8f655dbd1c050d9225192184b46c89be GIT binary patch literal 11557 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 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/5.jpg b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..636661d7b2bd004a756308ee0b62fef9696eca3d GIT binary patch literal 12668 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 EA0~ph5dZ)H literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md index 5a0cded4c..0b1f861ae 100755 --- a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md +++ b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md @@ -1,28 +1,35 @@ # [3243.Shortest Distance After Road Addition Queries I][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 integer `n` and a 2D integer array `queries`. + +There are `n` cities numbered from `0` to `n - 1`. Initially, there is a **unidirectional** road from city `i` to city `i + 1` for all `0 <= i < n - 1`. + +`queries[i] = [ui, vi]` represents the addition of a new **unidirectional** road from city `ui` to city `vi`. After each query, you need to find the **length** of the **shortest path** from city `0` to city `n - 1`. -**Example 1:** +Return an array `answer` where for each `i` in the range `[0, queries.length - 1]`, `answer[i]` is the length of the shortest path from city `0` to city `n - 1` after processing the **first** `i + 1` queries. + +**Example 1:** + +![1](./1.jpg) +![2](./2.jpg) +![3](./3.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5, queries = [[2,4],[0,2],[0,4]] +Output: [3,2,1] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![4](./4.jpg) +![5](./5.jpg) -### 思路1 -> ... -Shortest Distance After Road Addition Queries I -```go ``` +Input: n = 4, queries = [[0,3],[0,2]] +Output: [1,1] +``` ## 结语 diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go index d115ccf5e..294d6fef7 100644 --- a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go +++ b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, queries [][]int) []int { + ans := make([]int, len(queries)) + adj := make(map[int]map[int]struct{}) + for i := range n { + adj[i] = make(map[int]struct{}) + } + // 初始化路径 + for i := range n - 1 { + adj[i][i+1] = struct{}{} + } + var bfs func() int + bfs = func() int { + queue := []int{0} + step := 0 + used := map[int]struct{}{ + 0: {}, + } + for len(queue) > 0 { + nq := make([]int, 0) + for _, q := range queue { + if q == n-1 { + return step + } + for rel := range adj[q] { + if _, ok := used[rel]; !ok { + nq = append(nq, rel) + used[rel] = struct{}{} + } + } + } + queue = nq + step++ + } + return -1 + } + for i, q := range queries { + adj[q[0]][q[1]] = struct{}{} + ans[i] = bfs() + } + return ans } diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go index 14ff50eb4..f72e9a175 100644 --- a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go +++ b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, [][]int{{2, 4}, {0, 2}, {0, 4}}, []int{3, 2, 1}}, + {"TestCase2", 4, [][]int{{0, 3}, {0, 2}}, []int{1, 1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 70f66e2df7ae5e8ce17703c5f933decbca8d98fc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 28 Nov 2024 09:39:00 +0800 Subject: [PATCH 125/450] Add solution and test-cases for problem 2290 --- .../1.png | Bin 0 -> 13455 bytes .../2.png | Bin 0 -> 9003 bytes .../README.md | 36 ++++++----- .../Solution.go | 58 +++++++++++++++++- .../Solution_test.go | 13 ++-- 5 files changed, 85 insertions(+), 22 deletions(-) create mode 100644 leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/1.png create mode 100644 leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/2.png diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/1.png b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc8d658ffafab9c6109cf362933e7cb87bbd0b3 GIT binary patch literal 13455 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 CFFtVq literal 0 HcmV?d00001 diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/2.png b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/2.png new file mode 100644 index 0000000000000000000000000000000000000000..05adcfbc9991baaa4efc505d625829984a8ad3d5 GIT binary patch literal 9003 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 literal 0 HcmV?d00001 diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md index 5729751da..9d1ae015a 100755 --- a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md @@ -1,28 +1,36 @@ # [2290.Minimum Obstacle Removal to Reach Corner][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 a **0-indexed** 2D integer array `grid` of size `m x n`. Each cell has one of two values: + +- `0` represents an **empty** cell, +- `1` represents an **obstacle** that may be removed. + +You can move up, down, left, or right from and to an empty cell. + +Return the **minimum** number of **obstacles** to **remove** so you can move from the upper left corner `(0, 0)` to the lower right corner `(m - 1, n - 1)`. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,1,1],[1,1,0],[1,1,0]] +Output: 2 +Explanation: We can remove the obstacles at (0, 1) and (0, 2) to create a path from (0, 0) to (2, 2). +It can be shown that we need to remove at least 2 obstacles, so we return 2. +Note that there may be other ways to remove 2 obstacles to create a path. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Minimum Obstacle Removal to Reach Corner -```go ``` - +Input: grid = [[0,1,0,0,0],[0,1,0,1,0],[0,0,0,1,0]] +Output: 0 +Explanation: We can move from (0, 0) to (2, 4) without removing any obstacles, so we return 0. +``` ## 结语 diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go index d115ccf5e..4eaad3b18 100644 --- a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap2290 [][3]int + +func (h *heap2290) Len() int { + return len(*h) +} + +func (h *heap2290) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap2290) Less(i, j int) bool { + return (*h)[i][2] < (*h)[j][2] +} + +func (h *heap2290) Push(x any) { + *h = append(*h, x.([3]int)) +} + +func (h *heap2290) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +var dirs2290 = [][2]int{ + {0, 1}, {1, 0}, {-1, 0}, {0, -1}, +} + +func Solution(grid [][]int) int { + m, n := len(grid), len(grid[0]) + h := heap2290{{0, 0, 0}} + v := map[[2]int]int{ + [2]int{0, 0}: 0, + } + for h.Len() > 0 { + cur := heap.Pop(&h).([3]int) + if cur[0] == m-1 && cur[1] == n-1 { + return cur[2] + } + for _, dir := range dirs2290 { + nx, ny := cur[0]+dir[0], cur[1]+dir[1] + if !(nx >= 0 && nx < m && ny >= 0 && ny < n) { + continue + } + need := cur[2] + grid[nx][ny] + key := [2]int{nx, ny} + //key = [3]int{nx, ny, need} + if vv, ok := v[key]; !ok || vv > need { + heap.Push(&h, [3]int{nx, ny, need}) + v[key] = need + } + } + } + return -1 +} diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go index 14ff50eb4..df3e42840 100644 --- a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/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{{0, 1, 1}, {1, 1, 0}, {1, 1, 0}}, 2}, + {"TestCase2", [][]int{{0, 1, 0, 0, 0}, {0, 1, 0, 1, 0}, {0, 0, 0, 1, 0}}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d22d762c930308538c2ad69f090cba0846abccda Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 29 Nov 2024 10:42:42 +0800 Subject: [PATCH 126/450] Add solution and test-cases for problem 2577 --- .../1.png | Bin 0 -> 6991 bytes .../2.png | Bin 0 -> 4828 bytes .../README.md | 44 ++++++++++++ .../Solution.go | 66 +++++++++++++++++- .../Solution_test.go | 13 ++-- 5 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/1.png create mode 100644 leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/2.png create mode 100644 leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/README.md diff --git a/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/1.png b/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..df85556dc8f05f40922f548f25c942d0082423ef GIT binary patch literal 6991 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 hRvg&8?rd>wh 1 && grid[1][0] > 1 { + // 根本走不了 + return -1 + } + m, n := len(grid), len(grid[0]) + visited := make(map[[2]int]int) + visited[[2]int{0, 0}] = 0 + q := heap2577{{0, 0, 0}} + + for q.Len() > 0 { + cur := heap.Pop(&q).([3]int) + if cur[0] == m-1 && cur[1] == n-1 { + return cur[2] + } + for _, dir := range dirs2577 { + nx, ny := cur[0]+dir[0], cur[1]+dir[1] + if nx >= 0 && nx < m && ny >= 0 && ny < n { + cost := cur[2] + 1 // 耗时比目前小,直接+1过去 + if diff := grid[nx][ny] - cur[2]; diff >= 1 { + cost = grid[nx][ny] + if diff&1 == 0 { + cost++ + } + } + if v, ok := visited[[2]int{nx, ny}]; !ok || v > cost { + heap.Push(&q, [3]int{nx, ny, cost}) + visited[[2]int{nx, ny}] = cost + } + } + } + } + + return -1 +} diff --git a/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution_test.go b/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution_test.go index 14ff50eb4..2917d5fbc 100755 --- a/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution_test.go +++ b/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/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{{0, 1, 3, 2}, {5, 1, 2, 5}, {4, 3, 8, 6}}, 7}, + {"TestCase2", [][]int{{0, 2, 4}, {3, 2, 1}, {1, 0, 4}}, -1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f703fa892c3035636f26bb9b981f709a679611a5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 Dec 2024 09:14:47 +0800 Subject: [PATCH 127/450] Add solution and test-cases for problem 1455 --- .../README.md | 39 +++++++++++++++++++ .../Solution.go | 37 +++++++++++++++++- .../Solution_test.go | 23 +++++------ 3 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/README.md diff --git a/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/README.md b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/README.md new file mode 100644 index 000000000..cb178094b --- /dev/null +++ b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/README.md @@ -0,0 +1,39 @@ +# [1455.Check If a Word Occurs As a Prefix of Any Word in a Sentence][title] + +## Description +Given a `sentence` that consists of some words separated by a **single space**, and a `searchWord`, check if `searchword` is a prefix of any word in `sentence`. + +Return the index of the word in `sentence` (**1-indexed**) where `searchWord` is a prefix of this word. If `searchWord` is a prefix of more than one word, return the index of the first word (**minimum index**). If there is no such word return `-1`. + +A **prefix** of a string `s` is any leading contiguous substring of `s`. + +**Example 1:** + +``` +Input: sentence = "i love eating burger", searchWord = "burg" +Output: 4 +Explanation: "burg" is prefix of "burger" which is the 4th word in the sentence. +``` + +**Example 2:** + +``` +Input: sentence = "this problem is an easy problem", searchWord = "pro" +Output: 2 +Explanation: "pro" is prefix of "problem" which is the 2nd and the 6th word in the sentence, but we return 2 as it's the minimal index. +``` + +**Example 3:** + +``` +Input: sentence = "i am tired", searchWord = "you" +Output: -1 +Explanation: "you" is not a prefix of any word in the sentence. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go index d115ccf5e..349acc333 100755 --- a/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go +++ b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +type trie1455 struct { + end int + child [26]*trie1455 +} + +func (tree *trie1455) insert1455(word string, index int) { + cur := tree + for _, b := range word { + if cur.child[b-'a'] == nil { + cur.child[b-'a'] = &trie1455{end: index, child: [26]*trie1455{}} + } + cur = cur.child[b-'a'] + } +} + +func (tree *trie1455) search1455(word string) int { + cur := tree + for _, b := range word { + idx := b - 'a' + if cur.child[idx] == nil { + return -1 + } + cur = cur.child[idx] + } + return cur.end +} + +func Solution(sentence string, searchWord string) int { + tree := &trie1455{end: -1} + for i, w := range strings.Split(sentence, " ") { + tree.insert1455(w, i+1) + } + return tree.search1455(searchWord) } diff --git a/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go index 14ff50eb4..757e6ae09 100755 --- a/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go +++ b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs string + searchWord string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "i love eating burger", "burg", 4}, + {"TestCase2", "this problem is an easy problem", "pro", 2}, + {"TestCase3", "i am tired", "you", -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.searchWord) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.searchWord) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0a7b5821ba70060ce44d9100f57416e5db87f1b1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 3 Dec 2024 09:13:02 +0800 Subject: [PATCH 128/450] Add solution and test-cases for problem 1324 --- .../1324.Print-Words-Vertically/README.md | 36 ++++++++++++------- .../1324.Print-Words-Vertically/Solution.go | 30 ++++++++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1324.Print-Words-Vertically/README.md b/leetcode/1301-1400/1324.Print-Words-Vertically/README.md index e9b977756..c61429d26 100644 --- a/leetcode/1301-1400/1324.Print-Words-Vertically/README.md +++ b/leetcode/1301-1400/1324.Print-Words-Vertically/README.md @@ -1,28 +1,38 @@ # [1324.Print Words Vertically][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 +Given a string `s`. Return all the words vertically in the same order in which they appear in `s`. +Words are returned as a list of strings, complete with spaces when is necessary. (Trailing spaces are not allowed). +Each word would be put on only one column and that in one column there will be only one word. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "HOW ARE YOU" +Output: ["HAY","ORO","WEU"] +Explanation: Each word is printed vertically. + "HAY" + "ORO" + "WEU" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Print Words Vertically -```go +``` +Input: s = "TO BE OR NOT TO BE" +Output: ["TBONTB","OEROOE"," T"] +Explanation: Trailing spaces is not allowed. +"TBONTB" +"OEROOE" +" T" ``` +**Example 3:** + +``` +Input: s = "CONTEST IS COMING" +Output: ["CIC","OSO","N M","T I","E N","S G","T"] +``` ## 结语 diff --git a/leetcode/1301-1400/1324.Print-Words-Vertically/Solution.go b/leetcode/1301-1400/1324.Print-Words-Vertically/Solution.go index d115ccf5e..3eac95afb 100644 --- a/leetcode/1301-1400/1324.Print-Words-Vertically/Solution.go +++ b/leetcode/1301-1400/1324.Print-Words-Vertically/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s string) []string { + words := strings.Split(s, " ") + ml := 0 + for _, w := range words { + ml = max(ml, len(w)) + } + ans := make([]string, 0) + buf := strings.Builder{} + for index := 0; index < ml; index++ { + tailSpaces := 0 + for _, w := range words { + if index < len(w) { + buf.WriteByte(w[index]) + tailSpaces = 0 + continue + } + buf.WriteByte(' ') + tailSpaces++ + } + cur := buf.String() + l := len(cur) - tailSpaces + cur = cur[:l] + ans = append(ans, cur) + buf.Reset() + } + return ans } diff --git a/leetcode/1301-1400/1324.Print-Words-Vertically/Solution_test.go b/leetcode/1301-1400/1324.Print-Words-Vertically/Solution_test.go index 14ff50eb4..4dde447db 100644 --- a/leetcode/1301-1400/1324.Print-Words-Vertically/Solution_test.go +++ b/leetcode/1301-1400/1324.Print-Words-Vertically/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "HOW ARE YOU", []string{"HAY", "ORO", "WEU"}}, + {"TestCase2", "TO BE OR NOT TO BE", []string{"TBONTB", "OEROOE", " T"}}, + {"TestCase3", "CONTEST IS COMING", []string{"CIC", "OSO", "N M", "T I", "E N", "S G", "T"}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 01c3d750d20e86c7aff7d0df8b017f82bef9b3de Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 4 Dec 2024 09:26:21 +0800 Subject: [PATCH 129/450] Add solution and test-cases for problem 2825 --- .../README.md | 47 +++++++++++++++++++ .../Solution.go | 15 +++++- .../Solution_test.go | 18 +++---- 3 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/README.md diff --git a/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/README.md b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/README.md new file mode 100644 index 000000000..46397a55b --- /dev/null +++ b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/README.md @@ -0,0 +1,47 @@ +# [2825.Make String a Subsequence Using Cyclic Increments][title] + +## Description +You are given two **0-indexed** strings `str1` and `str2`. + +In an operation, you select a **set** of indices in `str1`, and for each index `i` in the set, increment `str1[i]` to the next character **cyclically**. That is `'a'` becomes `'b'`, `'b'` becomes `'c'`, and so on, and `'z'` becomes `'a'`. + +Return `true` if it is possible to make `str2` a subsequence of `str1` by performing the operation **at most once**, and `false` otherwise. + +**Note**: A subsequence of a string is a new string that is formed from the original string by deleting some (possibly none) of the characters without disturbing the relative positions of the remaining characters. + +**Example 1:** + +``` +Input: str1 = "abc", str2 = "ad" +Output: true +Explanation: Select index 2 in str1. +Increment str1[2] to become 'd'. +Hence, str1 becomes "abd" and str2 is now a subsequence. Therefore, true is returned. +``` + +**Example 2:** + +``` +Input: str1 = "zc", str2 = "ad" +Output: true +Explanation: Select indices 0 and 1 in str1. +Increment str1[0] to become 'a'. +Increment str1[1] to become 'd'. +Hence, str1 becomes "ad" and str2 is now a subsequence. Therefore, true is returned. +``` + +**Example 3:** + +``` +Input: str1 = "ab", str2 = "d" +Output: false +Explanation: In this example, it can be shown that it is impossible to make str2 a subsequence of str1 using the operation at most once. +Therefore, false is returned. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-string-a-subsequence-using-cyclic-increments +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go index d115ccf5e..f72c9780b 100755 --- a/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go +++ b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(str1 string, str2 string) bool { + if len(str2) > len(str1) { + return false + } + b := 0 + for i := 0; i < len(str1) && b < len(str2); i++ { + t1 := str1[i] - 'a' + t2 := str2[b] - 'a' + if t1 == t2 || t2 == (t1+1+26)%26 { + b++ + } + } + return b == len(str2) } diff --git a/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go index 14ff50eb4..01a9ad107 100755 --- a/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go +++ b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + s1, s2 string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abc", "ad", true}, + {"TestCase2", "zc", "ad", true}, + {"TestCase3", "ab", "d", false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f8ed0db50f182540394cbf245d0d02cd2feaafa9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 5 Dec 2024 09:15:41 +0800 Subject: [PATCH 130/450] Add solution and test-cases for problem 2337 --- .../README.md | 39 ++++++++++++------ .../Solution.go | 41 ++++++++++++++++++- .../Solution_test.go | 22 +++++----- 3 files changed, 76 insertions(+), 26 deletions(-) diff --git a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md index af73de22e..153393408 100755 --- a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md +++ b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md @@ -1,28 +1,41 @@ # [2337.Move Pieces to Obtain a String][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 two strings `start` and `target`, both of length `n`. Each string consists **only** of the characters `'L'`, `'R'`, and `'_'` where: + +- The characters `'L'` and `'R'` represent pieces, where a piece `'L'` can move to the **left** only if there is a **blank** space directly to its left, and a piece `'R'` can move to the **right** only if there is a **blank** space directly to its right. +- The character `'_'` represents a blank space that can be occupied by **any** of the `'L'` or `'R'` pieces. + +Return `true` if it is possible to obtain the string `target` by moving the pieces of the string `start` **any** number of times. Otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: start = "_L__R__R_", target = "L______RR" +Output: true +Explanation: We can obtain the string target from start by doing the following moves: +- Move the first piece one step to the left, start becomes equal to "L___R__R_". +- Move the last piece one step to the right, start becomes equal to "L___R___R". +- Move the second piece three steps to the right, start becomes equal to "L______RR". +Since it is possible to get the string target from start, we return true. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Move Pieces to Obtain a String -```go ``` +Input: start = "R_L_", target = "__LR" +Output: false +Explanation: The 'R' piece in the string start can move one step to the right to obtain "_RL_". +After that, no pieces can move anymore, so it is impossible to obtain the string target from start. +``` + +**Example 3:** +``` +Input: start = "_R", target = "R_" +Output: false +Explanation: The piece in the string start can move only to the right, so it is impossible to obtain the string target from start. +``` ## 结语 diff --git a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go index d115ccf5e..e29e459cb 100644 --- a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go +++ b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +type pair2337 struct { + c byte + i int +} + +func Solution(start string, target string) bool { + a, b := make([]pair2337, 0), make([]pair2337, 0) + for i, c := range []byte(start) { + if c == '_' { + continue + } + a = append(a, pair2337{c, i}) + } + for i, c := range []byte(target) { + if c == '_' { + continue + } + b = append(b, pair2337{c, i}) + } + if len(a) != len(b) { + // _ 不相等,无法转换 + return false + } + + for i := range len(a) { + ac := a[i] + bc := b[i] + if ac.c != bc.c { + return false + } + // 如果我此时是L + if ac.c == 'L' && ac.i < bc.i { + return false + } + if ac.c == 'R' && ac.i > bc.i { + return false + } + } + return true } diff --git a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go index 14ff50eb4..5bc8b16c1 100644 --- a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go +++ b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + start, target string + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "_L__R__R_", "L______RR", true}, + {"TestCase2", "R_L_", "__LR", false}, + {"TestCase3", "_R", "R_", false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.start, c.target) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.start, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d989cafe3d4417bf86d88ba9cebed89ffe1ffeb0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 6 Dec 2024 09:14:28 +0800 Subject: [PATCH 131/450] Add solution and test-cases for problem 2554 --- .../README.md | 44 +++++++++++++++++++ .../Solution.go | 22 +++++++++- .../Solution_test.go | 23 +++++----- 3 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/README.md diff --git a/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/README.md b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/README.md new file mode 100644 index 000000000..81207eab0 --- /dev/null +++ b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/README.md @@ -0,0 +1,44 @@ +# [2554. Maximum Number of Integers to Choose From a Range I][title] + +## Description +You are given an integer array `banned` and two integers `n` and `maxSum`. You are choosing some number of integers following the below rules: + +- The chosen integers have to be in the range `[1, n]`. +- Each integer can be chosen **at most once*8. +- The chosen integers should not be in the array `banned`. +- The sum of the chosen integers should not exceed `maxSum`. + +Return the **maximum** number of integers you can choose following the mentioned rules. + +**Example 1:** + +``` +Input: banned = [1,6,5], n = 5, maxSum = 6 +Output: 2 +Explanation: You can choose the integers 2 and 4. +2 and 4 are from the range [1, 5], both did not appear in banned, and their sum is 6, which did not exceed maxSum. +``` + +**Example 2:** + +``` +Input: banned = [1,2,3,4,5,6,7], n = 8, maxSum = 1 +Output: 0 +Explanation: You cannot choose any integer while following the mentioned conditions. +``` + +**Example 3:** + +``` +Input: banned = [11], n = 7, maxSum = 50 +Output: 7 +Explanation: You can choose the integers 1, 2, 3, 4, 5, 6, and 7. +They are from the range [1, 7], all did not appear in banned, and their sum is 28, which did not exceed maxSum. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-integers-to-choose-from-a-range-i +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go index d115ccf5e..e036c202a 100755 --- a/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go +++ b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(banned []int, n int, maxSum int) int { + sum := 0 + bm := make(map[int]struct{}) + for _, x := range banned { + if x >= 1 && x <= n { + bm[x] = struct{}{} + } + } + ans := 0 + for i := 1; i <= n; i++ { + if _, ok := bm[i]; ok { + continue + } + sum += i + if sum > maxSum { + break + } + ans++ + } + return ans } diff --git a/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution_test.go b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution_test.go index 14ff50eb4..e8e85d0ac 100755 --- a/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution_test.go +++ b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + banned []int + n, maxSum int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 6, 5}, 5, 6, 2}, + {"TestCase2", []int{1, 2, 3, 4, 5, 6, 7}, 8, 1, 0}, + {"TestCase3", []int{11}, 7, 50, 7}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.banned, c.n, c.maxSum) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.banned, c.n, c.maxSum) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 33cbf2ef00c7ad53c037fea0cfb56edc024d2063 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 7 Dec 2024 12:24:47 +0800 Subject: [PATCH 132/450] Add solution and test-cases for problem 1760 --- .../README.md | 41 ++++++++++++------- .../Solution.go | 34 ++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 69 insertions(+), 26 deletions(-) diff --git a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md index d556c9005..7cd8a56d5 100755 --- a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md +++ b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md @@ -1,28 +1,41 @@ # [1760.Minimum Limit of Balls in a Bag][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 integer array `nums` where the `ith` bag contains `nums[i]` balls. You are also given an integer `maxOperations`. + +You can perform the following operation at most `maxOperations` times: + +- Take any bag of balls and divide it into two new bags with a **positive** number of balls. + + - For example, a bag of `5` balls can become two new bags of `1` and `4` balls, or two new bags of `2` and `3` balls. + +Your penalty is the **maximum** number of balls in a bag. You want to **minimize** your penalty after the operations. + +Return the minimum possible penalty after performing the operations. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [9], maxOperations = 2 +Output: 3 +Explanation: +- Divide the bag with 9 balls into two bags of sizes 6 and 3. [9] -> [6,3]. +- Divide the bag with 6 balls into two bags of sizes 3 and 3. [6,3] -> [3,3,3]. +The bag with the most number of balls has 3 balls, so your penalty is 3 and you should return 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Limit of Balls in a Bag -```go ``` - +Input: nums = [2,4,8,2], maxOperations = 4 +Output: 2 +Explanation: +- Divide the bag with 8 balls into two bags of sizes 4 and 4. [2,4,8,2] -> [2,4,4,4,2]. +- Divide the bag with 4 balls into two bags of sizes 2 and 2. [2,4,4,4,2] -> [2,2,2,4,4,2]. +- Divide the bag with 4 balls into two bags of sizes 2 and 2. [2,2,2,4,4,2] -> [2,2,2,2,2,4,2]. +- Divide the bag with 4 balls into two bags of sizes 2 and 2. [2,2,2,2,2,4,2] -> [2,2,2,2,2,2,2,2]. +The bag with the most number of balls has 2 balls, so your penalty is 2, and you should return 2. +``` ## 结语 diff --git a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go index d115ccf5e..52fbf17d6 100644 --- a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go +++ b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, maxOperations int) int { + var can func(int) bool + can = func(limit int) bool { + op := maxOperations + for _, n := range nums { + if n <= limit { + continue + } + // 9 /3 + times := n / limit + if n%limit == 0 { + times-- + } + if times > op { + return false + } + op -= times + } + return true + } + left, right := 1, 1000000001 + ans := -1 + for left < right { + mid := (left + right) / 2 + if can(mid) { + right = mid + ans = mid + continue + } + left = mid + 1 + } + return ans } diff --git a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go index 14ff50eb4..b5415335c 100644 --- a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go +++ b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + limit int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 4, 8, 1}, 4, 2}, + {"TestCase2", []int{9}, 2, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.limit) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.limit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 68e54cbd74330866d39b05460d4612be4424cae0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 Dec 2024 15:58:37 +0800 Subject: [PATCH 133/450] Add solution and test-cases for problem 2054 --- .../1.png | Bin 0 -> 4254 bytes .../2.png | Bin 0 -> 4101 bytes .../3.png | Bin 0 -> 5078 bytes .../README.md | 39 ++++++++---- .../Solution.go | 57 +++++++++++++++++- .../Solution_test.go | 14 ++--- 6 files changed, 88 insertions(+), 22 deletions(-) create mode 100644 leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/1.png create mode 100644 leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/2.png create mode 100644 leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/3.png diff --git a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/1.png b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/1.png new file mode 100644 index 0000000000000000000000000000000000000000..071ca8c2740a3468bf99df08c5924a181e1ab300 GIT binary patch literal 4254 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 r;XPsH-D2z=`?ew)SEbgny0lBB!;vc; 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 L7KX(0Zb| [!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 a **0-indexed** 2D integer array of `events` where `events[i] = [startTimei, endTimei, valuei]`. The `ith` event starts at `startTimei` and ends at `endTimei`, and if you attend this event, you will receive a value of `valuei`. You can choose **at most two non-overlapping** events to attend such that the sum of their values is **maximized**. + +Return this **maximum** sum. + +Note that the start time and end time is **inclusive**: that is, you cannot attend two events where one of them starts and the other ends at the same time. More specifically, if you attend an event with end time `t`, the next event must start at or after `t + 1`. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: events = [[1,3,2],[4,5,2],[2,4,3]] +Output: 4 +Explanation: Choose the green events, 0 and 1 for a sum of 2 + 2 = 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Two Best Non-Overlapping Events -```go +``` +Input: events = [[1,3,2],[4,5,2],[1,5,5]] +Output: 5 +Explanation: Choose event 2 for a sum of 5. ``` +**Example 3:** + +![3](./3.png) + +``` +Input: events = [[1,5,3],[1,5,1],[6,6,5]] +Output: 8 +Explanation: Choose events 0 and 2 for a sum of 3 + 5 = 8. +``` ## 结语 diff --git a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go index d115ccf5e..6d652e630 100644 --- a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go +++ b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go @@ -1,5 +1,58 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type SegmentTreeNode2054 struct { + Left, Right, Max int + LeftChild, RightChild *SegmentTreeNode2054 +} + +func buildSegmentTree2054(nums [][]int, left, right int) *SegmentTreeNode2054 { + if left == right { + return &SegmentTreeNode2054{Left: left, Right: right, Max: nums[left][2]} + } + + mid := (left + right) / 2 + leftNode := buildSegmentTree2054(nums, left, mid) + rightNode := buildSegmentTree2054(nums, mid+1, right) + max := max(leftNode.Max, rightNode.Max) + + return &SegmentTreeNode2054{Left: left, Right: right, Max: max, LeftChild: leftNode, RightChild: rightNode} +} + +func queryMax2054(root *SegmentTreeNode2054, left, right int) int { + if root.Left >= left && root.Right <= right { + return root.Max + } + + if root.Right < left || root.Left > right { + return -1 + } + + return max(queryMax2054(root.LeftChild, left, right), queryMax2054(root.RightChild, left, right)) +} + +func Solution(events [][]int) int { + sort.Slice(events, func(i, j int) bool { + a, b := events[i], events[j] + if a[0] == b[0] { + return a[1] < b[1] + } + return a[0] < b[0] + }) + l := len(events) + + tree := buildSegmentTree2054(events, 0, l-1) + ans := 0 + for i, e := range events { + ans = max(ans, e[2]) + idx := sort.Search(l-i-1, func(ii int) bool { + return events[i+1+ii][0] > e[1] + }) + if idx == l-i-1 { + continue + } + ans = max(ans, e[2]+queryMax2054(tree, i+1+idx, l-1)) + } + return ans } diff --git a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go index 14ff50eb4..c5381384c 100644 --- a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go +++ b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go @@ -10,12 +10,12 @@ 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, 3, 2}, {4, 5, 2}, {2, 4, 3}}, 4}, + {"TestCase2", [][]int{{1, 3, 2}, {4, 5, 2}, {1, 5, 5}}, 5}, + {"TestCase3", [][]int{{1, 5, 3}, {1, 5, 1}, {6, 6, 5}}, 8}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5b876388879db282eab89f14c0374da5489d4014 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 9 Dec 2024 09:27:37 +0800 Subject: [PATCH 134/450] Add solution and test-cases for problem 3152 --- .../3101-3200/3152.Special-Array-II/README.md | 35 ++++++++++++------- .../3152.Special-Array-II/Solution.go | 23 ++++++++++-- .../3152.Special-Array-II/Solution_test.go | 22 ++++++------ 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/leetcode/3101-3200/3152.Special-Array-II/README.md b/leetcode/3101-3200/3152.Special-Array-II/README.md index 4a3a744e7..6bb46a50c 100755 --- a/leetcode/3101-3200/3152.Special-Array-II/README.md +++ b/leetcode/3101-3200/3152.Special-Array-II/README.md @@ -1,28 +1,37 @@ # [3152.Special Array II][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 +An array is considered **special** if every pair of its adjacent elements contains two numbers with different parity. + +You are given an array of integer `nums` and a 2D integer matrix `queries`, where for `queries[i] = [fromi, toi]` your task is to check that +subarray `nums[fromi..toi]` is **special** or not. + +Return an array of booleans `answer` such that `answer[i]` is `true` if `nums[fromi..toi]` is special. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [3,4,1,2,6], queries = [[0,4]] + +Output: [false] -## 题意 -> ... +Explanation: -## 题解 +The subarray is [3,4,1,2,6]. 2 and 6 are both even. +``` + +**Example 2:** -### 思路1 -> ... -Special Array II -```go ``` +Input: nums = [4,3,1,6], queries = [[0,2],[2,3]] + +Output: [false,true] +Explanation: + +1. The subarray is [4,3,1]. 3 and 1 are both odd. So the answer to this query is false. +2. The subarray is [1,6]. There is only one pair: (1,6) and it contains numbers with different parity. So the answer to this query is true. +``` ## 结语 diff --git a/leetcode/3101-3200/3152.Special-Array-II/Solution.go b/leetcode/3101-3200/3152.Special-Array-II/Solution.go index d115ccf5e..462dbd437 100644 --- a/leetcode/3101-3200/3152.Special-Array-II/Solution.go +++ b/leetcode/3101-3200/3152.Special-Array-II/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, queries [][]int) []bool { + lq := len(queries) + ans := make([]bool, lq) + l := len(nums) + dp := make([]int, l) + for i := 1; i < l; i++ { + cur := nums[i] & 1 + pre := nums[i-1] & 1 + if cur != pre { + dp[i] = dp[i-1] + 1 + } + } + // 3, 4, 1, 2, 6 + // 0, 1, 2, 3, 0 + for i, q := range queries { + s, e := q[0], q[1] + if s == e || s >= e-dp[e] { + ans[i] = true + } + } + return ans } diff --git a/leetcode/3101-3200/3152.Special-Array-II/Solution_test.go b/leetcode/3101-3200/3152.Special-Array-II/Solution_test.go index 14ff50eb4..a5a9e6b6b 100644 --- a/leetcode/3101-3200/3152.Special-Array-II/Solution_test.go +++ b/leetcode/3101-3200/3152.Special-Array-II/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums []int + queries [][]int + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 4, 1, 2, 6}, [][]int{{0, 4}}, []bool{false}}, + {"TestCase2", []int{4, 3, 1, 6}, [][]int{{0, 2}, {2, 3}}, []bool{false, true}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f780e59e039198eabb44463ea35970240b63d40e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 10 Dec 2024 09:31:14 +0800 Subject: [PATCH 135/450] Add solution and test-cases for problem 2981 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 37 ++++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 66 insertions(+), 22 deletions(-) diff --git a/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/README.md b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/README.md index dea27366d..a96dc9f04 100755 --- a/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/README.md +++ b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/README.md @@ -1,28 +1,39 @@ # [2981.Find Longest Special Substring That Occurs Thrice I][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 a string `s` that consists of lowercase English letters. + +A string is called **special** if it is made up of only a single character. For example, the string `"abc"` is not special, whereas the strings `"ddd"`, `"zz"`, and `"f"` are special. + +Return the length of the **longest special substring** of `s` which occurs **at least thrice**, or `-1` if no special substring occurs at least thrice. + +A **substring** is a contiguous **non-empty** sequence of characters within a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aaaa" +Output: 2 +Explanation: The longest special substring which occurs thrice is "aa": substrings "aaaa", "aaaa", and "aaaa". +It can be shown that the maximum length achievable is 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Longest Special Substring That Occurs Thrice I -```go ``` +Input: s = "abcdef" +Output: -1 +Explanation: There exists no special substring which occurs at least thrice. Hence return -1. +``` + +**Example 3:** +``` +Input: s = "abcaba" +Output: 1 +Explanation: The longest special substring which occurs thrice is "a": substrings "abcaba", "abcaba", and "abcaba". +It can be shown that the maximum length achievable is 1. +``` ## 结语 diff --git a/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution.go b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution.go index d115ccf5e..a65264e64 100644 --- a/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution.go +++ b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + ans := -1 + cache := [26]map[int]int{} + for i := range 26 { + cache[i] = make(map[int]int) + } + l := len(s) + start := 0 + cur := s[start] + for i := 1; i < l; i++ { + if s[i] == cur { + continue + } + + index := cur - 'a' + count := i - start + for ll := 1; ll <= count; ll++ { + cache[index][ll] += count - ll + 1 + if cache[index][ll] >= 3 && ll > ans { + ans = ll + } + } + cur = s[i] + start = i + } + index := cur - 'a' + count := l - start + for ll := 1; ll <= count; ll++ { + cache[index][ll] += count - ll + 1 + if cache[index][ll] >= 3 && ll > ans { + ans = ll + } + } + + return ans } diff --git a/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution_test.go b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution_test.go index 14ff50eb4..5a0ff5a40 100644 --- a/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution_test.go +++ b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aaaa", 2}, + {"TestCase2", "abcdef", -1}, + {"TestCase3", "abcaba", 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1b1e2e94a575047315381566f790f9c7fe3b1e9d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 10 Dec 2024 09:45:26 +0800 Subject: [PATCH 136/450] Add solution and test-cases for problem 2982 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 37 +++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 67 insertions(+), 23 deletions(-) diff --git a/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/README.md b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/README.md index 79c904a73..99ca1e408 100755 --- a/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/README.md +++ b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/README.md @@ -1,28 +1,39 @@ -# [2982.Find Longest Special Substring That Occurs Thrice II][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) +# [2981.Find Longest Special Substring That Occurs Thrice I][title] ## Description +You are given a string `s` that consists of lowercase English letters. + +A string is called **special** if it is made up of only a single character. For example, the string `"abc"` is not special, whereas the strings `"ddd"`, `"zz"`, and `"f"` are special. + +Return the length of the **longest special substring** of `s` which occurs **at least thrice**, or `-1` if no special substring occurs at least thrice. + +A **substring** is a contiguous **non-empty** sequence of characters within a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aaaa" +Output: 2 +Explanation: The longest special substring which occurs thrice is "aa": substrings "aaaa", "aaaa", and "aaaa". +It can be shown that the maximum length achievable is 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Longest Special Substring That Occurs Thrice II -```go ``` +Input: s = "abcdef" +Output: -1 +Explanation: There exists no special substring which occurs at least thrice. Hence return -1. +``` + +**Example 3:** +``` +Input: s = "abcaba" +Output: 1 +Explanation: The longest special substring which occurs thrice is "a": substrings "abcaba", "abcaba", and "abcaba". +It can be shown that the maximum length achievable is 1. +``` ## 结语 diff --git a/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution.go b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution.go index d115ccf5e..a65264e64 100644 --- a/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution.go +++ b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + ans := -1 + cache := [26]map[int]int{} + for i := range 26 { + cache[i] = make(map[int]int) + } + l := len(s) + start := 0 + cur := s[start] + for i := 1; i < l; i++ { + if s[i] == cur { + continue + } + + index := cur - 'a' + count := i - start + for ll := 1; ll <= count; ll++ { + cache[index][ll] += count - ll + 1 + if cache[index][ll] >= 3 && ll > ans { + ans = ll + } + } + cur = s[i] + start = i + } + index := cur - 'a' + count := l - start + for ll := 1; ll <= count; ll++ { + cache[index][ll] += count - ll + 1 + if cache[index][ll] >= 3 && ll > ans { + ans = ll + } + } + + return ans } diff --git a/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution_test.go b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution_test.go index 14ff50eb4..5a0ff5a40 100644 --- a/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution_test.go +++ b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aaaa", 2}, + {"TestCase2", "abcdef", -1}, + {"TestCase3", "abcaba", 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 634fec46f47c750ddf97e2c44e33cb477f6b8ba2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 11 Dec 2024 09:30:36 +0800 Subject: [PATCH 137/450] Add solution and test-cases for problem 2779 --- .../README.md | 45 +++++++++++++++++++ .../Solution.go | 38 +++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/README.md diff --git a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/README.md b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/README.md new file mode 100644 index 000000000..c037d621e --- /dev/null +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/README.md @@ -0,0 +1,45 @@ +# [2779.Maximum Beauty of an Array After Applying Operation][title] + +## Description +You are given a **0-indexed** array nums and a **non-negative** integer `k`. + +In one operation, you can do the following: + +- Choose an index `i` that **hasn't been chosen before** from the range `[0, nums.length - 1]`. +- Replace `nums[i]` with any integer from the range `[nums[i] - k, nums[i] + k]`. + +The **beauty** of the array is the length of the longest subsequence consisting of equal elements. + +Return the **maximum** possible beauty of the array `nums` after applying the operation any number of times. + +**Note** that you can apply the operation to each index **only once**. + +A **subsequence** of an array is a new array generated from the original array by deleting some elements (possibly none) without changing the order of the remaining elements. + +**Example 1:** + +``` +Input: nums = [4,6,1,2], k = 2 +Output: 3 +Explanation: In this example, we apply the following operations: +- Choose index 1, replace it with 4 (from range [4,8]), nums = [4,4,1,2]. +- Choose index 3, replace it with 4 (from range [0,4]), nums = [4,4,1,4]. +After the applied operations, the beauty of the array nums is 3 (subsequence consisting of indices 0, 1, and 3). +It can be proven that 3 is the maximum possible length we can achieve. +``` + +**Example 2:** + +``` +Input: nums = [1,1,1,1], k = 10 +Output: 4 +Explanation: In this example we don't have to apply any operations. +The beauty of the array nums is 4 (whole array). +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-beauty-of-an-array-after-applying-operation +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go index d115ccf5e..7f2639807 100755 --- a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int) int { + sort.Ints(nums) + ans := 0 + start, end := 0, 0 + // 排序以后,能够出现交集的情况就是 + // 最小的元素定义了右边界 + // 最大的元素定义了左边界 + // re 就是交集的右边界 + re := nums[0] + k + + for ; end < len(nums); end++ { + // 还在同一个范围 + s := nums[end] - k + if s <= re { + // 还有可以增加de + continue + } + diff := end - start + ans = max(ans, diff) + + // 开始减少左侧的数据 + // 尝试移除start + start++ + for ; start <= end; start++ { + re = nums[start] + k + if s <= re { + break + } + } + } + diff := end - start + ans = max(ans, diff) + + return ans } diff --git a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go index 14ff50eb4..55bf92b8a 100755 --- a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 6, 1, 2}, 2, 3}, + {"TestCase2", []int{1, 1, 1, 1}, 10, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e013cda898b768546c48dce6936470d49d0bc73d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 12 Dec 2024 09:10:25 +0800 Subject: [PATCH 138/450] Add solution and test-cases for problem 2558 --- .../README.md | 42 ++++++++++++++ .../Solution.go | 57 ++++++++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/README.md diff --git a/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/README.md b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/README.md new file mode 100644 index 000000000..fa3173bff --- /dev/null +++ b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/README.md @@ -0,0 +1,42 @@ +# [2558.Take Gifts From the Richest Pile][title] + +## Description +You are given an integer array `gifts` denoting the number of gifts in various piles. Every second, you do the following: + +- Choose the pile with the maximum number of gifts. +- If there is more than one pile with the maximum number of gifts, choose any. +- Leave behind the floor of the square root of the number of gifts in the pile. Take the rest of the gifts. + +Return the number of gifts remaining after `k` seconds. + +**Example 1:** + +``` +Input: gifts = [25,64,9,4,100], k = 4 +Output: 29 +Explanation: +The gifts are taken in the following way: +- In the first second, the last pile is chosen and 10 gifts are left behind. +- Then the second pile is chosen and 8 gifts are left behind. +- After that the first pile is chosen and 5 gifts are left behind. +- Finally, the last pile is chosen again and 3 gifts are left behind. +The final remaining gifts are [5,8,9,4,3], so the total number of gifts remaining is 29. +``` + +**Example 2:** + +``` +Input: gifts = [1,1,1,1], k = 4 +Output: 4 +Explanation: +In this case, regardless which pile you choose, you have to leave behind 1 gift in each pile. +That is, you can't take any pile with you. +So, the total gifts remaining are 4. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/take-gifts-from-the-richest-pile +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go index d115ccf5e..18aa7a836 100755 --- a/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go +++ b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap2558 []int + +func (h *heap2558) Len() int { + return len(*h) +} + +func (h *heap2558) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap2558) Less(i, j int) bool { + return (*h)[i] > (*h)[j] +} + +func (h *heap2558) Push(x any) { + *h = append(*h, x.(int)) +} + +func (h *heap2558) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Sqrt2558(x int) int { + if x == 0 { + return 0 + } + + r := x + for r*r > x { + r = (r + x/r) / 2 + } + + return r +} + +func Solution(gifts []int, k int) int64 { + ans := int64(0) + h := &heap2558{} + for _, n := range gifts { + heap.Push(h, n) + } + for ; k > 0; k-- { + top := heap.Pop(h).(int) + x := Sqrt2558(top) + heap.Push(h, x) + } + for h.Len() > 0 { + top := heap.Pop(h).(int) + ans += int64(top) + } + return ans +} diff --git a/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go index 14ff50eb4..c7de27add 100755 --- a/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go +++ b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + gifts []int + k int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{25, 64, 9, 4, 100}, 4, 29}, + {"TestCase2", []int{1, 1, 1, 1}, 4, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.gifts, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.gifts, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 81ec328ae1a3ee054b6d98a6b970a3c45e38535e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 13 Dec 2024 09:05:39 +0800 Subject: [PATCH 139/450] Add solution and test-cases for problem 2593 --- .../README.md | 44 +++++++++++++++ .../Solution.go | 56 ++++++++++++++++++- .../Solution_test.go | 13 ++--- 3 files changed, 105 insertions(+), 8 deletions(-) create mode 100644 leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/README.md diff --git a/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/README.md b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/README.md new file mode 100644 index 000000000..7c0218e77 --- /dev/null +++ b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/README.md @@ -0,0 +1,44 @@ +# [2593.Find Score of an Array After Marking All Elements][title] + +## Description +You are given an array `nums` consisting of positive integers. + +Starting with `score = 0`, apply the following algorithm: + +- Choose the smallest integer of the array that is not marked. If there is a tie, choose the one with the smallest index. +- Add the value of the chosen integer to `score`. +- Mark **the chosen element and its two adjacent elements if they exist**. +- Repeat until all the array elements are marked. + +Return the score you get after applying the above algorithm. + +**Example 1:** + +``` +Input: nums = [2,1,3,4,5,2] +Output: 7 +Explanation: We mark the elements as follows: +- 1 is the smallest unmarked element, so we mark it and its two adjacent elements: [2,1,3,4,5,2]. +- 2 is the smallest unmarked element, so we mark it and its left adjacent element: [2,1,3,4,5,2]. +- 4 is the only remaining unmarked element, so we mark it: [2,1,3,4,5,2]. +Our score is 1 + 2 + 4 = 7. +``` + +**Example 2:** + +``` +Input: nums = [2,3,5,1,3,2] +Output: 5 +Explanation: We mark the elements as follows: +- 1 is the smallest unmarked element, so we mark it and its two adjacent elements: [2,3,5,1,3,2]. +- 2 is the smallest unmarked element, since there are two of them, we choose the left-most one, so we mark the one at index 0 and its right adjacent element: [2,3,5,1,3,2]. +- 2 is the only remaining unmarked element, so we mark it: [2,3,5,1,3,2]. +Our score is 1 + 2 + 2 = 5. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-score-of-an-array-after-marking-all-elements +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go index d115ccf5e..ea8eacfe9 100755 --- a/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go +++ b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type item2593 struct { + v, i int +} + +type heap2593 []item2593 + +func (h *heap2593) Len() int { + return len(*h) +} + +func (h *heap2593) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} +func (h *heap2593) Less(i, j int) bool { + a, b := (*h)[i], (*h)[j] + if a.v == b.v { + return a.i < b.i + } + return a.v < b.v +} + +func (h *heap2593) Push(x any) { + *h = append(*h, x.(item2593)) +} +func (h *heap2593) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution(nums []int) int64 { + l := len(nums) + used := make([]bool, l) + h := &heap2593{} + for i := range l { + heap.Push(h, item2593{v: nums[i], i: i}) + } + ans := int64(0) + for h.Len() > 0 { + top := heap.Pop(h).(item2593) + if used[top.i] { + continue + } + ans += int64(top.v) + if top.i-1 >= 0 { + used[top.i-1] = true + } + if top.i+1 < l { + used[top.i+1] = true + } + } + return ans +} diff --git a/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution_test.go b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution_test.go index 14ff50eb4..506fbce13 100755 --- a/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution_test.go +++ b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 1, 3, 4, 5, 2}, 7}, + {"TestCase", []int{2, 3, 5, 1, 3, 2}, 5}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3e9c33ba59de85338faeb14befa2b2d30bd18f5a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 14 Dec 2024 20:09:58 +0800 Subject: [PATCH 140/450] Add solution and test-cases for problem 2762 --- .../2762.Continuous-Subarrays/README.md | 43 ++++++++ .../2762.Continuous-Subarrays/Solution.go | 97 ++++++++++++++++++- .../Solution_test.go | 13 ++- 3 files changed, 144 insertions(+), 9 deletions(-) create mode 100644 leetcode/2701-2800/2762.Continuous-Subarrays/README.md diff --git a/leetcode/2701-2800/2762.Continuous-Subarrays/README.md b/leetcode/2701-2800/2762.Continuous-Subarrays/README.md new file mode 100644 index 000000000..6ea636963 --- /dev/null +++ b/leetcode/2701-2800/2762.Continuous-Subarrays/README.md @@ -0,0 +1,43 @@ +# [2762.Continuous Subarrays][title] + +## Description +You are given a **0-indexed** integer array `nums`. A subarray of `nums` is called continuous if: + +- Let `i, i + 1, ..., j` be the indices in the subarray. Then, for each pair of indices `i <= i1, i2 <= j, 0 <= |nums[i1] - nums[i2]| <= 2`. + +Return the total number of **continuous** subarrays. + +A subarray is a contiguous **non-empty** sequence of elements within an array. + +**Example 1:** + +``` +Input: nums = [5,4,2,4] +Output: 8 +Explanation: +Continuous subarray of size 1: [5], [4], [2], [4]. +Continuous subarray of size 2: [5,4], [4,2], [2,4]. +Continuous subarray of size 3: [4,2,4]. +Thereare no subarrys of size 4. +Total continuous subarrays = 4 + 3 + 1 = 8. +It can be shown that there are no more continuous subarrays. +``` + +**Example 2:** + +``` +Input: nums = [1,2,3] +Output: 6 +Explanation: +Continuous subarray of size 1: [1], [2], [3]. +Continuous subarray of size 2: [1,2], [2,3]. +Continuous subarray of size 3: [1,2,3]. +Total continuous subarrays = 3 + 2 + 1 = 6. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/continuous-subarrays +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2762.Continuous-Subarrays/Solution.go b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution.go index d115ccf5e..b95ba09b4 100755 --- a/leetcode/2701-2800/2762.Continuous-Subarrays/Solution.go +++ b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution.go @@ -1,5 +1,98 @@ package Solution -func Solution(x bool) bool { - return x +type SegmentTreeNode2762 struct { + Left, Right int + Min, Max int + LeftChild *SegmentTreeNode2762 + RightChild *SegmentTreeNode2762 +} + +func buildSegmentTree2762(arr []int, left, right int) *SegmentTreeNode2762 { + if left == right { + return &SegmentTreeNode2762{ + Left: left, + Right: right, + Min: arr[left], + Max: arr[left], + } + } + + mid := (left + right) / 2 + leftChild := buildSegmentTree2762(arr, left, mid) + rightChild := buildSegmentTree2762(arr, mid+1, right) + + node := &SegmentTreeNode2762{ + Left: left, + Right: right, + Min: min(leftChild.Min, rightChild.Min), + Max: max(leftChild.Max, rightChild.Max), + LeftChild: leftChild, + RightChild: rightChild, + } + + return node +} + +func queryMin2762(node *SegmentTreeNode2762, left, right int) int { + if node.Left == left && node.Right == right { + return node.Min + } + + mid := (node.Left + node.Right) / 2 + + if right <= mid { + return queryMin2762(node.LeftChild, left, right) + } else if left > mid { + return queryMin2762(node.RightChild, left, right) + } else { + leftMin := queryMin2762(node.LeftChild, left, mid) + rightMin := queryMin2762(node.RightChild, mid+1, right) + return min(leftMin, rightMin) + } +} + +func queryMax2762(node *SegmentTreeNode2762, left, right int) int { + if node.Left == left && node.Right == right { + return node.Max + } + + mid := (node.Left + node.Right) / 2 + + if right <= mid { + return queryMax2762(node.LeftChild, left, right) + } else if left > mid { + return queryMax2762(node.RightChild, left, right) + } else { + leftMax := queryMax2762(node.LeftChild, left, mid) + rightMax := queryMax2762(node.RightChild, mid+1, right) + return max(leftMax, rightMax) + } +} + +func Solution(nums []int) int64 { + l := len(nums) + ans := int64(1) + + tree := buildSegmentTree2762(nums, 0, l-1) + start := 0 + var _max, _min int + for end := 1; end < l; end++ { + _max = queryMax2762(tree, start, end) + _min = queryMin2762(tree, start, end) + if _max-_min <= 2 { + ans += int64(end-start) + 1 + continue + } + start++ + for ; start <= end; start++ { + _max = queryMax2762(tree, start, end) + _min = queryMin2762(tree, start, end) + if _max-_min <= 2 { + break + } + } + ans += int64(end-start) + 1 + } + + return ans } diff --git a/leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go index 14ff50eb4..cf48a396e 100755 --- a/leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go +++ b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 4, 2, 4}, 8}, + {"TestCase2", []int{1, 2, 3}, 6}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8f89ee6fbf374a6cfec02606462bec32b7809ce3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 15 Dec 2024 14:15:17 +0800 Subject: [PATCH 141/450] Add solution and test-cases for problem 1792 --- .../1792.Maximum-Average-Pass-Ratio/README.md | 28 ++++----- .../Solution.go | 57 ++++++++++++++++++- .../Solution_test.go | 22 +++---- 3 files changed, 81 insertions(+), 26 deletions(-) diff --git a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md index a43abd617..df92bacd1 100755 --- a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md +++ b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md @@ -1,28 +1,28 @@ # [1792.Maximum Average Pass Ratio][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 +There is a school that has classes of students and each class will be having a final exam. You are given a 2D integer array `classes`, where `classes[i] = [passi, totali]`. You know beforehand that in the `ith` class, there are `totali` total students, but only `passi` number of students will pass the exam. + +You are also given an integer `extraStudents`. There are another `extraStudent` brilliant students that are **guaranteed** to pass the exam of any class they are assigned to. You want to assign each of the `extraStudents` students to a class in a way that **maximizes** the **average** pass ratio across **all** the classes. + +The **pass ratio** of a class is equal to the number of students of the class that will pass the exam divided by the total number of students of the class. The **average pass ratio** is the sum of pass ratios of all the classes divided by the number of the classes. + +Return the **maximum** possible average pass ratio after assigning the `extraStudents` students. Answers within `10^-5` of the actual answer will be accepted. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: classes = [[1,2],[3,5],[2,2]], extraStudents = 2 +Output: 0.78333 +Explanation: You can assign the two extra students to the first class. The average pass ratio will be equal to (3/4 + 3/5 + 2/2) / 3 = 0.78333. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Average Pass Ratio -```go ``` - +Input: classes = [[2,4],[3,9],[4,5],[2,10]], extraStudents = 4 +Output: 0.53485 +``` ## 结语 diff --git a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go index d115ccf5e..829835ffe 100644 --- a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go +++ b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap1792 [][]int + +func (h *heap1792) Len() int { + return len(*h) +} + +func (h *heap1792) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap1792) Less(i, j int) bool { + a, b := (*h)[i], (*h)[j] + // 判断增幅 + aa := (float64(a[0]+1) / float64(a[1]+1)) - (float64(a[0]) / float64(a[1])) + bb := (float64(b[0]+1) / float64(b[1]+1)) - (float64(b[0]) / float64(b[1])) + return aa > bb +} + +func (h *heap1792) Push(x any) { + *h = append(*h, x.([]int)) +} + +func (h *heap1792) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution(classes [][]int, extraStudents int) float64 { + h := &heap1792{} + var ans float64 = 0 + for _, c := range classes { + if c[0] == c[1] { + // 永远都是1提升不了 + ans++ + continue + } + heap.Push(h, c) + } + if h.Len() > 0 { + for ; extraStudents > 0; extraStudents-- { + top := heap.Pop(h).([]int) + top[0]++ + top[1]++ + heap.Push(h, top) + } + for h.Len() > 0 { + top := heap.Pop(h).([]int) + ans += float64(top[0]) / float64(top[1]) + } + } + + return ans / float64(len(classes)) +} diff --git a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go index 14ff50eb4..c46dade19 100644 --- a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go +++ b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + classes [][]int + extraStudents int + expect float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}, {3, 5}, {2, 2}}, 2, 0.7833333333333333}, + {"TestCase2", [][]int{{2, 4}, {3, 9}, {4, 5}, {2, 10}}, 4, 0.5348484848484849}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.classes, c.extraStudents) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.classes, c.extraStudents) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f58edb8d085f898eb9ab8db510a0011f431cb5d2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 16 Dec 2024 09:13:05 +0800 Subject: [PATCH 142/450] Add solution and test-cases for problem 3264 --- .../README.md | 44 ++++++++++++----- .../Solution.go | 47 ++++++++++++++++++- .../Solution_test.go | 22 ++++----- 3 files changed, 88 insertions(+), 25 deletions(-) diff --git a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md index 49a4f32f6..aae2aed50 100755 --- a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md +++ b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md @@ -1,28 +1,46 @@ # [3264.Final Array State After K Multiplication Operations I][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 integer array `nums`, an integer `k`, and an integer `multiplier`. + +You need to perform `k` operations on `nums`. In each operation: + +- Find the **minimum** value `x` in `nums`. If there are multiple occurrences of the minimum value, select the one that appears **first**. +- Replace the selected minimum value `x` with `x * multiplier`. + +Return an integer array denoting the final state of `nums` after performing all `k` operations. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [2,1,3,5,6], k = 5, multiplier = 2 -## 题意 -> ... +Output: [8,4,6,5,6] -## 题解 +Explanation: -### 思路1 -> ... -Final Array State After K Multiplication Operations I -```go +Operation Result +After operation 1 [2, 2, 3, 5, 6] +After operation 2 [4, 2, 3, 5, 6] +After operation 3 [4, 4, 3, 5, 6] +After operation 4 [4, 4, 6, 5, 6] +After operation 5 [8, 4, 6, 5, 6] ``` +**Example 2:** + +``` +Input: nums = [1,2], k = 3, multiplier = 4 + +Output: [16,8] + +Explanation: + +Operation Result +After operation 1 [4, 2] +After operation 2 [4, 8] +After operation 3 [16, 8] +``` ## 结语 diff --git a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go index d115ccf5e..f62ca7eea 100644 --- a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go +++ b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap3264 [][2]int + +func (h *heap3264) Len() int { + return len(*h) +} + +func (h *heap3264) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap3264) Less(i, j int) bool { + a, b := (*h)[i], (*h)[j] + if a[1] == b[1] { + return a[0] < b[0] + } + return a[1] < b[1] +} + +func (h *heap3264) Push(x any) { + *h = append(*h, x.([2]int)) +} + +func (h *heap3264) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution(nums []int, k int, multiplier int) []int { + h := &heap3264{} + for i := range nums { + heap.Push(h, [2]int{i, nums[i]}) + } + for ; k > 0; k-- { + top := heap.Pop(h).([2]int) + top[1] *= multiplier + heap.Push(h, top) + } + for h.Len() > 0 { + top := heap.Pop(h).([2]int) + nums[top[0]] = top[1] + } + return nums +} diff --git a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go index 14ff50eb4..1d68a35d2 100644 --- a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go +++ b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums []int + k, multiplier int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 1, 3, 5, 6}, 5, 2, []int{8, 4, 6, 5, 6}}, + {"TestCase2", []int{1, 2}, 3, 4, []int{16, 8}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k, c.multiplier) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.nums, c.k, c.multiplier) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 350758869e3de335782f926a8b44b3ac7ff1ce09 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 17 Dec 2024 09:15:07 +0800 Subject: [PATCH 143/450] Add solution and test-cases for problem 2182 --- .../README.md | 38 ++++++----- .../Solution.go | 63 ++++++++++++++++++- .../Solution_test.go | 20 +++--- 3 files changed, 96 insertions(+), 25 deletions(-) diff --git a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md index 41990ec30..2648c06e2 100755 --- a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md +++ b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md @@ -1,28 +1,38 @@ # [2182.Construct String With Repeat Limit][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 a string `s` and an integer `repeatLimit`. Construct a new string `repeatLimitedString` using the characters of `s` such that no letter appears **more than** `repeatLimit` times **in a row**. You do **not** have to use all characters from `s`. + +Return the **lexicographically largest** `repeatLimitedString` possible. + +A string `a` is **lexicographically larger** than a string `b` if in the first position where `a` and `b` differ, string `a` has a letter that appears later in the alphabet than the corresponding letter in `b`. If the first `min(a.length, b.length)` characters do not differ, then the longer string is the lexicographically larger one. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "cczazcc", repeatLimit = 3 +Output: "zzcccac" +Explanation: We use all of the characters from s to construct the repeatLimitedString "zzcccac". +The letter 'a' appears at most 1 time in a row. +The letter 'c' appears at most 3 times in a row. +The letter 'z' appears at most 2 times in a row. +Hence, no letter appears more than repeatLimit times in a row and the string is a valid repeatLimitedString. +The string is the lexicographically largest repeatLimitedString possible so we return "zzcccac". +Note that the string "zzcccca" is lexicographically larger but the letter 'c' appears more than 3 times in a row, so it is not a valid repeatLimitedString. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Construct String With Repeat Limit -```go ``` - +Input: s = "aababab", repeatLimit = 2 +Output: "bbabaa" +Explanation: We use only some of the characters from s to construct the repeatLimitedString "bbabaa". +The letter 'a' appears at most 2 times in a row. +The letter 'b' appears at most 2 times in a row. +Hence, no letter appears more than repeatLimit times in a row and the string is a valid repeatLimitedString. +The string is the lexicographically largest repeatLimitedString possible so we return "bbabaa". +Note that the string "bbabaaa" is lexicographically larger but the letter 'a' appears more than 2 times in a row, so it is not a valid repeatLimitedString. +``` ## 结语 diff --git a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go index d115ccf5e..ff4064b50 100644 --- a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go +++ b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go @@ -1,5 +1,66 @@ package Solution -func Solution(x bool) bool { +import ( + "bytes" + "container/heap" +) + +type tmp2182 struct { + b byte + c int +} +type heap2182 []tmp2182 + +func (h *heap2182) Len() int { + return len(*h) +} + +func (h *heap2182) Less(i, j int) bool { + return (*h)[i].b > (*h)[j].b +} + +func (h *heap2182) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap2182) Push(x any) { + *h = append(*h, x.(tmp2182)) +} + +func (h *heap2182) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution(s string, repeatLimit int) string { + c := make(map[byte]int) + for _, b := range []byte(s) { + c[b]++ + } + list := &heap2182{} + for k, v := range c { + heap.Push(list, tmp2182{k, v}) + } + buf := bytes.NewBuffer([]byte{}) + + for list.Len() > 0 { + top := heap.Pop(list).(tmp2182) + for range min(top.c, repeatLimit) { + buf.WriteByte(top.b) + } + top.c -= repeatLimit + if top.c > 0 && list.Len() > 0 { + nextPickOne := heap.Pop(list).(tmp2182) + buf.WriteByte(nextPickOne.b) + nextPickOne.c-- + if nextPickOne.c > 0 { + heap.Push(list, nextPickOne) + } + heap.Push(list, top) + } + } + return buf.String() +} diff --git a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go index 14ff50eb4..061653c6e 100644 --- a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go +++ b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + limit int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "cczazcc", 3, "zzcccac"}, + {"TestCase2", "aababab", 2, "bbabaa"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.limit) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.limit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 53eba9faf3e888c85b66845087e0faeb94c91d2e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 18 Dec 2024 09:25:17 +0800 Subject: [PATCH 144/450] Add solution and test-cases for problem 2099 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 25 ++++++++++++- .../Solution_test.go | 21 ++++++----- 3 files changed, 58 insertions(+), 25 deletions(-) diff --git a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md index 2a353b7cf..20b4fed1f 100755 --- a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md +++ b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md @@ -1,28 +1,39 @@ # [2099.Find Subsequence of Length K With the Largest Sum][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 integer array `nums` and an integer `k`. You want to find a **subsequence** of `nums` of length `k` that has the **largest** sum. + +Return **any** such subsequence as an integer array of length `k`. + +A **subsequence** is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,1,3,3], k = 2 +Output: [3,3] +Explanation: +The subsequence has the largest sum of 3 + 3 = 6. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Subsequence of Length K With the Largest Sum -```go ``` +Input: nums = [-1,-2,3,4], k = 3 +Output: [-1,3,4] +Explanation: +The subsequence has the largest sum of -1 + 3 + 4 = 6. +``` + +**Example 3:** +``` +Input: nums = [3,4,3,3], k = 2 +Output: [3,4] +Explanation: +The subsequence has the largest sum of 3 + 4 = 7. +Another possible subsequence is [4, 3]. +``` ## 结语 diff --git a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go index d115ccf5e..6b457574f 100644 --- a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go +++ b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int) []int { + items := make([]int, 0) + for i := range nums { + items = append(items, i) + } + sort.Slice(items, func(i, j int) bool { + if nums[items[i]] == nums[items[j]] { + return i < j + } + return nums[items[i]] > nums[items[j]] + }) + + items = items[:k] + sort.Slice(items, func(i, j int) bool { + return items[i] < items[j] + }) + ans := make([]int, k) + for i := range items { + ans[i] = nums[items[i]] + } + return ans } diff --git a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution_test.go b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution_test.go index 14ff50eb4..bb6f17ccc 100644 --- a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution_test.go +++ b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 1, 3, 3}, 2, []int{3, 3}}, + {"TestCase2", []int{-1, -2, 3, 4}, 3, []int{-1, 3, 4}}, + {"TestCase3", []int{3, 4, 3, 3}, 2, []int{3, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 06779af2605228d9f2ca566029063103ffbb0447 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 19 Dec 2024 12:40:10 +0800 Subject: [PATCH 145/450] Add solution and test-cases for problem 923 --- .../0923.3Sum-With-Multiplicity/README.md | 39 ++++++++++++------- .../0923.3Sum-With-Multiplicity/Solution.go | 24 +++++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 59 insertions(+), 25 deletions(-) diff --git a/leetcode/901-1000/0923.3Sum-With-Multiplicity/README.md b/leetcode/901-1000/0923.3Sum-With-Multiplicity/README.md index 9624c9288..732f3090e 100644 --- a/leetcode/901-1000/0923.3Sum-With-Multiplicity/README.md +++ b/leetcode/901-1000/0923.3Sum-With-Multiplicity/README.md @@ -1,28 +1,41 @@ # [923.3Sum With Multiplicity][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 +Given an integer array `arr`, and an integer `target`, return the number of tuples `i, j, k` such that `i < j < k` and `arr[i] + arr[j] + arr[k] == target`. + +As the answer can be very large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,1,2,2,3,3,4,4,5,5], target = 8 +Output: 20 +Explanation: +Enumerating by the values (arr[i], arr[j], arr[k]): +(1, 2, 5) occurs 8 times; +(1, 3, 4) occurs 8 times; +(2, 2, 4) occurs 2 times; +(2, 3, 3) occurs 2 times. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -3Sum With Multiplicity -```go +``` +Input: arr = [1,1,2,2,2,2], target = 5 +Output: 12 +Explanation: +arr[i] = 1, arr[j] = arr[k] = 2 occurs 12 times: +We choose one 1 from [1,1] in 2 ways, +and two 2s from [2,2,2,2] in 6 ways. ``` +**Example 3:** + +``` +Input: arr = [2,1,3], target = 6 +Output: 1 +Explanation: (1, 2, 3) occured one time in the array so we return 1. +``` ## 结语 diff --git a/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution.go b/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution.go index d115ccf5e..94aab1a50 100644 --- a/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution.go +++ b/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +const mod923 = 1000000007 + +func Solution(arr []int, target int) int { + dp := make([][101]int, len(arr)) + dp[0][arr[0]] = 1 + for i := 1; i < len(arr); i++ { + for j := 0; j < 101; j++ { + dp[i][j] = dp[i-1][j] + } + dp[i][arr[i]]++ + } + + ans := 0 + for i := 2; i < len(arr); i++ { + cur := arr[i] + for pre := i - 1; pre > 0; pre-- { + if diff := target - arr[pre] - cur; diff >= 0 && diff <= 100 { + ans = (ans + dp[pre-1][diff]) % mod923 + } + } + } + return ans } diff --git a/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution_test.go b/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution_test.go index 14ff50eb4..e66f9d93d 100644 --- a/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution_test.go +++ b/leetcode/901-1000/0923.3Sum-With-Multiplicity/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + target int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 2, 2, 3, 3, 4, 4, 5, 5}, 8, 20}, + {"TestCase2", []int{1, 1, 2, 2, 2, 2}, 5, 12}, + {"TestCase3", []int{2, 1, 3}, 6, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.target) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b5671db65a9e0be80ecaeeb633489aaa33e17c16 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 20 Dec 2024 09:10:52 +0800 Subject: [PATCH 146/450] Add solution and test-cases for problem 1726 --- .../1726.Tuple-with-Same-Product/README.md | 29 ++++++++++--------- .../1726.Tuple-with-Same-Product/Solution.go | 16 ++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md b/leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md index 3d4fcee94..cf362fa9d 100755 --- a/leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md +++ b/leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md @@ -1,28 +1,29 @@ # [1726.Tuple with Same Product][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 +Given an array `nums` of **distinct** positive integers, return the number of tuples `(a, b, c, d)` such that `a * b = c * d` where `a`, `b`, `c`, and `d` are elements of `nums`, and `a != b != c != d`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,3,4,6] +Output: 8 +Explanation: There are 8 valid tuples: +(2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3) +(3,4,2,6) , (4,3,2,6) , (3,4,6,2) , (4,3,6,2) ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Tuple with Same Product -```go ``` - +Input: nums = [1,2,4,5,10] +Output: 16 +Explanation: There are 16 valid tuples: +(1,10,2,5) , (1,10,5,2) , (10,1,2,5) , (10,1,5,2) +(2,5,1,10) , (2,5,10,1) , (5,2,1,10) , (5,2,10,1) +(2,10,4,5) , (2,10,5,4) , (10,2,4,5) , (10,2,5,4) +(4,5,2,10) , (4,5,10,2) , (5,4,2,10) , (5,4,10,2) +``` ## 结语 diff --git a/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go b/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go index d115ccf5e..28b71941d 100644 --- a/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go +++ b/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + m := make(map[int]int) + l := len(nums) + for i := 0; i < l-1; i++ { + for j := i + 1; j < l; j++ { + cur := nums[i] * nums[j] + m[cur]++ + } + } + ans := 0 + for _, n := range m { + ans += (n - 1) * n / 2 * 8 + } + return ans } diff --git a/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution_test.go b/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution_test.go index 14ff50eb4..82aa4be65 100644 --- a/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution_test.go +++ b/leetcode/1701-1800/1726.Tuple-with-Same-Product/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{2, 3, 4, 6}, 8}, + {"TestCase2", []int{1, 2, 4, 5, 10}, 16}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 67ed7ad995e0cee31510c710cef79b464b33890c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 21 Dec 2024 19:36:11 +0800 Subject: [PATCH 147/450] Add solution and test-cases for problem 2872 --- .../README.md | 41 +++++++++++++++++++ .../Solution.go | 32 +++++++++++++++ .../Solution_test.go | 41 +++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/README.md create mode 100755 leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution.go create mode 100755 leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution_test.go diff --git a/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/README.md b/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/README.md new file mode 100644 index 000000000..03205f05d --- /dev/null +++ b/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/README.md @@ -0,0 +1,41 @@ +# [2872.Maximum Number of K-Divisible Components][title] + +## Description +There is an undirected tree with `n` nodes labeled from `0` to `n - 1`. You are given the integer `n` and a 2D integer array `edges` of length `n - 1`, where `edges[i] = [ai, bi]` indicates that there is an edge between nodes `ai` and `bi` in the tree. + +You are also given a **0-indexed** integer array `values` of length `n`, where `values[i]` is the **value** associated with the `ith` node, and an integer `k`. + +A **valid split** of the tree is obtained by removing any set of edges, possibly empty, from the tree such that the resulting components all have values that are divisible by `k`, where the **value of a connected component** is the sum of the values of its nodes. + +Return the **maximum number of components** in any valid split. + + +**Example 1:** + +``` +Input: n = 5, edges = [[0,2],[1,2],[1,3],[2,4]], values = [1,8,1,4,4], k = 6 +Output: 2 +Explanation: We remove the edge connecting node 1 with 2. The resulting split is valid because: +- The value of the component containing nodes 1 and 3 is values[1] + values[3] = 12. +- The value of the component containing nodes 0, 2, and 4 is values[0] + values[2] + values[4] = 6. +It can be shown that no other valid split has more than 2 connected components. +``` + +**Example 2:** + +``` +Input: n = 7, edges = [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6]], values = [3,0,6,1,5,2,1], k = 3 +Output: 3 +Explanation: We remove the edge connecting node 0 with 2, and the edge connecting node 0 with 1. The resulting split is valid because: +- The value of the component containing node 0 is values[0] = 3. +- The value of the component containing nodes 2, 5, and 6 is values[2] + values[5] + values[6] = 9. +- The value of the component containing nodes 1, 3, and 4 is values[1] + values[3] + values[4] = 6. +It can be shown that no other valid split has more than 3 connected components. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-k-divisible-components/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution.go b/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution.go new file mode 100755 index 000000000..d99c700d6 --- /dev/null +++ b/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution.go @@ -0,0 +1,32 @@ +package Solution + +func Solution(n int, edges [][]int, values []int, k int) int { + for i := range values { + values[i] %= k + } + adj := make([][]int, n) + for _, e := range edges { + a, b := e[0], e[1] + adj[a] = append(adj[a], b) + adj[b] = append(adj[b], a) + } + + count := 0 + var dfs func(int, int) int + dfs = func(parent, cur int) int { + s := 0 + for _, nei := range adj[cur] { + if nei == parent { + continue + } + s = (s + dfs(cur, nei)) % k + } + s = (s + values[cur]) % k + if s == 0 { + count++ + } + return s + } + dfs(-1, 0) + return count +} diff --git a/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution_test.go b/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution_test.go new file mode 100755 index 000000000..d50356745 --- /dev/null +++ b/leetcode/2801-2900/2872.Maximum-Number-Of-K-Divisible-Components/Solution_test.go @@ -0,0 +1,41 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + n int + edges [][]int + values []int + k int + expect int + }{ + {"TestCase1", 5, [][]int{{0, 2}, {1, 2}, {1, 3}, {2, 4}}, []int{1, 8, 1, 4, 4}, 6, 2}, + {"TestCase2", 7, [][]int{{0, 1}, {0, 2}, {1, 3}, {1, 4}, {2, 5}, {2, 6}}, []int{3, 0, 6, 1, 5, 2, 1}, 3, 3}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.n, c.edges, c.values, c.k) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.n, c.edges, c.values, c.k) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From de978c8e00afdff3c0d7f046f38817b426614a28 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 22 Dec 2024 16:12:25 +0800 Subject: [PATCH 148/450] Add solution and test-cases for problem 2940 --- .../README.md | 41 +++++++++----- .../Solution.go | 53 ++++++++++++++++++- .../Solution_test.go | 22 ++++---- 3 files changed, 89 insertions(+), 27 deletions(-) diff --git a/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/README.md b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/README.md index b751ffef2..5776decf1 100755 --- a/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/README.md +++ b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/README.md @@ -1,28 +1,41 @@ # [2940.Find Building Where Alice and Bob Can Meet][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 a **0-indexed** array `heights` of positive integers, where `heights[i]` represents the height of the `ith` building. + +If a person is in building `i`, they can move to any other building `j` if and only if `i < j` and `heights[i] < heights[j]`. + +You are also given another array `queries` where `queries[i] = [ai, bi]`. On the `ith` query, Alice is in building `ai` while Bob is in building `bi`. + +Return an array `ans` where `ans[i]` is **the index of the leftmost building** where Alice and Bob can meet on the `ith` query. If Alice and Bob cannot move to a common building on query `i`, set `ans[i]` to `-1`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: heights = [6,4,8,5,2,7], queries = [[0,1],[0,3],[2,4],[3,4],[2,2]] +Output: [2,5,-1,5,2] +Explanation: In the first query, Alice and Bob can move to building 2 since heights[0] < heights[2] and heights[1] < heights[2]. +In the second query, Alice and Bob can move to building 5 since heights[0] < heights[5] and heights[3] < heights[5]. +In the third query, Alice cannot meet Bob since Alice cannot move to any other building. +In the fourth query, Alice and Bob can move to building 5 since heights[3] < heights[5] and heights[4] < heights[5]. +In the fifth query, Alice and Bob are already in the same building. +For ans[i] != -1, It can be shown that ans[i] is the leftmost building where Alice and Bob can meet. +For ans[i] == -1, It can be shown that there is no building where Alice and Bob can meet. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find Building Where Alice and Bob Can Meet -```go ``` - +Input: heights = [5,3,8,2,6,1,4,6], queries = [[0,7],[3,5],[5,2],[3,0],[1,6]] +Output: [7,6,-1,4,6] +Explanation: In the first query, Alice can directly move to Bob's building since heights[0] < heights[7]. +In the second query, Alice and Bob can move to building 6 since heights[3] < heights[6] and heights[5] < heights[6]. +In the third query, Alice cannot meet Bob since Bob cannot move to any other building. +In the fourth query, Alice and Bob can move to building 4 since heights[3] < heights[4] and heights[0] < heights[4]. +In the fifth query, Alice can directly move to Bob's building since heights[1] < heights[6]. +For ans[i] != -1, It can be shown that ans[i] is the leftmost building where Alice and Bob can meet. +For ans[i] == -1, It can be shown that there is no building where Alice and Bob can meet. +``` ## 结语 diff --git a/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution.go b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution.go index d115ccf5e..2159f369c 100644 --- a/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution.go +++ b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(heights []int, queries [][]int) []int { + // monotonic stack + sort + binarysearch + ll := len(queries) + indies := make([]int, ll) + for i := range ll { + if queries[i][0] > queries[i][1] { + queries[i][0], queries[i][1] = queries[i][1], queries[i][0] + } + indies[i] = i + } + sort.Slice(indies, func(i, j int) bool { + return queries[indies[i]][1] > queries[indies[j]][1] + }) + + ans := make([]int, ll) + for i := range ll { + ans[i] = -1 + } + + l := len(heights) + stack := make([]int, l) + stackIndex := l - 1 + stack[stackIndex] = l - 1 + cur := l - 2 + + for _, i := range indies { + a, b := queries[i][0], queries[i][1] + if a == b || heights[a] < heights[b] { + ans[i] = b + continue + } + if b == l-1 { + continue + } + target := max(heights[a], heights[b]) + for ; cur > b; cur-- { + for ; stackIndex != l && heights[cur] >= heights[stack[stackIndex]]; stackIndex++ { + } + stackIndex-- + stack[stackIndex] = cur + } + if idx := sort.Search(l-stackIndex, func(i int) bool { + return heights[stack[i+stackIndex]] > target + }); idx != l-stackIndex { + ans[i] = stack[idx+stackIndex] + } + } + + return ans } diff --git a/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution_test.go b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution_test.go index 14ff50eb4..d07ec0687 100644 --- a/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution_test.go +++ b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + heights []int + queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{6, 4, 8, 5, 2, 7}, [][]int{{0, 1}, {0, 3}, {2, 4}, {3, 4}, {2, 2}}, []int{2, 5, -1, 5, 2}}, + {"TestCase2", []int{5, 3, 8, 2, 6, 1, 4, 6}, [][]int{{0, 7}, {3, 5}, {5, 2}, {3, 0}, {1, 6}}, []int{7, 6, -1, 4, 6}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.heights, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.heights, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 54e83071f9280f0dc921de0e19a1209cd9e34f1d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 23 Dec 2024 09:33:19 +0800 Subject: [PATCH 149/450] Add solution and test-cases for problem 1034 --- .../1034.Coloring-A-Border/README.md | 36 +++++++++++------- .../1034.Coloring-A-Border/Solution.go | 38 ++++++++++++++++++- .../1034.Coloring-A-Border/Solution_test.go | 23 +++++------ 3 files changed, 71 insertions(+), 26 deletions(-) diff --git a/leetcode/1001-1100/1034.Coloring-A-Border/README.md b/leetcode/1001-1100/1034.Coloring-A-Border/README.md index a0770ebbd..d20683d6a 100644 --- a/leetcode/1001-1100/1034.Coloring-A-Border/README.md +++ b/leetcode/1001-1100/1034.Coloring-A-Border/README.md @@ -1,28 +1,38 @@ # [1034.Coloring A Border][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 `m x n` integer matrix `grid`, and three integers `row`, `col`, and `color`. Each value in the grid represents the color of the grid square at that location. + +Two squares are called **adjacent** if they are next to each other in any of the 4 directions. + +Two squares belong to the same **connected component** if they have the same color and they are adjacent. + +The **border of a connected component** is all the squares in the connected component that are either adjacent to (at least) a square not in the component, or on the boundary of the grid (the first or last row or column). + +You should color the **border** of the **connected component** that contains the square `grid[row][col]` with `color`. + +Return the final grid. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,1],[1,2]], row = 0, col = 0, color = 3 +Output: [[3,3],[3,2]] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Coloring A Border -```go ``` +Input: grid = [[1,2,2],[2,3,2]], row = 0, col = 1, color = 3 +Output: [[1,3,3],[2,3,3]] +``` + +**Example 3:** +``` +Input: grid = [[1,1,1],[1,1,1],[1,1,1]], row = 1, col = 1, color = 2 +Output: [[2,2,2],[2,1,2],[2,2,2]] +``` ## 结语 diff --git a/leetcode/1001-1100/1034.Coloring-A-Border/Solution.go b/leetcode/1001-1100/1034.Coloring-A-Border/Solution.go index d115ccf5e..ac6ccd405 100644 --- a/leetcode/1001-1100/1034.Coloring-A-Border/Solution.go +++ b/leetcode/1001-1100/1034.Coloring-A-Border/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +var dirs1034 = [][2]int{ + {1, 0}, {-1, 0}, {0, 1}, {0, -1}, +} + +func Solution(grid [][]int, row int, col int, color int) [][]int { + m, n := len(grid), len(grid[0]) + initColor := grid[row][col] + + queue := [][2]int{{row, col}} + v := map[[2]int]struct{}{ + [2]int{row, col}: struct{}{}, + } + + pos := make([][2]int, 0) + for len(queue) > 0 { + nq := make([][2]int, 0) + for _, i := range queue { + for _, d := range dirs1034 { + nx, ny := i[0]+d[0], i[1]+d[1] + if nx < 0 || nx >= m || ny < 0 || ny >= n || grid[nx][ny] != initColor { + pos = append(pos, i) + continue + } + key := [2]int{nx, ny} + if _, ok := v[key]; !ok { + v[key] = struct{}{} + nq = append(nq, key) + } + } + } + queue = nq + } + for _, p := range pos { + grid[p[0]][p[1]] = color + } + return grid } diff --git a/leetcode/1001-1100/1034.Coloring-A-Border/Solution_test.go b/leetcode/1001-1100/1034.Coloring-A-Border/Solution_test.go index 14ff50eb4..23f6877c6 100644 --- a/leetcode/1001-1100/1034.Coloring-A-Border/Solution_test.go +++ b/leetcode/1001-1100/1034.Coloring-A-Border/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + grid [][]int + row, col, color int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 1}, {1, 2}}, 0, 0, 3, [][]int{{3, 3}, {3, 2}}}, + {"TestCase2", [][]int{{1, 2, 2}, {2, 3, 2}}, 0, 1, 3, [][]int{{1, 3, 3}, {2, 3, 3}}}, + {"TestCase3", [][]int{{1, 1, 1}, {1, 1, 1}, {1, 1, 1}}, 1, 1, 2, [][]int{{2, 2, 2}, {2, 1, 2}, {2, 2, 2}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.grid, c.row, c.col, c.color) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.grid, c.row, c.col, c.color) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 41e0eda30a2e2665f01d695f8cef0315b7371060 Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 24 Dec 2024 17:35:28 +0800 Subject: [PATCH 150/450] update go mod --- go.mod | 40 +++++++++++++++++++++------------------- go.sum | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index 25895fb39..7ba3545a2 100644 --- a/go.mod +++ b/go.mod @@ -1,33 +1,35 @@ module awesome-golang-algorithm -go 1.22 +go 1.23 require ( - github.com/imroc/req/v3 v3.43.7 - github.com/stretchr/testify v1.9.0 + github.com/imroc/req/v3 v3.49.0 + github.com/stretchr/testify v1.10.0 ) require ( - github.com/andybalholm/brotli v1.1.0 // indirect - github.com/cloudflare/circl v1.3.9 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect + github.com/cloudflare/circl v1.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20240528025155-186aa0362fba // indirect + github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/klauspost/compress v1.17.9 // indirect - github.com/onsi/ginkgo/v2 v2.19.0 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/onsi/ginkgo/v2 v2.22.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/quic-go v0.45.0 // indirect - github.com/refraction-networking/utls v1.6.6 // indirect - go.uber.org/mock v0.4.0 // indirect - golang.org/x/crypto v0.24.0 // indirect - golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect - golang.org/x/tools v0.22.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.48.2 // indirect + github.com/refraction-networking/utls v1.6.7 // indirect + go.uber.org/mock v0.5.0 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index bca5ad9ba..8ae2f38bf 100644 --- a/go.sum +++ b/go.sum @@ -1,17 +1,25 @@ github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE= github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= +github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= +github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20240528025155-186aa0362fba h1:ql1qNgCyOB7iAEk8JTNM+zJrgIbnyCKX/wdlyPufP5g= github.com/google/pprof v0.0.0-20240528025155-186aa0362fba/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -19,42 +27,81 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA= github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= +github.com/imroc/req/v3 v3.49.0 h1:5Rac2qvz7Dq0E3PeBo/c2szV3hagPQIGLoHtfBmYhu4= +github.com/imroc/req/v3 v3.49.0/go.mod h1:XZf4t94DNJzcA0UOBlA68hmSrWsAyvN407ADdH4mzCA= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= +github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= +github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM= +github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= github.com/quic-go/quic-go v0.45.0 h1:OHmkQGM37luZITyTSu6ff03HP/2IrwDX1ZFiNEhSFUE= github.com/quic-go/quic-go v0.45.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= +github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= +github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/refraction-networking/utls v1.6.6 h1:igFsYBUJPYM8Rno9xUuDoM5GQrVEqY4llzEXOkL43Ig= github.com/refraction-networking/utls v1.6.6/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= +github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= +github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e h1:4qufH0hlUYs6AO6XmZC3GqfDPGSXHVXUFR6OND+iJX4= +golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= +golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= +golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= From e27572ef159759270f1c2c6e11b0e812cc826543 Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 24 Dec 2024 17:44:32 +0800 Subject: [PATCH 151/450] update ci --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b4790ca7..90007230e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,11 +11,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 - - name: Set up Go 1.21 - uses: actions/setup-go@v4 + uses: actions/checkout@v4 + - name: Set up Go 1.23 + uses: actions/setup-go@v5 with: - go-version-file: 'go.mod' + go-version: '^1.23.0' id: go - name: Get dependencies run: go mod download From 8da44cf5ce82052fd59feb6d692ac33d56b50d9b Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 24 Dec 2024 17:45:13 +0800 Subject: [PATCH 152/450] update ci --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 90007230e..0e9a39431 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Check out code into the Go module directory uses: actions/checkout@v4 - - name: Set up Go 1.23 + - name: Set up Go uses: actions/setup-go@v5 with: go-version: '^1.23.0' From 68c77ff5d7397166fe941c59cc5aecf834d6360a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 25 Dec 2024 09:19:17 +0800 Subject: [PATCH 153/450] Add solution and test-cases for problem 561 --- .../501-600/0561.Array-Partition/README.md | 31 +++++++++++++++++++ .../501-600/0561.Array-Partition/Solution.go | 11 +++++-- .../0561.Array-Partition/Solution_test.go | 13 ++++---- 3 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 leetcode/501-600/0561.Array-Partition/README.md diff --git a/leetcode/501-600/0561.Array-Partition/README.md b/leetcode/501-600/0561.Array-Partition/README.md new file mode 100644 index 000000000..635ce2850 --- /dev/null +++ b/leetcode/501-600/0561.Array-Partition/README.md @@ -0,0 +1,31 @@ +# [561.Array Partition][title] + +## Description +Given an integer array `nums` of `2n` integers, group these integers into `n` pairs `(a1, b1), (a2, b2), ..., (an, bn)` such that the sum of `min(ai, bi)` for all `i` is **maximized**. Return the maximized sum. + +**Example 1:** + +``` +Input: nums = [1,4,3,2] +Output: 4 +Explanation: All possible pairings (ignoring the ordering of elements) are: +1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3 +2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3 +3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4 +So the maximum possible sum is 4. +``` + +**Example 2:** + +``` +Input: nums = [6,2,6,5,1,2] +Output: 9 +Explanation: The optimal pairing is (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/array-partition +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/501-600/0561.Array-Partition/Solution.go b/leetcode/501-600/0561.Array-Partition/Solution.go index d115ccf5e..96b939b1c 100755 --- a/leetcode/501-600/0561.Array-Partition/Solution.go +++ b/leetcode/501-600/0561.Array-Partition/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + sort.Ints(nums) + ans := 0 + for i := 0; i < len(nums); i += 2 { + ans += min(nums[i], nums[i+1]) + } + return ans } diff --git a/leetcode/501-600/0561.Array-Partition/Solution_test.go b/leetcode/501-600/0561.Array-Partition/Solution_test.go index 14ff50eb4..8fdbfb20a 100755 --- a/leetcode/501-600/0561.Array-Partition/Solution_test.go +++ b/leetcode/501-600/0561.Array-Partition/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, 4, 3, 2}, 4}, + {"TestCase2", []int{6, 2, 6, 5, 1, 2}, 9}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5bfd02bd5f2fbc84278e740611f52836f6088c40 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 26 Dec 2024 22:11:35 +0800 Subject: [PATCH 154/450] Add solution and test-cases for problem 986 --- .../0986.Interval-List-Intersections/1.png | Bin 0 -> 31457 bytes .../README.md | 31 +++++++++--------- .../Solution.go | 28 ++++++++++++++-- .../Solution_test.go | 19 +++++------ 4 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 leetcode/901-1000/0986.Interval-List-Intersections/1.png diff --git a/leetcode/901-1000/0986.Interval-List-Intersections/1.png b/leetcode/901-1000/0986.Interval-List-Intersections/1.png new file mode 100644 index 0000000000000000000000000000000000000000..72102be2ebfc426d3490a05052e97fb16730ad59 GIT binary patch literal 31457 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 literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0986.Interval-List-Intersections/README.md b/leetcode/901-1000/0986.Interval-List-Intersections/README.md index 832e30d99..40b4ea909 100644 --- a/leetcode/901-1000/0986.Interval-List-Intersections/README.md +++ b/leetcode/901-1000/0986.Interval-List-Intersections/README.md @@ -1,28 +1,29 @@ # [986.Interval List Intersections][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 two lists of closed intervals, `firstList` and `secondList`, where `firstList[i] = [starti, endi]` and `secondList[j] = [startj, endj]`. Each list of intervals is pairwise **disjoint** and in **sorted order**. -**Example 1:** +Return the intersection of these two interval lists. -``` -Input: a = "11", b = "1" -Output: "100" -``` +A **closed interval** `[a, b]` (with `a <= b`) denotes the set of real numbers `x` with `a <= x <= b`. + +The **intersection** of two closed intervals is a set of real numbers that are either empty or represented as a closed interval. For example, the intersection of `[1, 3]` and `[2, 4]` is `[2, 3]`. -## 题意 -> ... +**Example 1:** -## 题解 +![1](./1.png) -### 思路1 -> ... -Interval List Intersections -```go ``` +Input: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]] +Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]] +``` + +**Example 2:** +``` +Input: firstList = [[1,3],[5,9]], secondList = [] +Output: [] +``` ## 结语 diff --git a/leetcode/901-1000/0986.Interval-List-Intersections/Solution.go b/leetcode/901-1000/0986.Interval-List-Intersections/Solution.go index d115ccf5e..0cc9153f6 100644 --- a/leetcode/901-1000/0986.Interval-List-Intersections/Solution.go +++ b/leetcode/901-1000/0986.Interval-List-Intersections/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(firstList [][]int, secondList [][]int) [][]int { + la, lb := len(firstList), len(secondList) + if la == 0 || lb == 0 { + return nil + } + a, b := 0, 0 + ans := make([][]int, 0) + for a < la && b < lb { + af, as := firstList[a][0], firstList[a][1] + bf, bs := secondList[b][0], secondList[b][1] + if af > bs { + b++ + continue + } + if bf > as { + a++ + continue + } + ans = append(ans, []int{max(af, bf), min(as, bs)}) + if bs > as { + a++ + } else { + b++ + } + } + return ans } diff --git a/leetcode/901-1000/0986.Interval-List-Intersections/Solution_test.go b/leetcode/901-1000/0986.Interval-List-Intersections/Solution_test.go index 14ff50eb4..29e4ed61e 100644 --- a/leetcode/901-1000/0986.Interval-List-Intersections/Solution_test.go +++ b/leetcode/901-1000/0986.Interval-List-Intersections/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + f, s [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{0, 2}, {5, 10}, {13, 23}, {24, 25}}, [][]int{{1, 5}, {8, 12}, {15, 24}, {25, 26}}, [][]int{{1, 2}, {5, 5}, {8, 10}, {15, 23}, {24, 24}, {25, 25}}}, + {"TestCase2", [][]int{{1, 3}, {5, 9}}, nil, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.f, c.s) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.f, c.s) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2546691942a581e23aa183b8329a28162570c47e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 27 Dec 2024 09:17:33 +0800 Subject: [PATCH 155/450] Add solution and test-cases for problem 1471 --- .../README.md | 47 +++++++++++++++++++ .../Solution.go | 29 +++++++++++- .../Solution_test.go | 21 +++++---- 3 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/README.md diff --git a/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/README.md b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/README.md new file mode 100644 index 000000000..925ace52f --- /dev/null +++ b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/README.md @@ -0,0 +1,47 @@ +# [1471.The k Strongest Values in an Array][title] + +## Description +Given an array of integers `arr` and an integer `k`. + +A value `arr[i]` is said to be stronger than a value `arr[j]` if `|arr[i] - m| > |arr[j] - m|` where `m` is the **median** of the array. +If `|arr[i] - m| == |arr[j] - m|`, then `arr[i]` is said to be stronger than `arr[j]` if `arr[i] > arr[j]`. + +Return a list of the strongest `k` values in the array. return the answer **in any arbitrary order**. + +**Median** is the middle value in an ordered integer list. More formally, if the length of the list is n, the median is the element in position `((n - 1) / 2)` in the sorted list **(0-indexed)**. + +- For `arr = [6, -3, 7, 2, 11]`, `n = 5` and the median is obtained by sorting the array `arr = [-3, 2, 6, 7, 11]` and the median is `arr[m]` where `m = ((5 - 1) / 2) = 2`. The median is `6`. +- For `arr = [-7, 22, 17, 3]`, `n = 4` and the median is obtained by sorting the array `arr = [-7, 3, 17, 22]` and the median is `arr[m]` where `m = ((4 - 1) / 2) = 1`. The median is `3`. + +**Example 1:** + +``` +Input: arr = [1,2,3,4,5], k = 2 +Output: [5,1] +Explanation: Median is 3, the elements of the array sorted by the strongest are [5,1,4,2,3]. The strongest 2 elements are [5, 1]. [1, 5] is also accepted answer. +Please note that although |5 - 3| == |1 - 3| but 5 is stronger than 1 because 5 > 1. +``` + +**Example 2:** + +``` +Input: arr = [1,1,3,5,5], k = 2 +Output: [5,5] +Explanation: Median is 3, the elements of the array sorted by the strongest are [5,5,1,1,3]. The strongest 2 elements are [5, 5]. +``` + +**Example 3:** + +``` +Input: arr = [6,7,11,7,6,8], k = 5 +Output: [11,8,6,6,7] +Explanation: Median is 7, the elements of the array sorted by the strongest are [11,8,6,6,7,7]. +Any permutation of [11,8,6,6,7] is accepted. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-k-strongest-values-in-an-array +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go index d115ccf5e..38c83938a 100755 --- a/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go +++ b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(arr []int, k int) []int { + l := len(arr) + sort.Ints(arr) + median := arr[(l-1)/2] + ai, bi := 0, l-1 + ans := make([]int, k) + index := 0 + for ; k > 0; k, index = k-1, index+1 { + a := arr[ai] - median + b := arr[bi] - median + if a < 0 { + a = -a + } + if b < 0 { + b = -b + } + if a > b || (a == b && arr[ai] > arr[bi]) { + ans[index] = arr[ai] + ai++ + continue + } + ans[index] = arr[bi] + bi-- + } + return ans } diff --git a/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go index 14ff50eb4..6f8ec73e5 100755 --- a/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go +++ b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + arr []int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4, 5}, 2, []int{5, 1}}, + {"TestCase2", []int{1, 1, 3, 5, 5}, 2, []int{5, 5}}, + {"TestCase3", []int{6, 7, 11, 7, 6, 8}, 5, []int{11, 8, 6, 6, 7}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.arr, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.arr, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fe99be322c693b8d1b9263f3b4c5d61f9ed299e2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 28 Dec 2024 13:03:01 +0800 Subject: [PATCH 156/450] Add solution and test-cases for problem 689 --- .../README.md | 25 ++++++------ .../Solution.go | 38 ++++++++++++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 58 insertions(+), 26 deletions(-) diff --git a/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/README.md b/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/README.md index 24fcae335..9a198b89f 100644 --- a/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/README.md +++ b/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/README.md @@ -1,28 +1,25 @@ # [689.Maximum Sum of 3 Non-Overlapping Subarrays][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 +Given an integer array `nums` and an integer `k`, find three non-overlapping subarrays of length `k` with maximum sum and return them. + +Return the result as a list of indices representing the starting position of each interval (**0-indexed**). If there are multiple answers, return the lexicographically smallest one. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,1,2,6,7,5,1], k = 2 +Output: [0,3,5] +Explanation: Subarrays [1, 2], [2, 6], [7, 5] correspond to the starting indices [0, 3, 5]. +We could have also taken [2, 1], but an answer of [1, 3, 5] would be lexicographically larger. ``` -## 题意 -> ... - -## 题解 +**EXample 2:** -### 思路1 -> ... -Maximum Sum of 3 Non-Overlapping Subarrays -```go ``` - +Input: nums = [1,2,1,2,1,2,1,2,1], k = 2 +Output: [0,2,4] +``` ## 结语 diff --git a/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution.go b/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution.go index d115ccf5e..8c3e1d0a2 100644 --- a/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution.go +++ b/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) []int { + l := len(nums) + sl := l - k + 1 + sum := make([]int64, sl) + cur := int64(0) + i := 0 + for ; i < k; i++ { + cur += int64(nums[i]) + } + sum[0] = cur + for ; i < l; i++ { + cur -= int64(nums[i-k]) + cur += int64(nums[i]) + sum[i-k+1] = cur + } + maxIndex := make([]int, sl) + maxIndex[sl-1] = sl - 1 + for i := sl - 2; i >= 0; i-- { + maxIndex[i] = maxIndex[i+1] + if sum[i] >= sum[maxIndex[i+1]] { + maxIndex[i] = i + } + } + m := int64(0) + ans := make([]int, 3) + for i := 0; i < l; i++ { + for j := i + k; j < sl-k; j++ { + s := sum[i] + sum[j] + sum[maxIndex[j+k]] + if s > m { + ans[0], ans[1], ans[2] = i, j, maxIndex[j+k] + m = s + } + } + } + + return ans } diff --git a/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution_test.go b/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution_test.go index 14ff50eb4..5bbe6fa73 100644 --- a/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution_test.go +++ b/leetcode/601-700/0689.Maximum-Sum-of-3-Non-Overlapping-Subarrays/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 1, 2, 6, 7, 5, 1}, 2, []int{0, 3, 5}}, + {"TestCase2", []int{1, 2, 1, 2, 1, 2, 1, 2, 1}, 2, []int{0, 2, 4}}, + {"TestCase3", []int{4, 5, 10, 6, 11, 17, 4, 11, 1, 3}, 1, []int{4, 5, 7}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 06fe0f41a9cc935839161909d925c5c8b0b4885e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 30 Dec 2024 09:17:09 +0800 Subject: [PATCH 157/450] Add solution and test-cases for problem 1253 --- .../README.md | 40 ++++++++++------ .../Solution.go | 46 ++++++++++++++++++- .../Solution_test.go | 23 +++++----- 3 files changed, 83 insertions(+), 26 deletions(-) diff --git a/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/README.md b/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/README.md index 9a73c986c..baf3cedfd 100644 --- a/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/README.md +++ b/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/README.md @@ -1,28 +1,42 @@ # [1253.Reconstruct a 2-Row Binary Matrix][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 +Given the following details of a matrix with `n` columns and `2` rows : + +- The matrix is a binary matrix, which means each element in the matrix can be `0` or `1`. +- The sum of elements of the 0-th(upper) row is given as `upper`. +- The sum of elements of the 1-st(lower) row is given as `lower`. +- The sum of elements in the i-th column(0-indexed) is `colsum[i]`, where `colsum` is given as an integer array with length `n`. + +Your task is to reconstruct the matrix with `upper`, `lower` and `colsum`. + +Return it as a 2-D integer array. + +If there are more than one valid solution, any of them will be accepted. + +If no valid solution exists, return an empty 2-D array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: upper = 2, lower = 1, colsum = [1,1,1] +Output: [[1,1,0],[0,0,1]] +Explanation: [[1,0,1],[0,1,0]], and [[0,1,1],[1,0,0]] are also correct answers. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Reconstruct a 2-Row Binary Matrix -```go ``` +Input: upper = 2, lower = 3, colsum = [2,2,1,1] +Output: [] +``` + +**Example 3:** +``` +Input: upper = 5, lower = 5, colsum = [2,1,2,0,1,0,1,2,0,1] +Output: [[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]] +``` ## 结语 diff --git a/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution.go b/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution.go index d115ccf5e..e37b69440 100644 --- a/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution.go +++ b/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(upper int, lower int, colsum []int) [][]int { + res := make([][]int, 2) + l := len(colsum) + sum := 0 + for i := range l { + sum += colsum[i] + } + if sum != upper+lower { + return nil + } + + for i := range 2 { + res[i] = make([]int, l) + } + + for i := range l { + if colsum[i] == 2 { + if upper == 0 || lower == 0 { + return nil + } + res[0][i] = 1 + res[1][i] = 1 + upper-- + lower-- + } + } + + for i := range l { + if colsum[i] == 1 { + if upper > 0 { + res[0][i] = 1 + upper-- + continue + } + if lower > 0 { + res[1][i] = 1 + lower-- + continue + } + return nil + } + } + + return res } diff --git a/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution_test.go b/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution_test.go index 14ff50eb4..ffa199076 100644 --- a/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution_test.go +++ b/leetcode/1201-1300/1253.Reconstruct-a-2-Row-Binary-Matrix/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + upper, lower int + colsum []int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 1, []int{1, 1, 1}, [][]int{{1, 1, 0}, {0, 0, 1}}}, + {"TestCase2", 2, 3, []int{2, 2, 1, 1}, nil}, + {"TestCase3", 5, 5, []int{2, 1, 2, 0, 1, 0, 1, 2, 0, 1}, [][]int{{1, 1, 1, 0, 1, 0, 0, 1, 0, 0}, {1, 0, 1, 0, 0, 0, 1, 1, 0, 1}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.upper, c.lower, c.colsum) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.upper, c.lower, c.colsum) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7206d9c7f9fc889f4fd3ba2bed5dba44cd57c36b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 1 Jan 2025 21:10:25 +0800 Subject: [PATCH 158/450] Add solution and test-cases for problem 2161 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 21 ++++++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 52 insertions(+), 26 deletions(-) diff --git a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md index 2cbad6e7a..5287ecf9f 100755 --- a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md +++ b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md @@ -1,28 +1,37 @@ # [2161.Partition Array According to Given Pivot][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 a **0-indexed** integer array `nums` and an integer `pivot`. Rearrange `nums` such that the following conditions are satisfied: + +- Every element less than `pivot` appears **before** every element greater than `pivot`. +- Every element equal to `pivot` appears **in between** the elements less than and greater than `pivot`. +- The **relative order** of the elements less than `pivot` and the elements greater than `pivot` is maintained. + + - More formally, consider every `pi`, `pj` where `pi` is the new position of the `ith` element and `pj` is the new position of the `jth` element. For elements less than `pivot`, if `i < j` and `nums[i] < pivot` and `nums[j] < pivot`, then `pi < pj`. Similarly for elements greater than `pivot`, if `i < j` and `nums[i] > pivot` and `nums[j] > pivot`, then `pi < pj`. + +Return `nums` after the rearrangement. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [9,12,5,10,14,3,10], pivot = 10 +Output: [9,5,3,10,10,12,14] +Explanation: +The elements 9, 5, and 3 are less than the pivot so they are on the left side of the array. +The elements 12 and 14 are greater than the pivot so they are on the right side of the array. +The relative ordering of the elements less than and greater than pivot is also maintained. [9, 5, 3] and [12, 14] are the respective orderings. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Partition Array According to Given Pivot -```go ``` - +Input: nums = [-3,4,3,2], pivot = 2 +Output: [-3,2,4,3] +Explanation: +The element -3 is less than the pivot so it is on the left side of the array. +The elements 4 and 3 are greater than the pivot so they are on the right side of the array. +The relative ordering of the elements less than and greater than pivot is also maintained. [-3] and [4, 3] are the respective orderings. +``` ## 结语 diff --git a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go index d115ccf5e..a49ebb713 100644 --- a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go +++ b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, pivot int) []int { + i, j := 0, len(nums)-1 + res := make([]int, len(nums)) + for k := 0; k < len(nums); k++ { + if nums[k] < pivot { + res[i] = nums[k] + i++ + } + } + for k := len(nums) - 1; k >= 0; k-- { + if nums[k] > pivot { + res[j] = nums[k] + j-- + } + } + for ; i <= j; i++ { + res[i] = pivot + } + return res } diff --git a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go index 14ff50eb4..d2636a598 100644 --- a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go +++ b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + pivot int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{9, 12, 5, 10, 14, 3, 10}, 10, []int{9, 5, 3, 10, 10, 12, 14}}, + {"TestCase2", []int{-3, 4, 3, 2}, 2, []int{-3, 2, 4, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.pivot) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.pivot) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fead394c6425dbd71c05ae51b700f969bdc93238 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 2 Jan 2025 09:12:47 +0800 Subject: [PATCH 159/450] Add solution and test-cases for problem 2559 --- .../README.md | 37 +++++++++++++++++++ .../Solution.go | 24 +++++++++++- .../Solution_test.go | 22 +++++------ 3 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/README.md diff --git a/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/README.md b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/README.md new file mode 100644 index 000000000..d1b49c3af --- /dev/null +++ b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/README.md @@ -0,0 +1,37 @@ +# [2559.Count Vowel Strings in Ranges][title] + +## Description +You are given a **0-indexed** array of strings `words` and a 2D array of integers `queries`. + +Each query `queries[i] = [li, ri]` asks us to find the number of strings present in the range `li` to `ri` (both **inclusive**) of `words` that start and end with a vowel. + +Return an array `ans` of size `queries.length`, where `ans[i]` is the answer to the `ith` query. + +**Note** that the vowel letters are `'a'`, `'e'`, `'i'`, `'o'`, and `'u'`. + +**Example 1:** + +``` +Input: words = ["aba","bcb","ece","aa","e"], queries = [[0,2],[1,4],[1,1]] +Output: [2,3,0] +Explanation: The strings starting and ending with a vowel are "aba", "ece", "aa" and "e". +The answer to the query [0,2] is 2 (strings "aba" and "ece"). +to query [1,4] is 3 (strings "ece", "aa", "e"). +to query [1,1] is 0. +We return [2,3,0]. +``` + +**Example 2:** + +``` +Input: words = ["a","e","i"], queries = [[0,2],[0,1],[2,2]] +Output: [3,2,1] +Explanation: Every string satisfies the conditions, so we return [3,2,1]. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-vowel-strings-in-ranges +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go index d115ccf5e..b1a047854 100755 --- a/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go +++ b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func isVowel(b byte) bool { + return b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' +} + +func Solution(words []string, queries [][]int) []int { + count := make([]int, len(words)) + pre := 0 + for i, w := range words { + count[i] = pre + if isVowel(w[0]) && isVowel(w[len(w)-1]) { + count[i]++ + } + pre = count[i] + } + ans := make([]int, len(queries)) + for i, q := range queries { + ans[i] = count[q[1]] + if q[0] > 0 { + ans[i] -= count[q[0]-1] + } + } + return ans } diff --git a/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go index 14ff50eb4..ce474674b 100755 --- a/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go +++ b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + words []string + queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"aba", "bcb", "ece", "aa", "ee"}, [][]int{{0, 2}, {1, 4}, {1, 1}}, []int{2, 3, 0}}, + {"TestCase2", []string{"a", "e", "i"}, [][]int{{0, 2}, {0, 1}, {2, 2}}, []int{3, 2, 1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.words, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.words, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6e48907aef8c60b1d5744df0db106eee1d650175 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 3 Jan 2025 08:54:54 +0800 Subject: [PATCH 160/450] Add solution and test-cases for problem 2270 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 14 ++++++- .../Solution_test.go | 13 +++---- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md index c85001572..83467e73a 100755 --- a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md +++ b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md @@ -1,28 +1,39 @@ # [2270.Number of Ways to Split Array][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 a **0-indexed** integer array `nums` of length `n`. + +`nums` contains a **valid split** at index `i` if the following are true: + +- The sum of the first `i + 1` elements is **greater than or equal to** the sum of the last `n - i - 1` elements. +- There is **at least one** element to the right of `i`. That is, `0 <= i < n - 1`. + +Return the number of **valid splits** in `nums`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [10,4,-8,7] +Output: 2 +Explanation: +There are three ways of splitting nums into two non-empty parts: +- Split nums at index 0. Then, the first part is [10], and its sum is 10. The second part is [4,-8,7], and its sum is 3. Since 10 >= 3, i = 0 is a valid split. +- Split nums at index 1. Then, the first part is [10,4], and its sum is 14. The second part is [-8,7], and its sum is -1. Since 14 >= -1, i = 1 is a valid split. +- Split nums at index 2. Then, the first part is [10,4,-8], and its sum is 6. The second part is [7], and its sum is 7. Since 6 < 7, i = 2 is not a valid split. +Thus, the number of valid splits in nums is 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Ways to Split Array -```go ``` - +Input: nums = [2,3,1,0] +Output: 2 +Explanation: +There are two valid splits in nums: +- Split nums at index 1. Then, the first part is [2,3], and its sum is 5. The second part is [1,0], and its sum is 1. Since 5 >= 1, i = 1 is a valid split. +- Split nums at index 2. Then, the first part is [2,3,1], and its sum is 6. The second part is [0], and its sum is 0. Since 6 >= 0, i = 2 is a valid split. +``` ## 结语 diff --git a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go index d115ccf5e..6484e0276 100644 --- a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go +++ b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + ans := 0 + l := len(nums) + for i := 1; i < l; i++ { + nums[i] += nums[i-1] + } + for i := 0; i < l-1; i++ { + if nums[i] >= nums[l-1]-nums[i] { + ans++ + } + } + return ans } diff --git a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution_test.go b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution_test.go index 14ff50eb4..4fca660a3 100644 --- a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution_test.go +++ b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/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{10, 4, -8, 7}, 2}, + {"TestCase2", []int{2, 3, 1, 0}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 665c07a3f5fd25266d4c7c01874696c2eadf22f5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 4 Jan 2025 19:23:23 +0800 Subject: [PATCH 161/450] Add solution and test-cases for problem 132 --- .../0132.Palindrome-Partitioning-II/README.md | 35 ++++++++++++++++ .../Solution.go | 42 ++++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 leetcode/101-200/0132.Palindrome-Partitioning-II/README.md diff --git a/leetcode/101-200/0132.Palindrome-Partitioning-II/README.md b/leetcode/101-200/0132.Palindrome-Partitioning-II/README.md new file mode 100644 index 000000000..f16b5c723 --- /dev/null +++ b/leetcode/101-200/0132.Palindrome-Partitioning-II/README.md @@ -0,0 +1,35 @@ +# [132.Palindrome Partitioning II][title] + +## Description +Given a string `s`, partition `s` such that every `substring` of the partition is a `palindrome`. + +Return the **minimum** cuts needed for a palindrome partitioning of `s`. + +**Example 1:** + +``` +Input: s = "aab" +Output: 1 +Explanation: The palindrome partitioning ["aa","b"] could be produced using 1 cut. +``` + +**Example 2:** + +``` +Input: s = "a" +Output: 0 +``` + +**Example 3:** + +``` +Input: s = "ab" +Output: 1 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/palindrome-partitioning-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution.go b/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution.go index d115ccf5e..57da51f74 100644 --- a/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution.go +++ b/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + cache := map[string]int{} + var ( + dfs func(string) int + isPalindrome func(string) bool + ) + isPalindrome = func(s string) bool { + l, r := 0, len(s)-1 + for ; l < r; l, r = l+1, r-1 { + if s[l] != s[r] { + return false + } + } + return true + } + dfs = func(cur string) int { + l := len(cur) + if l == 0 || l == 1 { + return 0 + } + if v, ok := cache[cur]; ok { + return v + } + if isPalindrome(cur) { + cache[cur] = 0 + return 0 + } + m := -1 + for end := 1; end < len(cur); end++ { + if isPalindrome(cur[:end]) { + r := dfs(cur[end:]) + 1 + if m == -1 || m > r { + m = r + } + } + } + cache[cur] = m + return m + } + return dfs(s) } diff --git a/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution_test.go b/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution_test.go index 14ff50eb4..b5ddf2aa0 100644 --- a/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution_test.go +++ b/leetcode/101-200/0132.Palindrome-Partitioning-II/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aab", 1}, + {"TestCase2", "a", 0}, + {"TestCase3", "ab", 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6dde50cdffd60d75e4be25d07a426944de9d6f7c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 4 Jan 2025 20:46:11 +0800 Subject: [PATCH 162/450] Add solution and test-cases for problem 1745 --- .../1745.Palindrome-Partitioning-IV/README.md | 25 ++++----- .../Solution.go | 53 ++++++++++++++++++- .../Solution_test.go | 11 ++-- 3 files changed, 67 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md index 920353b5c..b0f5f9e10 100755 --- a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md +++ b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md @@ -1,28 +1,25 @@ # [1745.Palindrome Partitioning IV][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 +Given a string `s`, return `true` if it is possible to split the string `s` into three **non-empty** palindromic substrings. Otherwise, return `false`. + +A string is said to be palindrome if it the same string when reversed. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abcbdd" +Output: true +Explanation: "abcbdd" = "a" + "bcb" + "dd", and all three substrings are palindromes. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Palindrome Partitioning IV -```go ``` - +Input: s = "bcbddxy" +Output: false +Explanation: s cannot be split into 3 palindromes. +``` ## 结语 diff --git a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go index d115ccf5e..7ff90e66f 100644 --- a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go +++ b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func isPalindrome(s string) bool { + l, r := 0, len(s)-1 + for ; l < r; l, r = l+1, r-1 { + if s[l] != s[r] { + return false + } + } + return true +} + +func Solution(s string) bool { + l := len(s) + if l == 3 { + return true + } + left := make([]bool, l) + left[0] = true + for i := 1; i < l; i++ { + left[i] = isPalindrome(s[:i+1]) + } + right := make([]bool, l) + right[l-1] = true + for i := l - 2; i >= 0; i-- { + right[i] = isPalindrome(s[i:]) + } + + for i := 1; i < l-1; i++ { + for ll, r := i-1, i+1; ll >= 0 && r <= l-1; ll, r = ll-1, r+1 { + if left[ll] && right[r] { + return true + } + if s[ll] != s[r] { + break + } + } + } + for i := 1; i < l-2; i++ { + if s[i] != s[i+1] { + continue + } + + for ll, r := i-1, i+2; ll >= 0 && r <= l-1; ll, r = ll-1, r+1 { + if left[ll] && right[r] { + return true + } + if s[ll] != s[r] { + break + } + } + } + return false } diff --git a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go index 14ff50eb4..8bb0d5269 100644 --- a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go +++ b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcbdd", true}, + {"TestCase2", "bcbddxy", false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2da9729a8094e38b57e2c6139acaa33fad8ecd86 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 6 Jan 2025 09:14:40 +0800 Subject: [PATCH 163/450] Add solution and test-cases for problem 1375 --- .../README.md | 42 +++++++++++++++++++ .../Solution.go | 13 +++++- .../Solution_test.go | 13 +++--- 3 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/README.md diff --git a/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/README.md b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/README.md new file mode 100644 index 000000000..6767317c1 --- /dev/null +++ b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/README.md @@ -0,0 +1,42 @@ +# [1375.Number of Times Binary String Is Prefix-Aligned][title] + +## Description +You have a **1-indexed** binary string of length `n` where all the bits are `0` initially. We will flip all the bits of this binary string (i.e., change them from `0` to `1`) one by one. You are given a **1-indexed** integer array `flips` where `flips[i]` indicates that the bit at index `i` will be flipped in the `ith` step. + +A binary string is **prefix-aligned** if, after the `ith` step, all the bits in the **inclusive** range `[1, i]` are ones and all the other bits are zeros. + +Return the number of times the binary string is **prefix-aligned** during the flipping process. + +**Example 1:** + +``` +Input: flips = [3,2,4,1,5] +Output: 2 +Explanation: The binary string is initially "00000". +After applying step 1: The string becomes "00100", which is not prefix-aligned. +After applying step 2: The string becomes "01100", which is not prefix-aligned. +After applying step 3: The string becomes "01110", which is not prefix-aligned. +After applying step 4: The string becomes "11110", which is prefix-aligned. +After applying step 5: The string becomes "11111", which is prefix-aligned. +We can see that the string was prefix-aligned 2 times, so we return 2. +``` + +**Example 2:** + +``` +Input: flips = [4,1,2,3] +Output: 1 +Explanation: The binary string is initially "0000". +After applying step 1: The string becomes "0001", which is not prefix-aligned. +After applying step 2: The string becomes "1001", which is not prefix-aligned. +After applying step 3: The string becomes "1101", which is not prefix-aligned. +After applying step 4: The string becomes "1111", which is prefix-aligned. +We can see that the string was prefix-aligned 1 time, so we return 1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-times-binary-string-is-prefix-aligned +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go index d115ccf5e..c077ae8b0 100755 --- a/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go +++ b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(flips []int) int { + ans := 0 + sum, cur := 0, 0 + for i, f := range flips { + sum += i + 1 + cur += f + if sum == cur { + ans++ + } + } + return ans } diff --git a/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution_test.go b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution_test.go index 14ff50eb4..72a16a822 100755 --- a/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution_test.go +++ b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/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{3, 2, 4, 1, 5}, 2}, + {"TestCase2", []int{4, 1, 2, 3}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f0924896cb5a9329f5511f47c1a77e65235f3f5a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 7 Jan 2025 09:04:54 +0800 Subject: [PATCH 164/450] Add solution and test-cases for problem 1408 --- .../README.md | 38 +++++++++++++++++++ .../Solution.go | 18 ++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1408.String-Matching-in-an-Array/README.md diff --git a/leetcode/1401-1500/1408.String-Matching-in-an-Array/README.md b/leetcode/1401-1500/1408.String-Matching-in-an-Array/README.md new file mode 100644 index 000000000..35a414933 --- /dev/null +++ b/leetcode/1401-1500/1408.String-Matching-in-an-Array/README.md @@ -0,0 +1,38 @@ +# [1408.String Matching in an Array][title] + +## Description +Given an array of string `words`, return all strings in `words` that is a **substring** of another word. You can return the answer in **any order**. + +A **substring** is a contiguous sequence of characters within a strings + +**Example 1:** + +``` +Input: words = ["mass","as","hero","superhero"] +Output: ["as","hero"] +Explanation: "as" is substring of "mass" and "hero" is substring of "superhero". +["hero","as"] is also a valid answer. +``` + +**Example 2:** + +``` +Input: words = ["leetcode","et","code"] +Output: ["et","code"] +Explanation: "et", "code" are substring of "leetcode". +``` + +**Example 3:** + +``` +Input: words = ["blue","green","bu"] +Output: [] +Explanation: No string of words is substring of another string. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/string-matching-in-an-array +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go index d115ccf5e..6ff3edd15 100755 --- a/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go +++ b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(words []string) []string { + ans := make([]string, 0) + for i := range words { + for j := range words { + if j == i { + continue + } + if strings.Contains(words[j], words[i]) { + ans = append(ans, words[i]) + break + } + } + } + return ans } diff --git a/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go index 14ff50eb4..cc33dbe30 100755 --- a/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go +++ b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"mass", "as", "hero", "superhero"}, []string{"as", "hero"}}, + {"TestCase2", []string{"leetcode", "et", "code"}, []string{"et", "code"}}, + {"TestCase3", []string{"blue", "green", "bu"}, []string{}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2982175a6f6ee700aaf8caa790107ae2e3f2ed2a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 8 Jan 2025 09:30:36 +0800 Subject: [PATCH 165/450] Add solution and test-cases for problem 3042 --- .../README.md | 46 +++++++++++++------ .../Solution.go | 14 +++++- .../Solution_test.go | 14 +++--- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/README.md b/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/README.md index 6fdb7b9fb..598410c2b 100755 --- a/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/README.md +++ b/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/README.md @@ -1,28 +1,48 @@ # [3042.Count Prefix and Suffix Pairs I][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 a **0-indexed** string array `words`. + +Let's define a **boolean** function `isPrefixAndSuffix` that takes two strings, `str1` and `str2`: + +- `isPrefixAndSuffix(str1, str2)` returns `true` if `str1` is **both** a `prefix` and a `suffix` of `str2`, and `false` otherwise. + +For example, `isPrefixAndSuffix("aba", "ababa")` is `true` because `"aba"` is a prefix of `"ababa"` and also a suffix, but `isPrefixAndSuffix("abc", "abcd")` is `false`. + +Return an integer denoting the **number** of index pairs `(i, j)` such that `i < j`, and `isPrefixAndSuffix(words[i], words[j])` is `true`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["a","aba","ababa","aa"] +Output: 4 +Explanation: In this example, the counted index pairs are: +i = 0 and j = 1 because isPrefixAndSuffix("a", "aba") is true. +i = 0 and j = 2 because isPrefixAndSuffix("a", "ababa") is true. +i = 0 and j = 3 because isPrefixAndSuffix("a", "aa") is true. +i = 1 and j = 2 because isPrefixAndSuffix("aba", "ababa") is true. +Therefore, the answer is 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Prefix and Suffix Pairs I -```go ``` +Input: words = ["pa","papa","ma","mama"] +Output: 2 +Explanation: In this example, the counted index pairs are: +i = 0 and j = 1 because isPrefixAndSuffix("pa", "papa") is true. +i = 2 and j = 3 because isPrefixAndSuffix("ma", "mama") is true. +Therefore, the answer is 2. +``` + +**Example 3:** +``` +Input: words = ["abab","ab"] +Output: 0 +Explanation: In this example, the only valid index pair is i = 0 and j = 1, and isPrefixAndSuffix("abab", "ab") is false. +Therefore, the answer is 0. +``` ## 结语 diff --git a/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution.go b/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution.go index d115ccf5e..9a660dfc6 100644 --- a/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution.go +++ b/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(words []string) int { + ans := 0 + for i := 0; i < len(words); i++ { + for j := i + 1; j < len(words); j++ { + if strings.HasPrefix(words[j], words[i]) && strings.HasSuffix(words[j], words[i]) { + ans++ + } + } + } + return ans } diff --git a/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution_test.go b/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution_test.go index 14ff50eb4..df3228496 100644 --- a/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution_test.go +++ b/leetcode/3001-3100/3042.Count-Prefix-and-Suffix-Pairs-I/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"a", "aba", "ababa", "aa"}, 4}, + {"TestCase2", []string{"pa", "papa", "ma", "mama"}, 2}, + {"TestCase3", []string{"abab", "ab"}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2a33a5aff86916499eab9954bad13a5f90b8efb0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 9 Jan 2025 08:57:56 +0800 Subject: [PATCH 166/450] Add solution and test-cases for problem 2185 --- .../README.md | 27 +++++++------- .../Solution.go | 36 +++++++++++++++++-- .../Solution_test.go | 16 ++++----- 3 files changed, 55 insertions(+), 24 deletions(-) diff --git a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md index 60b610eec..05969b5a0 100755 --- a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md +++ b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md @@ -1,28 +1,27 @@ # [2185.Counting Words With a Given Prefix][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 strings `words` and a string `pref`. + +Return the number of strings in `words` that contain `pref` as a **prefix**. + +A **prefix** of a string `s` is any leading contiguous substring of `s`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["pay","attention","practice","attend"], pref = "at" +Output: 2 +Explanation: The 2 strings that contain "at" as a prefix are: "attention" and "attend". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Counting Words With a Given Prefix -```go ``` - +Input: words = ["leetcode","win","loops","success"], pref = "code" +Output: 0 +Explanation: There are no strings that contain "code" as a prefix. +``` ## 结语 diff --git a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go index d115ccf5e..670b607a7 100644 --- a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go +++ b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +type trieNode2185 struct { + c int + child [26]*trieNode2185 +} + +func insert(tree *trieNode2185, word string) { + cur := tree + for _, b := range word { + idx := b - 'a' + if cur.child[idx] == nil { + cur.child[idx] = &trieNode2185{} + } + cur.child[idx].c++ + cur = cur.child[idx] + } +} + +func search(tree *trieNode2185, target string) int { + cur := tree + for _, b := range target { + if cur.child[b-'a'] == nil { + return 0 + } + cur = cur.child[b-'a'] + } + return cur.c +} + +func Solution(words []string, pref string) int { + tree := &trieNode2185{} + for _, w := range words { + insert(tree, w) + } + return search(tree, pref) } diff --git a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go index 14ff50eb4..c81bd140d 100644 --- a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go +++ b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go @@ -10,18 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + prefix string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"pay", "attention", "practice", "attend"}, "at", 2}, + {"TestCase2", []string{"leetcode", "win", "loops", "success"}, "code", 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.prefix) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d160e66e4d017d323af0f59ff98caacb65e74ea5 Mon Sep 17 00:00:00 2001 From: Boris Date: Thu, 9 Jan 2025 10:59:34 +0800 Subject: [PATCH 167/450] update go.mod --- go.mod | 14 +++++++------- go.sum | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 7ba3545a2..8b07ff2cd 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module awesome-golang-algorithm go 1.23 require ( - github.com/imroc/req/v3 v3.49.0 + github.com/imroc/req/v3 v3.49.1 github.com/stretchr/testify v1.10.0 ) @@ -17,19 +17,19 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/klauspost/compress v1.17.11 // indirect - github.com/onsi/ginkgo/v2 v2.22.1 // indirect + github.com/onsi/ginkgo/v2 v2.22.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect github.com/quic-go/quic-go v0.48.2 // indirect github.com/refraction-networking/utls v1.6.7 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.31.0 // indirect - golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.33.0 // indirect + golang.org/x/net v0.34.0 // indirect golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.28.0 // indirect + golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect - golang.org/x/tools v0.28.0 // indirect + golang.org/x/tools v0.29.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 8ae2f38bf..ce17e1c16 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,7 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -29,6 +30,8 @@ github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA= github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= github.com/imroc/req/v3 v3.49.0 h1:5Rac2qvz7Dq0E3PeBo/c2szV3hagPQIGLoHtfBmYhu4= github.com/imroc/req/v3 v3.49.0/go.mod h1:XZf4t94DNJzcA0UOBlA68hmSrWsAyvN407ADdH4mzCA= +github.com/imroc/req/v3 v3.49.1 h1:Nvwo02riiPEzh74ozFHeEJrtjakFxnoWNR3YZYuQm9U= +github.com/imroc/req/v3 v3.49.1/go.mod h1:tsOk8K7zI6cU4xu/VWCZVtq9Djw9IWm4MslKzme5woU= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= @@ -39,6 +42,8 @@ github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM= github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -68,12 +73,16 @@ golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e h1:4qufH0hlUYs6AO6XmZC3GqfDPGSXHVXUFR6OND+iJX4= golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= @@ -84,6 +93,8 @@ golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= @@ -92,6 +103,8 @@ golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= @@ -102,6 +115,8 @@ golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= From d16f7b5bfc348134f3c30f5636a2406f4a2a306f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 10 Jan 2025 09:04:09 +0800 Subject: [PATCH 168/450] Add solution and test-cases for problem 3115 --- .../3115.Maximum-Prime-Difference/README.md | 27 ++++++++++--------- .../3115.Maximum-Prime-Difference/Solution.go | 20 ++++++++++++-- .../Solution_test.go | 13 +++++---- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md b/leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md index f5f58aa7c..defd94186 100755 --- a/leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md +++ b/leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md @@ -1,28 +1,29 @@ # [3115.Maximum Prime Difference][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 integer array `nums`. + +Return an integer that is the **maximum** distance between the **indices** of two (not necessarily different) prime numbers in `nums`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [4,2,9,5,3] -## 题意 -> ... +Output: 3 -## 题解 +Explanation: nums[1], nums[3], and nums[4] are prime. So the answer is |4 - 1| = 3. +``` + +**Example 2:** -### 思路1 -> ... -Maximum Prime Difference -```go ``` +Input: nums = [4,8,2,8] + +Output: 0 +Explanation: nums[2] is prime. Because there is just one prime number, the answer is |2 - 2| = 0. +``` ## 结语 diff --git a/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go b/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go index d115ccf5e..1db7c5db4 100644 --- a/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go +++ b/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + notPrimes := [101]bool{} + notPrimes[1] = true + for i := 2; i < 101; i++ { + if !notPrimes[i] { + for j := i + i; j < 101; j += i { + notPrimes[j] = true + } + } + } + m1, m2 := -1, len(nums)+1 + for i, n := range nums { + if !notPrimes[n] { + m1 = max(m1, i) + m2 = min(m2, i) + } + } + return m1 - m2 } diff --git a/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution_test.go b/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution_test.go index 14ff50eb4..ba22d68c1 100644 --- a/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution_test.go +++ b/leetcode/3101-3200/3115.Maximum-Prime-Difference/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{4, 2, 9, 5, 3}, 3}, + {"TestCase2", []int{4, 8, 2, 8}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2856c9488c684e5630213c043b463af0aeabce87 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 11 Jan 2025 15:12:28 +0800 Subject: [PATCH 169/450] Add solution and test-cases for problem 1400 --- .../README.md | 36 +++++++++++++++++++ .../Solution.go | 27 ++++++++++++-- .../Solution_test.go | 19 +++++----- 3 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/README.md diff --git a/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/README.md b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/README.md new file mode 100644 index 000000000..34b170e1d --- /dev/null +++ b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/README.md @@ -0,0 +1,36 @@ +# [1400.Construct K Palindrome Strings][title] + +## Description +Given a string `s` and an integer `k`, return `true` if you can use all the characters in `s` to construct `k` palindrome strings or `false` otherwise. + +**Example 1:** + +``` +Input: s = "annabelle", k = 2 +Output: true +Explanation: You can construct two palindromes using all characters in s. +Some possible constructions "anna" + "elble", "anbna" + "elle", "anellena" + "b" +``` + +**Example 2:** + +``` +Input: s = "leetcode", k = 3 +Output: false +Explanation: It is impossible to construct 3 palindromes using all the characters of s. +``` + +**Example 3:** + +``` +Input: s = "true", k = 4 +Output: true +Explanation: The only possible solution is to put each character in a separate string. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-k-palindrome-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go index d115ccf5e..2e42c441a 100755 --- a/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go +++ b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) bool { + if len(s) < k { + return false + } + count := [26]int{} + for _, b := range s { + count[b-'a']++ + } + odd, even := 0, 0 + for _, n := range count { + if n == 0 { + continue + } + even += n + if n&1 == 1 { + odd++ + } + } + if odd > k { + return false + } + if k == odd { + return true + } + return k <= even } diff --git a/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go index 14ff50eb4..61f3e814a 100755 --- a/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go +++ b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + s string + k int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "annabelle", 2, true}, + {"TestCase2", "leetcode", 3, false}, + {"TestCase3", "true", 4, true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From eee9b167293783ca2da881f5681452e022f0cd12 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 12 Jan 2025 18:36:58 +0800 Subject: [PATCH 170/450] Add solution and test-cases for problem 2116 --- .../1.png | Bin 0 -> 3379 bytes .../README.md | 46 ++++++++++++------ .../Solution.go | 37 +++++++++++++- .../Solution_test.go | 19 ++++---- 4 files changed, 77 insertions(+), 25 deletions(-) create mode 100644 leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/1.png diff --git a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/1.png b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..11fc2d2a0a27c7c54092e9b34ccbb8fa641c852a GIT binary patch literal 3379 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 literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md index 9448f27aa..4b3a8a33e 100755 --- a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md +++ b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md @@ -1,28 +1,46 @@ # [2116.Check if a Parentheses String Can Be Valid][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 +A parentheses string is a **non-empty** string consisting only of `'('` and `')'`. It is valid if **any** of the following conditions is **true**: + +- It is `()`. +- It can be written as `AB` (`A` concatenated with `B`), where `A` and `B` are valid parentheses strings. +- It can be written as `(A)`, where `A` is a valid parentheses string. + +You are given a parentheses string `s` and a string `locked`, both of length `n`. `locked` is a binary string consisting only of `'0'`s and `'1'`s. For **each** index `i` of `locked`, + +- If `locked[i]` is `'1'`, you **cannot** change `s[i]`. +- But if `locked[i]` is `'0'`, you **can** change `s[i]` to either `'('` or `')'`. + +Return `true` if you can make `s` a valid parentheses string. Otherwise, return `false`. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "))()))", locked = "010100" +Output: true +Explanation: locked[1] == '1' and locked[3] == '1', so we cannot change s[1] or s[3]. +We change s[0] and s[4] to '(' while leaving s[2] and s[5] unchanged to make s valid. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Check if a Parentheses String Can Be Valid -```go ``` +Input: s = "()()", locked = "0000" +Output: true +Explanation: We do not need to make any changes because s is already valid. +``` + +**Example 3:** +``` +Input: s = ")", locked = "0" +Output: false +Explanation: locked permits us to change s[0]. +Changing s[0] to either '(' or ')' will not make s valid. +``` ## 结语 diff --git a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go index d115ccf5e..350e0b612 100644 --- a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go +++ b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, locked string) bool { + l := len(s) + if l&1 == 1 { + return false + } + stack1, stack2 := make([]int, l), make([]int, l) + i1, i2 := -1, -1 + for i, b := range s { + if locked[i] == '0' { + i1++ + stack1[i1] = i + continue + } + if b == '(' { + i2++ + stack2[i2] = i + continue + } + if i2 != -1 { + i2-- + continue + } + if i1 != -1 { + i1-- + continue + } + return false + } + for i2 >= 0 && i1 >= 0 { + if stack2[i2] > stack1[i1] { + break + } + i2, i1 = i2-1, i1-1 + } + return i2 == -1 } diff --git a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go index 14ff50eb4..d13eec50a 100644 --- a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go +++ b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string + locked string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "))()))", "010100", true}, + {"TestCase2", "()()", "0000", true}, + {"TestCase3", ")", "0", false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.locked) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.locked) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0ff19c699f6ba2e1016a22e7464b521e4763f2a1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 13 Jan 2025 09:14:05 +0800 Subject: [PATCH 171/450] Add solution and test-cases for problem 3223 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 18 ++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md index 14fd0d8fe..5bfb0c89c 100755 --- a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md +++ b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md @@ -1,28 +1,40 @@ # [3223.Minimum Length of String After Operations][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 a string `s`. + +You can perform the following process on `s` **any** number of times: + +- Choose an index `i` in the string such that there is **at least** one character to the left of index `i` that is equal to `s[i]`, and **at least** one character to the right that is also equal to `s[i]`. +- Delete the **closest** character to the **left** of index `i` that is equal to `s[i]`. +- Delete the **closest** character to the **right** of index `i` that is equal to `s[i]`. + +Return the **minimum** length of the final string `s` that you can achieve. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "abaacbcbb" -## 题意 -> ... +Output: 5 -## 题解 +Explanation: +We do the following operations: -### 思路1 -> ... -Minimum Length of String After Operations -```go +Choose index 2, then remove the characters at indices 0 and 3. The resulting string is s = "bacbcbb". +Choose index 3, then remove the characters at indices 0 and 5. The resulting string is s = "acbcb". ``` +**Example 2:** + +``` +Input: s = "aa" + +Output: 2 + +Explanation: +We cannot perform any operations, so we return the length of the original string. +``` ## 结语 diff --git a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go index d115ccf5e..b8be5898e 100644 --- a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go +++ b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + count := [26]int{} + for _, b := range s { + count[b-'a']++ + } + ans := 0 + for i := range 26 { + if count[i] != 0 { + if count[i]&1 == 1 { + ans++ + continue + } + ans += 2 + } + } + return ans } diff --git a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go index 14ff50eb4..045dcca7f 100644 --- a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go +++ b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abaacbcbb", 5}, + {"TestCase2", "aa", 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0f8737a592b9e3eeb055f55c01a6effc0d1645b1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 14 Jan 2025 08:59:33 +0800 Subject: [PATCH 172/450] Add solution and test-cases for problem 2657 --- .../README.md | 38 +++++++++++++++++++ .../Solution.go | 23 ++++++++++- .../Solution_test.go | 19 +++++----- 3 files changed, 68 insertions(+), 12 deletions(-) create mode 100644 leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/README.md diff --git a/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/README.md b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/README.md new file mode 100644 index 000000000..56e60d0e9 --- /dev/null +++ b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/README.md @@ -0,0 +1,38 @@ +# [2657.Find the Prefix Common Array of Two Arrays][title] + +## Description +You are given two **0-indexed** integer permutations `A` and `B` of length `n`. + +A **prefix common array** of `A` and `B` is an array `C` such that `C[i]` is equal to the count of numbers that are present at or before the index `i` in both `A` and `B`. + +Return the **prefix common array** of `A` and `B`. + +A sequence of `n` integers is called a **permutation** if it contains all integers from `1` to `n` exactly once. + +**Example 1:** + +``` +Input: A = [1,3,2,4], B = [3,1,2,4] +Output: [0,2,3,4] +Explanation: At i = 0: no number is common, so C[0] = 0. +At i = 1: 1 and 3 are common in A and B, so C[1] = 2. +At i = 2: 1, 2, and 3 are common in A and B, so C[2] = 3. +At i = 3: 1, 2, 3, and 4 are common in A and B, so C[3] = 4. +``` + +**Example 2:** + +``` +Input: A = [2,3,1], B = [3,1,2] +Output: [0,1,3] +Explanation: At i = 0: no number is common, so C[0] = 0. +At i = 1: only 3 is common in A and B, so C[1] = 1. +At i = 2: 1, 2, and 3 are common in A and B, so C[2] = 3. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-prefix-common-array-of-two-arrays +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go index d115ccf5e..fceb92fa5 100755 --- a/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go +++ b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(A []int, B []int) []int { + ans := make([]int, len(A)) + count := make([]uint8, len(A)+1) + for i := 0; i < len(A); i++ { + if i > 0 { + ans[i] = ans[i-1] + } + count[A[i]]++ + count[B[i]]++ + if A[i] == B[i] { + ans[i]++ + continue + } + if count[A[i]] == 2 { + ans[i]++ + } + if count[B[i]] == 2 { + ans[i]++ + } + } + return ans } diff --git a/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution_test.go b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution_test.go index 14ff50eb4..e93ed6691 100755 --- a/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution_test.go +++ b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + a, b []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 2, 4}, []int{3, 1, 2, 4}, []int{0, 2, 3, 4}}, + {"TestCase2", []int{2, 3, 1}, []int{3, 1, 2}, []int{0, 1, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a, c.b) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.a, c.b) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c91f7ed445470cf4015438ee293942764c59fb4f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 15 Jan 2025 09:46:25 +0800 Subject: [PATCH 173/450] Add solution and test-cases for problem 2429 --- .../2401-2500/2429.Minimize-XOR/README.md | 36 ++++++++++------- .../2401-2500/2429.Minimize-XOR/Solution.go | 39 ++++++++++++++++++- .../2429.Minimize-XOR/Solution_test.go | 19 +++++---- 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/leetcode/2401-2500/2429.Minimize-XOR/README.md b/leetcode/2401-2500/2429.Minimize-XOR/README.md index 4debd8e0d..84bde4275 100755 --- a/leetcode/2401-2500/2429.Minimize-XOR/README.md +++ b/leetcode/2401-2500/2429.Minimize-XOR/README.md @@ -1,28 +1,36 @@ # [2429.Minimize XOR][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 +Given two positive integers `num1` and `num2`, find the positive integer `x` such that: + +- `x` has the same number of set bits as `num2`, and +- The value `x XOR num1` is minimal. + +Note that `XOR` is the bitwise XOR operation. + +Return the integer `x`. The test cases are generated such that `x` is **uniquely determined**. + +The number of **set bits** of an integer is the number of `1`'s in its binary representation. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num1 = 3, num2 = 5 +Output: 3 +Explanation: +The binary representations of num1 and num2 are 0011 and 0101, respectively. +The integer 3 has the same number of set bits as num2, and the value 3 XOR 3 = 0 is minimal. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimize XOR -```go ``` - +Input: num1 = 1, num2 = 12 +Output: 3 +Explanation: +The binary representations of num1 and num2 are 0001 and 1100, respectively. +The integer 3 has the same number of set bits as num2, and the value 3 XOR 1 = 2 is minimal. +``` ## 结语 diff --git a/leetcode/2401-2500/2429.Minimize-XOR/Solution.go b/leetcode/2401-2500/2429.Minimize-XOR/Solution.go index d115ccf5e..026dae64f 100644 --- a/leetcode/2401-2500/2429.Minimize-XOR/Solution.go +++ b/leetcode/2401-2500/2429.Minimize-XOR/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +func countOfOne(x int) int { + c := 0 + for x > 0 { + c++ + x = x & (x - 1) + } + return c +} + +func Solution(num1 int, num2 int) int { + n1, n2 := countOfOne(num1), countOfOne(num2) + if n1 == n2 { + return num1 + } + if n1 > n2 { + diff := n1 - n2 + mask := 1 + for i := 0; i < 32 && diff > 0; i++ { + if mask&num1 == mask { + diff-- + } + mask <<= 1 + } + return num1 & ^(mask - 1) + } + ans := num1 + mask := 1 + diff := n2 - n1 + + for i := 0; i < 32 && diff > 0; i++ { + if mask&num1 == 0 { + ans |= mask + diff-- + } + mask <<= 1 + } + return ans } diff --git a/leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go b/leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go index 14ff50eb4..998297343 100644 --- a/leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go +++ b/leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n1, n2 int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 5, 3}, + {"TestCase2", 1, 12, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n1, c.n2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n1, c.n2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2484b86d024c8a23b46e9103b6174e9e9eeb7110 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 16 Jan 2025 09:31:35 +0800 Subject: [PATCH 174/450] Add solution and test-cases for problem 2425 --- .../README.md | 31 ++++++++++--------- .../Solution.go | 17 ++++++++-- .../Solution_test.go | 21 ++++++------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md index 01b852845..3f103b364 100755 --- a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md +++ b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md @@ -1,28 +1,31 @@ # [2425.Bitwise XOR of All Pairings][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 two **0-indexed** arrays, `nums1` and `nums2`, consisting of non-negative integers. There exists another array, `nums3`, which contains the bitwise XOR of **all pairings** of integers between `nums1` and `nums2` (every integer in `nums1` is paired with every integer in `nums2` **exactly once**). + +Return the **bitwise XOR** of all integers in `nums3`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [2,1,3], nums2 = [10,2,5,0] +Output: 13 +Explanation: +A possible nums3 array is [8,0,7,2,11,3,4,1,9,1,6,3]. +The bitwise XOR of all these numbers is 13, so we return 13. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Bitwise XOR of All Pairings -```go ``` - +Input: nums1 = [1,2], nums2 = [3,4] +Output: 0 +Explanation: +All possible pairs of bitwise XORs are nums1[0] ^ nums2[0], nums1[0] ^ nums2[1], nums1[1] ^ nums2[0], +and nums1[1] ^ nums2[1]. +Thus, one possible nums3 array is [2,5,1,6]. +2 ^ 5 ^ 1 ^ 6 = 0, so we return 0. +``` ## 结语 diff --git a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go index d115ccf5e..3ea2d35b7 100644 --- a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go +++ b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int) int { + l1 := len(nums1) & 1 + l2 := len(nums2) & 1 + ans := 0 + if l2 == 1 { + for _, n := range nums1 { + ans ^= n + } + } + if l1 == 1 { + for _, n := range nums2 { + ans ^= n + } + } + return ans } diff --git a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go index 14ff50eb4..8b44f0284 100644 --- a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go +++ b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums1, nums2 []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 1, 3}, []int{10, 2, 5, 0}, 13}, + {"TestCase2", []int{1, 2}, []int{3, 4}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums1, c.nums2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums1, c.nums2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e766e63d5be69b811fb57f5d99289b22d76424cb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 17 Jan 2025 09:09:18 +0800 Subject: [PATCH 175/450] Add solution and test-cases for problem 2683 --- .../2683.Neighboring-Bitwise-XOR/README.md | 51 +++++++++++++++++++ .../2683.Neighboring-Bitwise-XOR/Solution.go | 8 ++- .../Solution_test.go | 12 ++--- 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/README.md diff --git a/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/README.md b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/README.md new file mode 100644 index 000000000..07377a32f --- /dev/null +++ b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/README.md @@ -0,0 +1,51 @@ +# [2683.Neighboring Bitwise XOR][title] + +## Description +A **0-indexed** array `derived` with length n is derived by computing the **bitwise XOR** (⊕) of adjacent values in a **binary array** `original` of length `n`. + +Specifically, for each index `i` in the range `[0, n - 1]`: + +- If `i = n - 1`, then `derived[i] = original[i] ⊕ original[0]`. +- Otherwise, `derived[i] = original[i] ⊕ original[i + 1]`. + +Given an array `derived`, your task is to determine whether there exists a **valid binary array** `original` that could have formed `derived`. + +Return **true** if such an array exists or **false** otherwise. + +- A binary array is an array containing only **0**'s and **1**'s + +**Example 1:** + +``` +Input: derived = [1,1,0] +Output: true +Explanation: A valid original array that gives derived is [0,1,0]. +derived[0] = original[0] ⊕ original[1] = 0 ⊕ 1 = 1 +derived[1] = original[1] ⊕ original[2] = 1 ⊕ 0 = 1 +derived[2] = original[2] ⊕ original[0] = 0 ⊕ 0 = 0 +``` + +**Example 2:** + +``` +Input: derived = [1,1] +Output: true +Explanation: A valid original array that gives derived is [0,1]. +derived[0] = original[0] ⊕ original[1] = 1 +derived[1] = original[1] ⊕ original[0] = 1 +``` + +**Example 3:** + +``` +Input: derived = [1,0] +Output: false +Explanation: There is no valid original array that gives derived. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/neighboring-bitwise-xor +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go index d115ccf5e..1b5c28ca9 100755 --- a/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go +++ b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go @@ -1,5 +1,9 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(derived []int) bool { + ans := 0 + for _, n := range derived { + ans ^= n + } + return ans == 0 } diff --git a/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go index 14ff50eb4..91878a2d0 100755 --- a/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go +++ b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 0}, true}, + {"TestCase2", []int{1, 1}, true}, + {"TestCase3", []int{1, 0}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0337aae57c2c07b994d699ff0b10ed05c954cab2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 18 Jan 2025 17:31:49 +0800 Subject: [PATCH 176/450] Add solution and test-cases for problem 1368 --- .../1.png | Bin 0 -> 15702 bytes .../2.png | Bin 0 -> 4280 bytes .../3.png | Bin 0 -> 2502 bytes .../README.md | 55 +++++++++++++ .../Solution.go | 75 +++++++++++++++++- .../Solution_test.go | 14 ++-- 6 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/1.png create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/2.png create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/3.png create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/README.md diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/1.png b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0e2ecf2267b8dd4a264bbc520ce517b29b567c GIT binary patch literal 15702 zcmeI3d011|w!pDeQGsBk3aG%Nw$j!z2m&fo3std|qE#H25fL>^0cA3n>j0@1g;pg9 z6>8K`Hy;5&;~% z9q^g+XG%)BiK-L6GvRnnsMF4HB_$FY{hLu8a&@#yQxw5_hL7k;rfa&(hH0U8+GghasYaIUn<&%y0X&@Ytl4T{tDNpAw_m6FkZNk{Eqzr}Dy z^^15I!06maF{yU8AojsKR)?d-{22EF+`7@aNn;p zDoSdpUNR73Z?0!)j7F1JVIB-$+((J~_EVc_LjB zHL_-y4zD(jyt>OH;+oE60Ck&_p|N-0qkF7g_o27!+m8K4NXD7y*!!x~3*(N25Y=s* zK8u`z1$}CQIiT*|I+g2-N7wtaK36yeyf{==zUq}qY@K_=+~>h0#dF8`9dHL_VTZa9#|?ytVm zvxRsnHI_0GGJ4g&!XihcQ{*^yQkT1i^@@460=3&+mG!-ZxWF(|lhI*X zr_A__%W7EMJWsZ;jyh9D$l|hBADQIs@rKcS%cfOU8+T+!7jN&KjYY((7$3`y&aG|G z#aeXbatg>^{f>DuTfgnIWr_H-eMId2p5k5W2@!YbCXPAL_eu*F)@|?ohW$jpD50q9 z6;i5#zbaus=-+K&Qs}eAiG0J^;w!UERm)1A$q1W!h1J>Wp$aBK8R^fjG#fiQyrf_r zmJqIAqE_7Xfp_jwJdU!3oNm>Yp#|3RZ~GC6R+PU(e<)p93+%&tiMS)^7OQNzmqn&Q zY~|@yHk5DuMKk+XQ&uAZ!tPVaT2Yn1e&s<@oXe*zdt=LfjbE8beqG5cZC=MwWwpCH zF2WjUTDf_(Eyx+O;(}$YCTTq18+~Lu>+co(r25@y`+wN&q!oCQ-P&`iUWK*a35*Lg z-~{C+l(gBZ7#{}%Z5K8Z?-bWClfLpe&34S+vCdnVp40G-;mgmqe@@uSw={@3^)L2-oOXw@~ zu)(#o#VbyPw@@Y9B|6t)ocI>Y?e^@V^(B?;TEC<#y3MRRRcjoK7K!lHV0`^a27G&K;BL@nDYB-3oAO>zf-Mlu{4KmT9E9bMxS(LAr|?_(1$nxFdMAicc&$#z}dVQP|!Q4fwI6w9YU0SZFiV9*5DEEgDZg$1Qb&9C^%st+oWJ3)IAE4 z1L&d^2?u+8md%DJ$2^or!av>!cYdb5o9=9Z=FZmV{cs{=CwBc?4kiX!NA}Aj`RUW~ z({u9Y7{oSL+jx5y3jrkPPpw9Www^(0d+eFtKh^l^%38OJjHLQcE#wADMB3A*r{_ev zWBmyRQT#)-{b0hzg>{RrE|Z1nbBl>QGR`Kd?T(-Ja+IQ-Icc^@<`EXe%n>-N4P5s# z+u~%x`%aUg&)#8Bd~6ORlQk=+Huv(kHO9A{|0t6&G;%~0yg`!KOvC-UU`4`$I&$>u z3VzY~sTaa=S)7XLCMT25a*$T`sllX$-jIPimV5FF1pHP{j?28)0+$N~6H2q@3O=w2 zE5D4Mq8(9Tm8&QEUP}_&)s81+fv=UR3f^jAV2qM-oQM(KKo10$5GUGdHx?9pNX;)! zWEEYvxH(iVdo0aH;Ft$_q{A55rb|6I3f=y`-GP@hNseT+b}%t?2u%lMq!4c@=-
  1. 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 ILDVD8(&qcU=>Ca3 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 literal 0 HcmV?d00001 diff --git a/leetcode/1701-1800/1765.Map-of-Highest-Peak/README.md b/leetcode/1701-1800/1765.Map-of-Highest-Peak/README.md index c7e656ff1..71019e9a0 100755 --- a/leetcode/1701-1800/1765.Map-of-Highest-Peak/README.md +++ b/leetcode/1701-1800/1765.Map-of-Highest-Peak/README.md @@ -1,28 +1,42 @@ # [1765.Map of Highest Peak][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 integer matrix `isWater` of size `m x n` that represents a map of **land** and **water** cells. + +- If `isWater[i][j] == 0`, cell `(i, j)` is a **land** cell. +- If `isWater[i][j] == 1`, cell `(i, j)` is a **water** cell. + +You must assign each cell a height in a way that follows these rules: + +- The height of each cell must be non-negative. +- If the cell is a **water** cell, its height must be `0`. +- Any two adjacent cells must have an absolute height difference of **at most 1**. A cell is adjacent to another cell if the former is directly north, east, south, or west of the latter (i.e., their sides are touching). + +Find an assignment of heights such that the maximum height in the matrix is **maximized**. -**Example 1:** +Return an integer matrix `height` of size `m x n` where `height[i][j]` is cell `(i, j)`'s height. If there are multiple solutions, return **any** of them. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: isWater = [[0,1],[0,0]] +Output: [[1,0],[2,1]] +Explanation: The image shows the assigned heights of each cell. +The blue cell is the water cell, and the green cells are the land cells. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Map of Highest Peak -```go ``` - +Input: isWater = [[0,0,1],[1,0,0],[0,0,0]] +Output: [[1,1,0],[0,1,1],[1,2,2]] +Explanation: A height of 2 is the maximum possible height of any assignment. +Any height assignment that has a maximum height of 2 while still meeting the rules will also be accepted. +``` ## 结语 diff --git a/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go b/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go index d115ccf5e..b2ddd79a9 100644 --- a/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go +++ b/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(isWater [][]int) [][]int { + var dir = [][2]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, + } + queue := [][2]int{} + m, n := len(isWater), len(isWater[0]) + res := make([][]int, m) + for i := range m { + res[i] = make([]int, n) + for j := range n { + res[i][j] = -1 + } + } + for i := range m { + for j := range n { + if isWater[i][j] == 1 { + queue = append(queue, [2]int{i, j}) + res[i][j] = 0 + } + } + } + h := 1 + for len(queue) > 0 { + nq := make([][2]int, 0) + for _, cur := range queue { + for _, d := range dir { + nx, ny := cur[0]+d[0], cur[1]+d[1] + if nx >= 0 && nx < m && ny >= 0 && ny < n && res[nx][ny] == -1 { + res[nx][ny] = h + nq = append(nq, [2]int{nx, ny}) + } + } + } + queue = nq + h++ + } + + return res } diff --git a/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution_test.go b/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution_test.go index 14ff50eb4..9e6841291 100644 --- a/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution_test.go +++ b/leetcode/1701-1800/1765.Map-of-Highest-Peak/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{{0, 1}, {0, 0}}, [][]int{{1, 0}, {2, 1}}}, + {"TestCase2", [][]int{{0, 0, 1}, {1, 0, 0}, {0, 0, 0}}, [][]int{{1, 1, 0}, {0, 1, 1}, {1, 2, 2}}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c416a5d2593d6a62f08afbabb7919db26131364b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 23 Jan 2025 09:32:21 +0800 Subject: [PATCH 180/450] Add solution and test-cases for problem 1089 --- .../1001-1100/1089.Duplicate-Zeros/README.md | 25 ++++++++--------- .../1089.Duplicate-Zeros/Solution.go | 14 ++++++++++ .../1089.Duplicate-Zeros/Solution_test.go | 28 +++++++++++++++++-- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/leetcode/1001-1100/1089.Duplicate-Zeros/README.md b/leetcode/1001-1100/1089.Duplicate-Zeros/README.md index 824bb0373..0c9835889 100644 --- a/leetcode/1001-1100/1089.Duplicate-Zeros/README.md +++ b/leetcode/1001-1100/1089.Duplicate-Zeros/README.md @@ -1,28 +1,25 @@ # [1089.Duplicate Zeros][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 +Given a fixed-length integer array `arr`, duplicate each occurrence of zero, shifting the remaining elements to the right. + +**Note** that elements beyond the length of the original array are not written. Do the above modifications to the input array in place and do not return anything. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,0,2,3,0,4,5,0] +Output: [1,0,0,2,3,0,0,4] +Explanation: After calling your function, the input array is modified to: [1,0,0,2,3,0,0,4] ``` -## 题意 -> ... - -## 题解 +**EXample 2:** -### 思路1 -> ... -Duplicate Zeros -```go ``` - +Input: arr = [1,2,3] +Output: [1,2,3] +Explanation: After calling your function, the input array is modified to: [1,2,3] +``` ## 结语 diff --git a/leetcode/1001-1100/1089.Duplicate-Zeros/Solution.go b/leetcode/1001-1100/1089.Duplicate-Zeros/Solution.go index 0928a389b..b862b4a92 100644 --- a/leetcode/1001-1100/1089.Duplicate-Zeros/Solution.go +++ b/leetcode/1001-1100/1089.Duplicate-Zeros/Solution.go @@ -13,3 +13,17 @@ func Solution(arr []int) { } } } + +func Solution1(arr []int) { + tmp := make([]int, len(arr)) + index, i := 0, 0 + for ; i < len(arr) && index < len(arr); i++ { + if arr[i] != 0 { + tmp[index] = arr[i] + index++ + continue + } + index += 2 + } + copy(arr, tmp) +} diff --git a/leetcode/1001-1100/1089.Duplicate-Zeros/Solution_test.go b/leetcode/1001-1100/1089.Duplicate-Zeros/Solution_test.go index 806aebc40..b07b482c2 100644 --- a/leetcode/1001-1100/1089.Duplicate-Zeros/Solution_test.go +++ b/leetcode/1001-1100/1089.Duplicate-Zeros/Solution_test.go @@ -30,10 +30,34 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + expect []int + }{ + {"TestCase", []int{1, 0, 2, 3, 0, 4, 5, 0}, []int{1, 0, 0, 2, 3, 0, 0, 4}}, + {"TestCase", []int{1, 2, 3}, []int{1, 2, 3}}, + {"TestCase", []int{}, []int{}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + Solution1(c.inputs) + if !reflect.DeepEqual(c.inputs, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, c.inputs, c.inputs) + } + }) + } +} + +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 267b286491f343c10c3de1edfb75732692c052dd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 24 Jan 2025 21:00:11 +0800 Subject: [PATCH 181/450] Add solution and test-cases for problem 493 --- leetcode/401-500/0493.Reverse-Pairs/README.md | 34 ++++++++------ .../401-500/0493.Reverse-Pairs/Solution.go | 45 ++++++++++++++++++- .../0493.Reverse-Pairs/Solution_test.go | 13 +++--- 3 files changed, 69 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0493.Reverse-Pairs/README.md b/leetcode/401-500/0493.Reverse-Pairs/README.md index 86fb1c88f..0cf009b11 100644 --- a/leetcode/401-500/0493.Reverse-Pairs/README.md +++ b/leetcode/401-500/0493.Reverse-Pairs/README.md @@ -1,28 +1,34 @@ # [493.Reverse Pairs][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 +Given an integer array `nums`, return the number of **reverse pairs** in the array. + +A **reverse pair** is a pair `(i, j)` where: + +- `0 <= i < j < nums.length` and +- `nums[i] > 2 * nums[j]`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,2,3,1] +Output: 2 +Explanation: The reverse pairs are: +(1, 4) --> nums[1] = 3, nums[4] = 1, 3 > 2 * 1 +(3, 4) --> nums[3] = 3, nums[4] = 1, 3 > 2 * 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Reverse Pairs -```go ``` - +Input: nums = [2,4,3,5,1] +Output: 3 +Explanation: The reverse pairs are: +(1, 4) --> nums[1] = 4, nums[4] = 1, 4 > 2 * 1 +(2, 4) --> nums[2] = 3, nums[4] = 1, 3 > 2 * 1 +(3, 4) --> nums[3] = 5, nums[4] = 1, 5 > 2 * 1 +``` ## 结语 diff --git a/leetcode/401-500/0493.Reverse-Pairs/Solution.go b/leetcode/401-500/0493.Reverse-Pairs/Solution.go index d115ccf5e..74a4fed7c 100644 --- a/leetcode/401-500/0493.Reverse-Pairs/Solution.go +++ b/leetcode/401-500/0493.Reverse-Pairs/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +func merge(nums []int, start, end int) int { + mid := start + (end-start)/2 + l, r := start, mid+1 + tmpNums := make([]int, 0) + count := 0 + for ; l <= mid; l++ { + for ; r <= end && nums[l] > 2*nums[r]; r++ { + + } + count += r - 1 - mid + } + l, r = start, mid+1 + for l <= mid && r <= end { + if nums[l] < nums[r] { + tmpNums = append(tmpNums, nums[l]) + l++ + } else { + tmpNums = append(tmpNums, nums[r]) + r++ + } + } + for ; l <= mid; l++ { + tmpNums = append(tmpNums, nums[l]) + } + for ; r <= end; r++ { + tmpNums = append(tmpNums, nums[r]) + } + for k := 0; k < len(tmpNums); k++ { + nums[k+start] = tmpNums[k] + } + return count +} + +func MergeSort(nums []int, start, end int) int { + if start < end { + mid := start + (end-start)/2 + return MergeSort(nums, start, mid) + MergeSort(nums, mid+1, end) + merge(nums, start, end) + } + return 0 +} + +func Solution(nums []int) int { + return MergeSort(nums, 0, len(nums)-1) } diff --git a/leetcode/401-500/0493.Reverse-Pairs/Solution_test.go b/leetcode/401-500/0493.Reverse-Pairs/Solution_test.go index 14ff50eb4..5bbf05e2c 100644 --- a/leetcode/401-500/0493.Reverse-Pairs/Solution_test.go +++ b/leetcode/401-500/0493.Reverse-Pairs/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, 3, 2, 3, 1}, 2}, + {"TestCase2", []int{2, 4, 3, 5, 1}, 3}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2dbe1db99c3f0357865c0d800cb693a3e6fa2856 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 25 Jan 2025 16:31:01 +0800 Subject: [PATCH 182/450] Add solution and test-cases for problem 2948 --- .../README.md | 44 ++++++++++++------ .../Solution.go | 45 ++++++++++++++++++- .../Solution_test.go | 21 ++++----- 3 files changed, 85 insertions(+), 25 deletions(-) diff --git a/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/README.md b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/README.md index efc2d439c..fbc5d2d7f 100755 --- a/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/README.md +++ b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/README.md @@ -1,28 +1,46 @@ # [2948.Make Lexicographically Smallest Array by Swapping Elements][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 a **0-indexed** array of **positive** integers `nums` and a **positive** integer `limit`. + +In one operation, you can choose any two indices `i` and `j` and swap `nums[i]` and `nums[j]` if `|nums[i] - nums[j]| <= limit`. + +Return the **lexicographically smallest array** that can be obtained by performing the operation any number of times. + +An array `a` is lexicographically smaller than an array `b` if in the first position where `a` and `b` differ, array a has an element that is less than the corresponding element in `b`. For example, the array `[2,10,3]` is lexicographically smaller than the array `[10,2,3]` because they differ at index `0` and `2 < 10`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,5,3,9,8], limit = 2 +Output: [1,3,5,8,9] +Explanation: Apply the operation 2 times: +- Swap nums[1] with nums[2]. The array becomes [1,3,5,9,8] +- Swap nums[3] with nums[4]. The array becomes [1,3,5,8,9] +We cannot obtain a lexicographically smaller array by applying any more operations. +Note that it may be possible to get the same result by doing different operations. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Make Lexicographically Smallest Array by Swapping Elements -```go ``` +Input: nums = [1,7,6,18,2,1], limit = 3 +Output: [1,6,7,18,1,2] +Explanation: Apply the operation 3 times: +- Swap nums[1] with nums[2]. The array becomes [1,6,7,18,2,1] +- Swap nums[0] with nums[4]. The array becomes [2,6,7,18,1,1] +- Swap nums[0] with nums[5]. The array becomes [1,6,7,18,1,2] +We cannot obtain a lexicographically smaller array by applying any more operations. +``` + +**Example 3:** +``` +Input: nums = [1,7,28,19,10], limit = 3 +Output: [1,7,28,19,10] +Explanation: [1,7,28,19,10] is the lexicographically smallest array we can obtain because we cannot apply the operation on any two indices. +``` ## 结语 diff --git a/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution.go b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution.go index d115ccf5e..63cb46dd2 100644 --- a/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution.go +++ b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, limit int) []int { + l := len(nums) + dst := make([]int, l) + for i := range l { + dst[i] = i + } + sort.Slice(dst, func(i, j int) bool { + a, b := nums[dst[i]], nums[dst[j]] + if a == b { + return i < j + } + return a < b + }) + groupIndies := map[int][]int{ + 0: []int{1, dst[0]}, + } + numGroup := make([]int, len(nums)) + + g := 0 + + for i := 1; i < l; i++ { + if diff := nums[dst[i]] - nums[dst[i-1]]; diff > limit { + g++ + } + + numGroup[dst[i]] = g + if _, ok := groupIndies[g]; !ok { + groupIndies[g] = []int{1} + } + groupIndies[g] = append(groupIndies[g], dst[i]) + } + + r := make([]int, l) + for i := range nums { + group := numGroup[i] + indies := groupIndies[group] + idx := indies[indies[0]] + indies[0]++ + r[i] = nums[idx] + } + return r } diff --git a/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution_test.go b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution_test.go index 14ff50eb4..15be10753 100644 --- a/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution_test.go +++ b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + limit int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 5, 3, 9, 8}, 2, []int{1, 3, 5, 8, 9}}, + {"TestCase2", []int{1, 7, 6, 18, 2, 1}, 3, []int{1, 6, 7, 18, 1, 2}}, + {"TestCase3", []int{1, 7, 28, 19, 10}, 3, []int{1, 7, 28, 19, 10}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.limit) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.limit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 06b99bafc05d6dc0daef5f9a8d717a018db9ffb9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 27 Jan 2025 14:55:34 +0800 Subject: [PATCH 183/450] Add solution and test-cases for problem 2115 --- .../README.md | 41 ++++++++---- .../Solution.go | 62 ++++++++++++++++++- .../Solution_test.go | 26 ++++---- 3 files changed, 103 insertions(+), 26 deletions(-) diff --git a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md index dc1770289..12b1ecdc8 100755 --- a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md +++ b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md @@ -1,28 +1,43 @@ # [2115.Find All Possible Recipes from Given Supplies][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 have information about `n` different recipes. You are given a string array `recipes` and a 2D string array `ingredients`. The `ith` recipe has the name `recipes[i]`, and you can **create** it if you have **all** the needed ingredients from `ingredients[i]`. Ingredients to a recipe may need to be created from other recipes, i.e., `ingredients[i]` may contain a string that is in `recipes`. + +You are also given a string array `supplies` containing all the ingredients that you initially have, and you have an infinite supply of all of them. + +Return a list of all the recipes that you can create. You may return the answer in **any order**. + +Note that two recipes may contain each other in their ingredients. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: recipes = ["bread"], ingredients = [["yeast","flour"]], supplies = ["yeast","flour","corn"] +Output: ["bread"] +Explanation: +We can create "bread" since we have the ingredients "yeast" and "flour". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find All Possible Recipes from Given Supplies -```go ``` +Input: recipes = ["bread","sandwich"], ingredients = [["yeast","flour"],["bread","meat"]], supplies = ["yeast","flour","meat"] +Output: ["bread","sandwich"] +Explanation: +We can create "bread" since we have the ingredients "yeast" and "flour". +We can create "sandwich" since we have the ingredient "meat" and can create the ingredient "bread". +``` + +**Example 3:** +``` +Input: recipes = ["bread","sandwich","burger"], ingredients = [["yeast","flour"],["bread","meat"],["sandwich","meat","bread"]], supplies = ["yeast","flour","meat"] +Output: ["bread","sandwich","burger"] +Explanation: +We can create "bread" since we have the ingredients "yeast" and "flour". +We can create "sandwich" since we have the ingredient "meat" and can create the ingredient "bread". +We can create "burger" since we have the ingredient "meat" and can create the ingredients "bread" and "sandwich". +``` ## 结语 diff --git a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go index d115ccf5e..ddd92993f 100644 --- a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go +++ b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(recipes []string, ingredients [][]string, supplies []string) []string { + sm := make(map[string]struct{}) + rm := make(map[string]struct{}) + for _, s := range supplies { + sm[s] = struct{}{} + } + for _, r := range recipes { + rm[r] = struct{}{} + } + + in := make(map[string]int) + unlock := make(map[string][]string) + for idx, r := range recipes { + in[r] = 0 + for _, i := range ingredients[idx] { + if _, ok := sm[i]; ok { + continue + } + if i == r { + in[r] = -1 + break + } + if _, ok := rm[i]; ok { + in[r]++ + if _, ok := unlock[i]; !ok { + unlock[i] = []string{} + } + unlock[i] = append(unlock[i], r) + continue + } + in[r] = -1 // 无法组成,用了一些不存在的东西 + break + } + } + res := []string{} + queue := []string{} + for r, c := range in { + if c == 0 { + queue = append(queue, r) + res = append(res, r) + } + } + for len(queue) > 0 { + nq := make([]string, 0) + for _, cur := range queue { + for _, r := range unlock[cur] { + in[r]-- + if in[r] == 0 { + nq = append(nq, r) + res = append(res, r) + } + } + } + if len(nq) == 0 { + break + } + queue = nq + } + + return res } diff --git a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go index 14ff50eb4..7bf7d2fd3 100644 --- a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go +++ b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -9,31 +10,34 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + recipes []string + ingredients [][]string + supplies []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"bread"}, [][]string{{"yeast", "flour"}}, []string{"yeast", "flour", "conr"}, []string{"bread"}}, + {"TestCase2", []string{"bread", "sandwich"}, [][]string{{"yeast", "flour"}, {"bread", "meat"}}, []string{"yeast", "flour", "meat"}, []string{"bread", "sandwich"}}, + {"TestCase3", []string{"bread", "sandwich", "burger"}, [][]string{{"yeast", "flour"}, {"bread", "meat"}, {"sandwich", "meat", "bread"}}, []string{"yeast", "flour", "meat"}, []string{"bread", "burger", "sandwich"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.recipes, c.ingredients, c.supplies) + sort.Strings(got) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.recipes, c.ingredients, c.supplies) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1b96a5f1c6d3a7dfb03a63854644c4f1cb69b260 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 28 Jan 2025 15:36:53 +0800 Subject: [PATCH 184/450] Add solution and test-cases for problem 600 --- .../README.md | 35 +++++++++----- .../Solution.go | 48 ++++++++++++++++++- .../Solution_test.go | 15 +++--- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/README.md b/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/README.md index 3a6e9d653..89dd3dfbc 100644 --- a/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/README.md +++ b/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/README.md @@ -1,28 +1,37 @@ # [600.Non-negative Integers without Consecutive Ones][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 +Given a positive integer `n`, return the number of the integers in the range `[0, n]` whose binary representations **do not** contain consecutive ones. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5 +Output: 5 +Explanation: +Here are the non-negative integers <= 5 with their corresponding binary representations: +0 : 0 +1 : 1 +2 : 10 +3 : 11 +4 : 100 +5 : 101 +Among them, only integer 3 disobeys the rule (two consecutive ones) and the other 5 satisfy the rule. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Non-negative Integers without Consecutive Ones -```go +``` +Input: n = 1 +Output: 2 ``` +**Example 3:** + +``` +Input: n = 2 +Output: 3 +``` ## 结语 diff --git a/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution.go b/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution.go index d115ccf5e..f4dcaadc8 100644 --- a/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution.go +++ b/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +func nBit(n int) ([]int, int) { + a := make([]int, 32) + i := 31 + for n > 0 { + a[i] = n & 1 + n >>= 1 + i-- + } + return a, i + 1 +} + +func dfsBit(preBit, index int, less bool, array []int) int { + if index == 32 { + return 1 + } + if preBit == 1 { + if array[index] == 1 { + return dfsBit(0, index+1, true, array) + } + return dfsBit(0, index+1, less, array) + } + if array[index] == 1 { + return dfsBit(1, index+1, less, array) + dfsBit(0, index+1, true, array) + } + a := dfsBit(0, index+1, less, array) + if less { + a += dfsBit(1, index+1, less, array) + } + return a +} + +func Solution(n int) int { + if n <= 2 { + return n + 1 + } + bits, startIndex := nBit(n) + cnt := 0 + zero, one := 1, 1 + for i := 30; i > startIndex; i-- { + tmpZero := zero + one + tmpOne := zero + zero, one = tmpZero, tmpOne + } + cnt += zero + one + + return cnt + dfsBit(1, startIndex+1, false, bits) } diff --git a/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution_test.go b/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution_test.go index 14ff50eb4..905ea4f10 100644 --- a/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution_test.go +++ b/leetcode/501-600/0600.Non-negative-Integers-without-Consecutive-Ones/Solution_test.go @@ -10,12 +10,13 @@ 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", 5, 5}, + {"TestCase2", 1, 2}, + {"TestCase3", 2, 3}, + {"TestCase4", 999999995, 2178309}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 294f306d7148572a3297c28cbd3047e4d0668371 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 29 Jan 2025 16:22:38 +0800 Subject: [PATCH 185/450] Add solution and test-cases for problem 728 --- .../0728.Self-Dividing-Numbers/README.md | 27 +++++++++---------- .../0728.Self-Dividing-Numbers/Solution.go | 25 +++++++++++++++-- .../Solution_test.go | 21 +++++++-------- 3 files changed, 46 insertions(+), 27 deletions(-) diff --git a/leetcode/701-800/0728.Self-Dividing-Numbers/README.md b/leetcode/701-800/0728.Self-Dividing-Numbers/README.md index 1bbbeb534..bca516c3c 100644 --- a/leetcode/701-800/0728.Self-Dividing-Numbers/README.md +++ b/leetcode/701-800/0728.Self-Dividing-Numbers/README.md @@ -1,28 +1,27 @@ # [728.Self Dividing Numbers][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 +A **self-dividing number** is a number that is divisible by every digit it contains. + +- For example, `128` is a **self-dividing number** because `128 % 1 == 0`, `128 % 2 == 0`, and `128 % 8 == 0`. + +A **self-dividing number** is not allowed to contain the digit zero. + +Given two integers `left` and `right`, return a list of all the **self-dividing numbers** in the range `[left, right]` (both **inclusive**). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: left = 1, right = 22 +Output: [1,2,3,4,5,6,7,8,9,11,12,15,22] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Self Dividing Numbers -```go ``` - +Input: left = 47, right = 85 +Output: [48,55,66,77] +``` ## 结语 diff --git a/leetcode/701-800/0728.Self-Dividing-Numbers/Solution.go b/leetcode/701-800/0728.Self-Dividing-Numbers/Solution.go index d115ccf5e..c89d3bda9 100644 --- a/leetcode/701-800/0728.Self-Dividing-Numbers/Solution.go +++ b/leetcode/701-800/0728.Self-Dividing-Numbers/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(left int, right int) []int { + var res []int + var ok func(int) bool + ok = func(n int) bool { + self := n + for n > 0 { + mod := n % 10 + if mod == 0 { + return false + } + if self%mod != 0 { + return false + } + n /= 10 + } + return true + } + for i := left; i <= right; i++ { + if ok(i) { + res = append(res, i) + } + } + return res } diff --git a/leetcode/701-800/0728.Self-Dividing-Numbers/Solution_test.go b/leetcode/701-800/0728.Self-Dividing-Numbers/Solution_test.go index 14ff50eb4..151983453 100644 --- a/leetcode/701-800/0728.Self-Dividing-Numbers/Solution_test.go +++ b/leetcode/701-800/0728.Self-Dividing-Numbers/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + left, right int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 22, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22}}, + {"TestCase2", 47, 85, []int{48, 55, 66, 77}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.left, c.right) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.left, c.right) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b661102f9cc8d778ceb32d4a1a3ce1394fa90cc0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 31 Jan 2025 13:58:57 +0800 Subject: [PATCH 186/450] Add solution and test-cases for problem 827 --- .../0827.Making-A-Large-Island/README.md | 33 ++++---- .../0827.Making-A-Large-Island/Solution.go | 76 ++++++++++++++++++- .../Solution_test.go | 14 ++-- 3 files changed, 101 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0827.Making-A-Large-Island/README.md b/leetcode/801-900/0827.Making-A-Large-Island/README.md index c762da5d1..9f7576543 100644 --- a/leetcode/801-900/0827.Making-A-Large-Island/README.md +++ b/leetcode/801-900/0827.Making-A-Large-Island/README.md @@ -1,28 +1,35 @@ # [827.Making A Large Island][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 `n x n` binary matrix `grid`. You are allowed to change **at most one** `0` to be `1`. + +Return the size of the largest **island** in `grid` after applying this operation. + +An **island** is a 4-directionally connected group of `1`s. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,0],[0,1]] +Output: 3 +Explanation: Change one 0 to 1 and connect two 1s, then we get an island with area = 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Making A Large Island -```go ``` +Input: grid = [[1,1],[1,0]] +Output: 4 +Explanation: Change the 0 to 1 and make the island bigger, only one island with area = 4. +``` + +**Example 3:** +``` +Input: grid = [[1,1],[1,1]] +Output: 4 +Explanation: Can't change any 0 to 1, only one island with area = 4. +``` ## 结语 diff --git a/leetcode/801-900/0827.Making-A-Large-Island/Solution.go b/leetcode/801-900/0827.Making-A-Large-Island/Solution.go index d115ccf5e..ddcec3b12 100644 --- a/leetcode/801-900/0827.Making-A-Large-Island/Solution.go +++ b/leetcode/801-900/0827.Making-A-Large-Island/Solution.go @@ -1,5 +1,77 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + group := 1 + groupMapCount := map[int]int{} + rows, cols := len(grid), len(grid[0]) + groupGrid := make([][]int, rows) + for i := range rows { + groupGrid[i] = make([]int, cols) + } + + var ( + bfs func(int, int) int + dirs = [][2]int{ + {0, 1}, {1, 0}, {0, -1}, {-1, 0}, + } + ) + + bfs = func(x, y int) int { + q := [][2]int{{x, y}} + cnt := 0 + groupGrid[x][y] = group + for len(q) > 0 { + cnt += len(q) + nq := make([][2]int, 0) + for _, cur := range q { + for _, d := range dirs { + nx, ny := cur[0]+d[0], cur[1]+d[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols { + continue + } + if grid[nx][ny] == 1 && groupGrid[nx][ny] == 0 { + groupGrid[nx][ny] = group + nq = append(nq, [2]int{nx, ny}) + } + } + } + q = nq + } + return cnt + } + + ans := 0 + for i := range rows { + for j := range cols { + if grid[i][j] == 1 && groupGrid[i][j] == 0 { + groupMapCount[group] = bfs(i, j) + ans = max(ans, groupMapCount[group]) + group++ + } + } + } + + for i := range rows { + for j := range cols { + if grid[i][j] == 0 { + tmp := 1 + used := map[int]struct{}{} + for _, d := range dirs { + nx, ny := i+d[0], j+d[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols { + continue + } + if groupGrid[nx][ny] != 0 { + if _, ok := used[groupGrid[nx][ny]]; !ok { + tmp += groupMapCount[groupGrid[nx][ny]] + used[groupGrid[nx][ny]] = struct{}{} + } + } + } + ans = max(ans, tmp) + } + } + } + + return ans } diff --git a/leetcode/801-900/0827.Making-A-Large-Island/Solution_test.go b/leetcode/801-900/0827.Making-A-Large-Island/Solution_test.go index 14ff50eb4..f963a6ad3 100644 --- a/leetcode/801-900/0827.Making-A-Large-Island/Solution_test.go +++ b/leetcode/801-900/0827.Making-A-Large-Island/Solution_test.go @@ -10,12 +10,12 @@ 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, 0}, {0, 1}}, 3}, + {"TestCase2", [][]int{{1, 1}, {1, 0}}, 4}, + {"TestCase3", [][]int{{1, 1}, {1, 1}}, 4}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 628e46daa949541625dcc2a4a59b2070aad3b50d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 1 Feb 2025 09:02:31 +0800 Subject: [PATCH 187/450] Add solution and test-cases for problem 3151 --- .../3101-3200/3151.Special-Array-I/README.md | 41 +++++++++++++------ .../3151.Special-Array-I/Solution.go | 12 +++++- .../3151.Special-Array-I/Solution_test.go | 12 +++--- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/leetcode/3101-3200/3151.Special-Array-I/README.md b/leetcode/3101-3200/3151.Special-Array-I/README.md index 2b49c31d7..8bd523014 100755 --- a/leetcode/3101-3200/3151.Special-Array-I/README.md +++ b/leetcode/3101-3200/3151.Special-Array-I/README.md @@ -1,28 +1,45 @@ # [3151.Special Array I][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 +An array is considered **special** if every pair of its adjacent elements contains two numbers with different parity. + +You are given an array of integers `nums`. Return `true` if `nums` is a **special** array, otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1] + +Output: true + +Explanation: + +There is only one element. So the answer is true. +``` + +**Example 2:** + ``` +Input: nums = [2,1,4] + +Output: true -## 题意 -> ... +Explanation: + +There is only two pairs: (2,1) and (1,4), and both of them contain numbers with different parity. So the answer is true. +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Special Array I -```go ``` +Input: nums = [4,3,1,6] +Output: false + +Explanation: + +nums[1] and nums[2] are both odd. So the answer is false. +``` ## 结语 diff --git a/leetcode/3101-3200/3151.Special-Array-I/Solution.go b/leetcode/3101-3200/3151.Special-Array-I/Solution.go index d115ccf5e..a79b7843c 100644 --- a/leetcode/3101-3200/3151.Special-Array-I/Solution.go +++ b/leetcode/3101-3200/3151.Special-Array-I/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) bool { + if len(nums) == 1 { + return true + } + for i := 0; i < len(nums)-1; i++ { + if nums[i]&1 == nums[i+1]&1 { + return false + } + } + return true } diff --git a/leetcode/3101-3200/3151.Special-Array-I/Solution_test.go b/leetcode/3101-3200/3151.Special-Array-I/Solution_test.go index 14ff50eb4..75bbeca27 100644 --- a/leetcode/3101-3200/3151.Special-Array-I/Solution_test.go +++ b/leetcode/3101-3200/3151.Special-Array-I/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1}, true}, + {"TestCase2", []int{2, 1, 4}, true}, + {"TestCase3", []int{4, 3, 1, 6}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4ed2db1736445edb2ae9e8389f89440d9df57a34 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 2 Feb 2025 15:14:12 +0800 Subject: [PATCH 188/450] Add solution and test-cases for problem 1115 --- .../1115.Print-FooBar-Alternately/README.md | 61 +++++++------- .../1115.Print-FooBar-Alternately/Solution.go | 29 ++++++- .../Solution_test.go | 83 ++++++++++++------- 3 files changed, 110 insertions(+), 63 deletions(-) diff --git a/leetcode/1101-1200/1115.Print-FooBar-Alternately/README.md b/leetcode/1101-1200/1115.Print-FooBar-Alternately/README.md index 98cc5af53..822f26916 100644 --- a/leetcode/1101-1200/1115.Print-FooBar-Alternately/README.md +++ b/leetcode/1101-1200/1115.Print-FooBar-Alternately/README.md @@ -1,48 +1,53 @@ -# [1. Add Sum][title] +# [1115. Print FooBar Alternately][title] ## Description -Given two binary strings, return their sum (also a binary string). - -The input strings are both **non-empty** and contains only characters `1` or `0`. - -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` - -**Example 2:** - -``` -Input: a = "1010", b = "1011" -Output: "10101" +Suppose you are given the following code: + +```cpp +class FooBar { + public void foo() { + for (int i = 0; i < n; i++) { + print("foo"); + } + } + + public void bar() { + for (int i = 0; i < n; i++) { + print("bar"); + } + } +} ``` -**Tags:** Math, String +The same instance of `FooBar` will be passed to two different threads: -## 题意 -> 求2数之和 +- thread `A` will call `foo()`, while +- thread `B` will call `bar()`. -## 题解 +Modify the given program to output "`foobar`" `n` times. -### 思路1 -> 。。。。 -```go +**Example 1:** +``` +Input: n = 1 +Output: "foobar" +Explanation: There are two threads being fired asynchronously. One of them calls foo(), while the other calls bar(). +"foobar" is being output 1 time. ``` -### 思路2 -> 思路2 -```go +**Example 2:** +``` +Input: n = 2 +Output: "foobarfoobar" +Explanation: "foobar" is being output 2 times. ``` ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] -[title]: https://leetcode.com/problems/two-sum/description/ +[title]: https://leetcode.com/problems/print-foobar-alternately [me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution.go b/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution.go index ebe5646d6..7cca35b95 100644 --- a/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution.go +++ b/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution.go @@ -1,9 +1,30 @@ package Solution -func Solution_1(x bool) bool { - return x +type FooBar struct { + n int + a, b chan struct{} } -func Solution_2(x bool) bool { - return x +func Solution(n int) *FooBar { + f := &FooBar{n: n, a: make(chan struct{}, 1), b: make(chan struct{}, 1)} + f.b <- struct{}{} + return f +} + +func (fb *FooBar) Foo(printFoo func()) { + for i := 0; i < fb.n; i++ { + // printFoo() outputs "foo". Do not change or remove this line. + <-fb.b + printFoo() + fb.a <- struct{}{} + } +} + +func (fb *FooBar) Bar(printBar func()) { + for i := 0; i < fb.n; i++ { + // printBar() outputs "bar". Do not change or remove this line. + <-fb.a + printBar() + fb.b <- struct{}{} + } } diff --git a/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution_test.go b/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution_test.go index c627addb9..c801007bf 100644 --- a/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution_test.go +++ b/leetcode/1101-1200/1115.Print-FooBar-Alternately/Solution_test.go @@ -1,48 +1,69 @@ package Solution import ( + "bytes" "fmt" + "io" "reflect" - "runtime" - "strings" + "strconv" + "sync" "testing" - - "github.com/stretchr/testify/assert" ) -// Solution func Info -type SolutionFuncType func(x bool) bool - -var SolutionFuncList = []SolutionFuncType{ - Solution_1, - Solution_2, +func foo(output io.Writer) func() { + return func() { + fmt.Fprint(output, "foo") + } } -// Test case info struct -type Case struct { - name string - input bool - expect bool +func bar(output io.Writer) func() { + return func() { + fmt.Fprint(output, "bar") + } } - -// Test case -var cases = []Case{ - {name: "TestCase 1", input: true, expect: true}, - {name: "TestCase 2", input: false, expect: false}, +func run(fb *FooBar) string { + var wg sync.WaitGroup + wg.Add(2) + buf := bytes.NewBuffer([]byte{}) + go func() { + defer wg.Done() + fb.Foo(foo(buf)) + }() + go func() { + defer wg.Done() + fb.Bar(bar(buf)) + }() + wg.Wait() + return buf.String() } -// TestSolution Run test case for all solutions func TestSolution(t *testing.T) { - ast := assert.New(t) + // 测试用例 + cases := []struct { + name string + inputs int + expect string + }{ + {"TestCase1", 1, "foobar"}, + {"TestCase2", 2, "foobarfoobar"}, + } - for _, f := range SolutionFuncList { - funcName := strings.Split(runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name(), ".")[1] - for _, c := range cases { - t.Run(fmt.Sprintf("%s %s", funcName, c.name), func(t *testing.T) { - got := f(c.input) - ast.Equal(c.expect, got, - "func: %v case: %v ", funcName, c.name) - }) - } + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := run(Solution(c.inputs)) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) } } + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 8b96148ea03b532b3c7947ed08c613b44f9f2bd1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 3 Feb 2025 09:54:10 +0800 Subject: [PATCH 189/450] Add solution and test-cases for problem 3105 --- .../README.md | 51 ++++++++++++++----- .../Solution.go | 24 ++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 68 insertions(+), 21 deletions(-) diff --git a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md index effb6b20c..88cd33bad 100755 --- a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md +++ b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md @@ -1,28 +1,55 @@ # [3105.Longest Strictly Increasing or Strictly Decreasing Subarray][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 integers `nums`. Return the length of the **longest** subarray of `nums` which is either strictly increasing or strictly decreasing **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,4,3,3,2] + +Output: 2 + +Explanation: + +The strictly increasing subarrays of nums are [1], [2], [3], [3], [4], and [1,4]. + +The strictly decreasing subarrays of nums are [1], [2], [3], [3], [4], [3,2], and [4,3]. + +Hence, we return 2. +``` + +**Example 2:** + ``` +Input: nums = [3,3,3,3] + +Output: 1 -## 题意 -> ... +Explanation: -## 题解 +The strictly increasing subarrays of nums are [3], [3], [3], and [3]. -### 思路1 -> ... -Longest Strictly Increasing or Strictly Decreasing Subarray -```go +The strictly decreasing subarrays of nums are [3], [3], [3], and [3]. + +Hence, we return 1. ``` +**Example 3:** + +``` +Input: nums = [3,2,1] + +Output: 3 + +Explanation: + +The strictly increasing subarrays of nums are [3], [2], and [1]. + +The strictly decreasing subarrays of nums are [3], [2], [1], [3,2], [2,1], and [3,2,1]. + +Hence, we return 3. +``` ## 结语 diff --git a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go index d115ccf5e..23545b3e4 100644 --- a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go +++ b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func helper(nums []int, less func(i, j int) bool) int { + l := 1 + res := 1 + for i := 1; i < len(nums); i++ { + if less(nums[i-1], nums[i]) { + l++ + res = max(res, l) + continue + } + l = 1 + } + return max(res, l) +} + +func Solution(nums []int) int { + a := helper(nums, func(i, j int) bool { + return i < j + }) + b := helper(nums, func(i, j int) bool { + return i > j + }) + return max(a, b) } diff --git a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go index 14ff50eb4..e650fd0d4 100644 --- a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go +++ b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go @@ -10,12 +10,12 @@ 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, 4, 3, 3, 2}, 2}, + {"TestCase2", []int{3, 3, 3, 3}, 1}, + {"TestCase3", []int{3, 2, 1}, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a6e12b8f05c27a9b9f3d0668574361a5eb42cbf1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 4 Feb 2025 09:31:36 +0800 Subject: [PATCH 190/450] Add solution and test-cases for problem 1800 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 17 ++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md index af577631c..0c0777378 100755 --- a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md +++ b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md @@ -1,28 +1,35 @@ # [1800.Maximum Ascending Subarray Sum][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 +Given an array of positive integers `nums`, return the maximum possible sum of an **ascending** subarray in `nums`. + +A subarray is defined as a contiguous sequence of numbers in an array. + +A subarray `[numsl, numsl+1, ..., numsr-1, numsr]` is **ascending** if for all `i` where `l <= i < r`, `numsi < numsi+1`. Note that a subarray of size 1 is **ascending**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [10,20,30,5,10,50] +Output: 65 +Explanation: [5,10,50] is the ascending subarray with the maximum sum of 65. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Ascending Subarray Sum -```go ``` +Input: nums = [10,20,30,40,50] +Output: 150 +Explanation: [10,20,30,40,50] is the ascending subarray with the maximum sum of 150. +``` + +**Example 3:** +``` +Input: nums = [12,17,15,13,10,11,12] +Output: 33 +Explanation: [10,11,12] is the ascending subarray with the maximum sum of 33. +``` ## 结语 diff --git a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go index d115ccf5e..373aa4afc 100644 --- a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go +++ b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + sum := 0 + pre := 0 + ans := 0 + for _, n := range nums { + if n > pre { + sum += n + pre = n + continue + } + ans = max(ans, sum) + sum = n + pre = n + } + return max(ans, sum) } diff --git a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution_test.go b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution_test.go index 14ff50eb4..e9ff0ee1a 100644 --- a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution_test.go +++ b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution_test.go @@ -10,12 +10,12 @@ 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{10, 20, 30, 5, 10, 50}, 65}, + {"TestCase2", []int{10, 20, 30, 40, 50}, 150}, + {"TestCase3", []int{12, 17, 15, 13, 10, 11, 12}, 33}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 599b6da3960e31ff8f002d1f252260c97995eff2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 5 Feb 2025 09:20:48 +0800 Subject: [PATCH 191/450] Add solution and test-cases for problem 1790 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 26 ++++++++++++++-- .../Solution_test.go | 18 +++++------ 3 files changed, 51 insertions(+), 24 deletions(-) diff --git a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md index 7d148099a..131d0aa4c 100755 --- a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md +++ b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md @@ -1,28 +1,33 @@ # [1790.Check if One String Swap Can Make Strings Equal][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 two strings `s1` and `s2` of equal length. A **string swap** is an operation where you choose two indices in a string (not necessarily different) and swap the characters at these indices. + +Return true if it is possible to make both strings equal by performing **at most one string swap** on **exactly one** of the strings. Otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s1 = "bank", s2 = "kanb" +Output: true +Explanation: For example, swap the first character with the last character of s2 to make "bank". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Check if One String Swap Can Make Strings Equal -```go +``` +Input: s1 = "attack", s2 = "defend" +Output: false +Explanation: It is impossible to make them equal with one string swap. ``` +**Example 3:** + +``` +Input: s1 = "kelb", s2 = "kelb" +Output: true +Explanation: The two strings are already equal, so no string swap operation is required. +``` ## 结语 diff --git a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go index d115ccf5e..cf78a087f 100644 --- a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go +++ b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s1 string, s2 string) bool { + if s1 == s2 { + return true + } + + var a, b uint8 + diff := 0 + for i := range s1 { + if s1[i] == s2[i] { + continue + } + diff++ + if diff == 1 { + a, b = s1[i], s2[i] + } else if diff == 2 { + // a, s1, b s2 + if !(a == s2[i] && b == s1[i]) { + return false + } + } else { + return false + } + } + return diff != 1 } diff --git a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution_test.go b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution_test.go index 14ff50eb4..6bc9f4baf 100644 --- a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution_test.go +++ b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + s1, s2 string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "bank", "kanb", true}, + {"TestCase2", "attack", "defend", false}, + {"TestCase3", "kelb", "kelb", true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 793b77ce0c65e340baa123052da9cfc3ceda8709 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 6 Feb 2025 22:25:42 +0800 Subject: [PATCH 192/450] Add solution and test-cases for problem 1283 --- .../README.md | 27 +++++++++--------- .../Solution.go | 28 +++++++++++++++++-- .../Solution_test.go | 22 +++++++-------- 3 files changed, 50 insertions(+), 27 deletions(-) diff --git a/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/README.md b/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/README.md index a287054c5..c571f9732 100644 --- a/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/README.md +++ b/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/README.md @@ -1,28 +1,27 @@ # [1283.Find the Smallest Divisor Given a Threshold][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 +Given an array of integers `nums` and an integer `threshold`, we will choose a positive integer `divisor`, divide all the array by it, and sum the division's result. Find the **smallest** `divisor` such that the result mentioned above is less than or equal to `threshold`. + +Each result of the division is rounded to the nearest integer greater than or equal to that element. (For example: `7/3 = 3` and `10/2 = 5`). + +The test cases are generated so that there will be an answer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,5,9], threshold = 6 +Output: 5 +Explanation: We can get a sum to 17 (1+2+5+9) if the divisor is 1. +If the divisor is 4 we can get a sum of 7 (1+1+2+3) and if the divisor is 5 the sum will be 5 (1+1+1+2). ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find the Smallest Divisor Given a Threshold -```go ``` - +Input: nums = [44,22,33,11,1], threshold = 5 +Output: 44 +``` ## 结语 diff --git a/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution.go b/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution.go index d115ccf5e..6cac21188 100644 --- a/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution.go +++ b/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "slices" + "sort" +) + +func Solution(nums []int, threshold int) int { + m := slices.Max(nums) + var ok func(int) int + ok = func(divisor int) int { + sum := 0 + for _, n := range nums { + a := n / divisor + if n%divisor != 0 { + a++ + } + sum += a + } + return sum + } + idx := sort.Search(m+1, func(n int) bool { + if n == 0 { + return false + } + return ok(n) <= threshold + }) + return idx } diff --git a/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution_test.go b/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution_test.go index 14ff50eb4..5a03239ea 100644 --- a/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution_test.go +++ b/leetcode/1201-1300/1283.Find-the-Smallest-Divisor-Given-a-Threshold/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []int + threshold int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 5, 9}, 6, 5}, + {"TestCase2", []int{44, 22, 33, 11, 1}, 5, 44}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.threshold) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.threshold) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From af7c3c7f869d1e344e65695e65adf5244b72a025 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 7 Feb 2025 09:22:18 +0800 Subject: [PATCH 193/450] Add solution and test-cases for problem 3160 --- .../1.gif | Bin 0 -> 207218 bytes .../2.gif | Bin 0 -> 327979 bytes .../README.md | 46 +++++++++++++----- .../Solution.go | 21 +++++++- .../Solution_test.go | 22 ++++----- 5 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/1.gif create mode 100644 leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/2.gif diff --git a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/1.gif b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/1.gif new file mode 100644 index 0000000000000000000000000000000000000000..fac064945df6b2536930268b33f05518f9da6d91 GIT binary patch literal 207218 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 z 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
    b0xw#6%_s}oZQ|yMgYphcYcOA;vN}*P%Af(y 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

    h0f%MHCMwgPChK@X?%%Nxsu} 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

    X{Ky>P>$*1o3jwx65a)@u< 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 literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md index ec9b58f67..6b927c792 100755 --- a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md +++ b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md @@ -1,28 +1,47 @@ # [3372.Maximize the Number of Target Nodes After Connecting Trees I][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 +There exist two **undirected** trees with `n` and `m` nodes, with **distinct** labels in ranges `[0, n - 1]` and `[0, m - 1]`, respectively. + +You are given two 2D integer arrays `edges1` and `edges2` of lengths `n - 1` and `m - 1`, respectively, where `edges1[i] = [ai, bi]` indicates that there is an edge between nodes `ai` and `bi` in the first tree and `edges2[i] = [ui, vi]` indicates that there is an edge between nodes `ui` and `vi` in the second tree. You are also given an integer `k`. + +Node `u` is **target** to node `v` if the number of edges on the path from `u` to `v` is less than or equal to `k`. **Note** that a node is always **target** to itself. + +Return an array of n integers `answer`, where `answer[i]` is the **maximum** possible number of nodes **target** to node `i` of the first tree if you have to connect one node from the first tree to another node in the second tree. + +Note that queries are independent from each other. That is, for every query you will remove the added edge before proceeding to the next query. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: edges1 = [[0,1],[0,2],[2,3],[2,4]], edges2 = [[0,1],[0,2],[0,3],[2,7],[1,4],[4,5],[4,6]], k = 2 + +Output: [9,7,9,8,8] + +Explanation: + +For i = 0, connect node 0 from the first tree to node 0 from the second tree. +For i = 1, connect node 1 from the first tree to node 0 from the second tree. +For i = 2, connect node 2 from the first tree to node 4 from the second tree. +For i = 3, connect node 3 from the first tree to node 4 from the second tree. +For i = 4, connect node 4 from the first tree to node 4 from the second tree. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Maximize the Number of Target Nodes After Connecting Trees I -```go ``` +Input: edges1 = [[0,1],[0,2],[0,3],[0,4]], edges2 = [[0,1],[1,2],[2,3]], k = 1 +Output: [6,3,3,3,3] + +Explanation: + +For every i, connect node i of the first tree with any node of the second tree. +``` ## 结语 diff --git a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go index d115ccf5e..afb7fafc7 100644 --- a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go +++ b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +import "slices" + +func dfs3372(adj map[int][]int, start, parent, limit int) int { + if limit < 0 { + return 0 + } + + cnt := 1 // self + for _, rel := range adj[start] { + if rel == parent { + continue + } + cnt += dfs3372(adj, rel, start, limit-1) + } + return cnt + +} + +func calDistance(adj map[int][]int, n, limit int) []int { + distance := make([]int, n) + for i := 0; i < n; i++ { + distance[i] = dfs3372(adj, i, -1, limit) + } + return distance +} + +func Solution(edges1 [][]int, edges2 [][]int, k int) []int { + n, m := 0, 0 + for _, e := range edges1 { + n = max(n, e[0], e[1]) + } + for _, e := range edges2 { + m = max(m, e[0], e[1]) + } + n, m = n+1, m+1 + adj1 := make(map[int][]int) + adj2 := make(map[int][]int) + + for _, e := range edges1 { + adj1[e[0]] = append(adj1[e[0]], e[1]) + adj1[e[1]] = append(adj1[e[1]], e[0]) + } + for _, e := range edges2 { + adj2[e[0]] = append(adj2[e[0]], e[1]) + adj2[e[1]] = append(adj2[e[1]], e[0]) + } + + dis1 := calDistance(adj1, n, k) + dis2 := calDistance(adj2, m, k-1) + + cnt := slices.Max(dis2) + for i := range n { + dis1[i] += cnt + } + + return dis1 } diff --git a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go index 14ff50eb4..c5c3f9605 100644 --- a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go +++ b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + edges1, edges2 [][]int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{0, 1}, {0, 2}, {2, 3}, {2, 4}}, [][]int{{0, 1}, {0, 2}, {0, 3}, {2, 7}, {1, 4}, {1, 5}, {4, 5}, {4, 6}}, 2, []int{9, 7, 9, 8, 8}}, + {"TestCase2", [][]int{{0, 1}, {0, 2}, {0, 3}, {0, 4}}, [][]int{{0, 1}, {1, 2}, {2, 3}}, 1, []int{6, 3, 3, 3, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.edges1, c.edges2, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.edges1, c.edges2, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e250870a0c9aeef9b04f3c84216f0bb27793453d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 30 May 2025 09:28:15 +0800 Subject: [PATCH 294/450] Add solution and test-cases for problem 2740 --- .../README.md | 48 +++++++++++++++++++ .../Solution.go | 14 +++++- .../Solution_test.go | 13 +++-- 3 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/README.md diff --git a/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/README.md b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/README.md new file mode 100644 index 000000000..c05857c4d --- /dev/null +++ b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/README.md @@ -0,0 +1,48 @@ +# [2740.Find the Value of the Partition][title] + +## Description +You are given a **positive** integer array `nums`. + +Partition `nums` into two arrays, `nums1` and `nums2`, such that: + +- Each element of the array `nums` belongs to either the array `nums1` or the array `nums2`. +- Both arrays are **non-empty**. +- The value of the partition is **minimized**. + +The value of the partition is `|max(nums1) - min(nums2)|`. + +Here, `max(nums1)` denotes the maximum element of the array `nums1`, and `min(nums2)` denotes the minimum element of the array `nums2`. + +Return the integer denoting the value of such partition. + +**Example 1:** + +``` +Input: nums = [1,3,2,4] +Output: 1 +Explanation: We can partition the array nums into nums1 = [1,2] and nums2 = [3,4]. +- The maximum element of the array nums1 is equal to 2. +- The minimum element of the array nums2 is equal to 3. +The value of the partition is |2 - 3| = 1. +It can be proven that 1 is the minimum value out of all partitions. +Example +``` + +**Example 2:** + +``` +Input: nums = [100,1,10] +Output: 9 +Explanation: We can partition the array nums into nums1 = [10] and nums2 = [100,1]. +- The maximum element of the array nums1 is equal to 10. +- The minimum element of the array nums2 is equal to 1. +The value of the partition is |10 - 1| = 9. +It can be proven that 9 is the minimum value out of all partitions. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-value-of-the-partition/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go index d115ccf5e..ce3bb75f8 100755 --- a/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go +++ b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + sort.Ints(nums) + ans := -1 + for i := 1; i < len(nums); i++ { + diff := nums[i] - nums[i-1] + if ans == -1 || ans > diff { + ans = diff + } + } + return ans } diff --git a/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution_test.go b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution_test.go index 14ff50eb4..294b41cef 100755 --- a/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution_test.go +++ b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/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, 3, 4}, 1}, + {"TestCase2", []int{100, 1, 10}, 9}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From da0b1b304fadcf97c2a9c19859c3ebc41fb5248b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 31 May 2025 20:30:09 +0800 Subject: [PATCH 295/450] Add solution and test-cases for problem 990 --- .../README.md | 26 +++++----- .../Solution.go | 49 ++++++++++++++++++- .../Solution_test.go | 11 ++--- 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/README.md b/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/README.md index 4bf7bb93a..5062995f2 100644 --- a/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/README.md +++ b/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/README.md @@ -1,28 +1,26 @@ # [990.Satisfiability of Equality Equations][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 strings `equations` that represent relationships between variables where each string `equations[i]` is of length `4` and takes one of two different forms: `"xi==yi"` or `"xi!=yi"`.Here, `xi` and `yi` are lowercase letters (not necessarily different) that represent one-letter variable names. + +Return `true` if it is possible to assign integers to variable names so as to satisfy all the given equations, or `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: equations = ["a==b","b!=a"] +Output: false +Explanation: If we assign say, a = 1 and b = 1, then the first equation is satisfied, but not the second. +There is no way to assign the variables to satisfy both equations. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Satisfiability of Equality Equations -```go ``` - +Input: equations = ["b==a","a==b"] +Output: true +Explanation: We could assign a = 1 and b = 1 to satisfy both equations. +``` ## 结语 diff --git a/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution.go b/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution.go index d115ccf5e..f87141465 100644 --- a/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution.go +++ b/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +type unionFind990 struct { + father [26]int +} + +func (u *unionFind990) findFather(x int) int { + if x != u.father[x] { + u.father[x] = u.findFather(u.father[x]) + } + return u.father[x] +} +func (u *unionFind990) union(x, y int) { + fx := u.findFather(x) + fy := u.findFather(y) + if fx < fy { + u.father[fx] = fy + } else { + u.father[fy] = fx + } +} + +func Solution(equations []string) bool { + uf := unionFind990{father: [26]int{}} + for i := range 26 { + uf.father[i] = i + } + + for _, v := range equations { + eq := v[1:3] + a, b := int(v[0]-'a'), int(v[3]-'a') + if eq != "==" { + continue + } + uf.union(a, b) + } + for _, v := range equations { + eq := v[1:3] + a, b := int(v[0]-'a'), int(v[3]-'a') + if eq == "==" { + continue + } + fa := uf.findFather(a) + fb := uf.findFather(b) + if fa == fb { + return false + } + } + return true } diff --git a/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution_test.go b/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution_test.go index 14ff50eb4..dded36010 100644 --- a/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution_test.go +++ b/leetcode/901-1000/0990.Satisfiability-of-Equality-Equations/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"a==b", "b!=a"}, false}, + {"TestCase2", []string{"b==a", "a==b"}, true}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c3f7bcae1e18752ca08476c8114bf12e940cfb43 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 Jun 2025 16:57:14 +0800 Subject: [PATCH 296/450] Add solution and test-cases for problem 2929 --- .../README.md | 25 +++++++--------- .../Solution.go | 29 +++++++++++++++++-- .../Solution_test.go | 21 +++++++------- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md index 9a3d29d09..f317d0ae7 100755 --- a/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md +++ b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md @@ -1,28 +1,25 @@ # [2929.Distribute Candies Among Children II][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 two positive integers `n` and `limit`. + +Return the **total number** of ways to distribute `n` candies among `3` children such that no child gets more than `limit` candies. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5, limit = 2 +Output: 3 +Explanation: There are 3 ways to distribute 5 candies such that no child gets more than 2 candies: (1, 2, 2), (2, 1, 2) and (2, 2, 1). ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Distribute Candies Among Children II -```go ``` - +Input: n = 3, limit = 3 +Output: 10 +Explanation: There are 10 ways to distribute 3 candies such that no child gets more than 3 candies: (0, 0, 3), (0, 1, 2), (0, 2, 1), (0, 3, 0), (1, 0, 2), (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0) and (3, 0, 0). +``` ## 结语 diff --git a/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution.go b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution.go index d115ccf5e..d6e31aa14 100644 --- a/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution.go +++ b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +func binom(a, b int) int64 { + n, k := int64(a), int64(b) + if n < 0 || k < 0 || n < k { + return 0 + } + if k > n-k { + k = n - k + } + var result int64 = 1 + for i := int64(1); i <= k; i++ { + result = result * (n - i + 1) / i + } + return result +} + +func Solution(n int, limit int) int64 { + total := binom(n+2, 2) + + n1 := n - (limit + 1) + n2 := n - 2*(limit+1) + n3 := n - 3*(limit+1) + + total -= 3 * binom(n1+2, 2) + total += 3 * binom(n2+2, 2) + total -= binom(n3+2, 2) + + return total } diff --git a/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution_test.go b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution_test.go index 14ff50eb4..a75820362 100644 --- a/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution_test.go +++ b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, limit int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, 2, 3}, + {"TestCase2", 3, 3, 10}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.limit) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.limit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bf0cc94778f12d00e31992281e8ca96a8e994848 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 Jun 2025 17:03:26 +0800 Subject: [PATCH 297/450] Add solution and test-cases for problem 2928 --- .../README.md | 25 +++++++--------- .../Solution.go | 29 +++++++++++++++++-- .../Solution_test.go | 21 +++++++------- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md index db6244dd4..02e403bd5 100755 --- a/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md +++ b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md @@ -1,28 +1,25 @@ # [2928.Distribute Candies Among Children I][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 two positive integers `n` and `limit`. + +Return the **total number** of ways to distribute `n` candies among `3` children such that no child gets more than `limit` candies. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5, limit = 2 +Output: 3 +Explanation: There are 3 ways to distribute 5 candies such that no child gets more than 2 candies: (1, 2, 2), (2, 1, 2) and (2, 2, 1). ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Distribute Candies Among Children I -```go ``` - +Input: n = 3, limit = 3 +Output: 10 +Explanation: There are 10 ways to distribute 3 candies such that no child gets more than 3 candies: (0, 0, 3), (0, 1, 2), (0, 2, 1), (0, 3, 0), (1, 0, 2), (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0) and (3, 0, 0). +``` ## 结语 diff --git a/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution.go b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution.go index d115ccf5e..19c5a0c5c 100644 --- a/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution.go +++ b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +func binom(a, b int) int { + n, k := a, b + if n < 0 || k < 0 || n < k { + return 0 + } + if k > n-k { + k = n - k + } + var result int = 1 + for i := 1; i <= k; i++ { + result = result * (n - i + 1) / i + } + return result +} + +func Solution(n int, limit int) int { + total := binom(n+2, 2) + + n1 := n - (limit + 1) + n2 := n - 2*(limit+1) + n3 := n - 3*(limit+1) + + total -= 3 * binom(n1+2, 2) + total += 3 * binom(n2+2, 2) + total -= binom(n3+2, 2) + + return total } diff --git a/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution_test.go b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution_test.go index 14ff50eb4..325a287d6 100644 --- a/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution_test.go +++ b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, limit int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, 2, 3}, + {"TestCase2", 3, 3, 10}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.limit) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.limit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 78d78c16adbc5aa99eec6986d7ae944df1103120 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 Jun 2025 15:56:36 +0800 Subject: [PATCH 298/450] Add solution and test-cases for problem 2150 --- .../README.md | 35 +++++++++++-------- .../Solution.go | 19 ++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md index 9c97bca05..a31500785 100755 --- a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md +++ b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md @@ -1,28 +1,35 @@ # [2150.Find All Lonely Numbers in the Array][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 integer array `nums`. A number `x` is **lonely** when it appears only **once**, and no **adjacent** numbers (i.e. `x + 1` and `x - 1`) appear in the array. + +Return **all** lonely numbers in `nums`. You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [10,6,5,8] +Output: [10,8] +Explanation: +- 10 is a lonely number since it appears exactly once and 9 and 11 does not appear in nums. +- 8 is a lonely number since it appears exactly once and 7 and 9 does not appear in nums. +- 5 is not a lonely number since 6 appears in nums and vice versa. +Hence, the lonely numbers in nums are [10, 8]. +Note that [8, 10] may also be returned. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find All Lonely Numbers in the Array -```go ``` - +Input: nums = [1,3,5,3] +Output: [1,5] +Explanation: +- 1 is a lonely number since it appears exactly once and 0 and 2 does not appear in nums. +- 5 is a lonely number since it appears exactly once and 4 and 6 does not appear in nums. +- 3 is not a lonely number since it appears twice. +Hence, the lonely numbers in nums are [1, 5]. +Note that [5, 1] may also be returned. +``` ## 结语 diff --git a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go index d115ccf5e..a55679ee0 100644 --- a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go +++ b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + cnt := make(map[int]int) + for _, n := range nums { + cnt[n]++ + } + ans := make([]int, 0) + for _, n := range nums { + if cnt[n] != 1 { + continue + } + _, ok1 := cnt[n-1] + _, ok2 := cnt[n+1] + if !ok1 && !ok2 { + ans = append(ans, n) + } + } + return ans } diff --git a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution_test.go b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution_test.go index 14ff50eb4..8412a8a15 100644 --- a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution_test.go +++ b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/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{10, 6, 5, 8}, []int{10, 8}}, + {"TestCase2", []int{1, 3, 5, 3}, []int{1, 5}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1645f1b20dbb815c9f2f272ca96b96e394f4694b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 3 Jun 2025 09:25:36 +0800 Subject: [PATCH 299/450] Add solution and test-cases for problem 1298 --- .../README.md | 36 +++++++++++------- .../Solution.go | 38 ++++++++++++++++++- .../Solution_test.go | 23 +++++------ 3 files changed, 70 insertions(+), 27 deletions(-) diff --git a/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/README.md b/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/README.md index 7da91a6db..302daa1a8 100644 --- a/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/README.md +++ b/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/README.md @@ -1,28 +1,36 @@ # [1298.Maximum Candies You Can Get from Boxes][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 have `n` boxes labeled from 0 to `n - 1`. You are given four arrays: `status`, `candies`, `keys`, and `containedBoxes` where: + +- `status[i]` is `1` if the `ith` box is open and `0` if the `ith` box is closed, +- `candies[i]` is the number of candies in the `ith` box, +- `keys[i]` is a list of the labels of the boxes you can open after opening the `ith` box. +- `containedBoxes[i]` is a list of the boxes you found inside the `ith` box. + +You are given an integer array `initialBoxes` that contains the labels of the boxes you initially have. You can take all the candies in **any open box** and you can use the keys in it to open new boxes and you also can use the boxes you find in it. + +Return the maximum number of candies you can get following the rules above. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: status = [1,0,1,0], candies = [7,5,4,100], keys = [[],[],[1],[]], containedBoxes = [[1,2],[3],[],[]], initialBoxes = [0] +Output: 16 +Explanation: You will be initially given box 0. You will find 7 candies in it and boxes 1 and 2. +Box 1 is closed and you do not have a key for it so you will open box 2. You will find 4 candies and a key to box 1 in box 2. +In box 1, you will find 5 candies and box 3 but you will not find a key to box 3 so box 3 will remain closed. +Total number of candies collected = 7 + 4 + 5 = 16 candy. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Candies You Can Get from Boxes -```go ``` - +Input: status = [1,0,0,0,0,0], candies = [1,1,1,1,1,1], keys = [[1,2,3,4,5],[],[],[],[],[]], containedBoxes = [[1,2,3,4,5],[],[],[],[],[]], initialBoxes = [0] +Output: 6 +Explanation: You have initially box 0. Opening it you can find boxes 1,2,3,4 and 5 and their keys. +The total number of candies will be 6. +``` ## 结语 diff --git a/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution.go b/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution.go index d115ccf5e..2da780118 100644 --- a/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution.go +++ b/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(status []int, candies []int, keys [][]int, containedBoxes [][]int, initialBoxes []int) int { + queue := make([]int, 0) + toBeUsed := make(map[int]struct{}) + for _, b := range initialBoxes { + if status[b] == 1 { + queue = append(queue, b) + continue + } + toBeUsed[b] = struct{}{} + } + + ans := 0 + for len(queue) > 0 { + nq := make([]int, 0) + for _, b := range queue { + ans += candies[b] + for _, unlock := range keys[b] { + status[unlock] = 1 + if _, ok := toBeUsed[unlock]; ok { + nq = append(nq, unlock) + delete(toBeUsed, unlock) + } + } + + for _, box := range containedBoxes[b] { + if status[box] == 1 { + nq = append(nq, box) + continue + } + toBeUsed[box] = struct{}{} + } + + } + queue = nq + } + return ans } diff --git a/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution_test.go b/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution_test.go index 14ff50eb4..320ef0121 100644 --- a/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution_test.go +++ b/leetcode/1201-1300/1298.Maximum-Candies-You-Can-Get-from-Boxes/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + status, candies []int + keys, containedBoxes [][]int + initialBoxes []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 0, 1, 0}, []int{7, 5, 4, 100}, [][]int{{}, {}, {1}, {}}, [][]int{{1, 2}, {3}, {}, {}}, []int{0}, 16}, + {"TestCase2", []int{1, 0, 0, 0, 0, 0}, []int{1, 1, 1, 1, 1, 1}, [][]int{{1, 2, 3, 4, 5}, {}, {}, {}, {}, {}}, [][]int{{1, 2, 3, 4, 5}, {}, {}, {}, {}, {}}, []int{0}, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.status, c.candies, c.keys, c.containedBoxes, c.initialBoxes) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v %v", + c.expect, got, c.status, c.candies, c.keys, c.containedBoxes, c.initialBoxes) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b2654ea3a12c070d47c405195a4169f37dd63ef7 Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 3 Jun 2025 23:16:59 +0800 Subject: [PATCH 300/450] update go.mod --- go.mod | 2 +- go.sum | 29 ++++------------------------- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/go.mod b/go.mod index ca23e8d97..7c34b0611 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/cloudflare/circl v1.6.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20250501235452-c0086092b71a // indirect + github.com/google/pprof v0.0.0-20250602020802-c6617b811d0e // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/icholy/digest v1.1.0 // indirect diff --git a/go.sum b/go.sum index b1ee12f57..f630c7785 100644 --- a/go.sum +++ b/go.sum @@ -6,15 +6,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 h1:gD0vax+4I+mAj+jEChEf25Ia07Jq7kYOFO5PPhAxFl4= -github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= -github.com/google/pprof v0.0.0-20250501235452-c0086092b71a h1:rDA3FfmxwXR+BVKKdz55WwMJ1pD2hJQNW31d+l3mPk4= -github.com/google/pprof v0.0.0-20250501235452-c0086092b71a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= +github.com/google/pprof v0.0.0-20250602020802-c6617b811d0e h1:FJta/0WsADCe1r9vQjdHbd3KuiLPu7Y9WlyLGwMUNyE= +github.com/google/pprof v0.0.0-20250602020802-c6617b811d0e/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -22,8 +19,6 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4= github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y= -github.com/imroc/req/v3 v3.51.0 h1:GyJxJUrvTVkhGH3v5h2UC04hqU6P465kJQNa9QeyECg= -github.com/imroc/req/v3 v3.51.0/go.mod h1:sYQMvAjeoDrAdijR8ty71qiAHOBsF8XroF4YVddPdgQ= github.com/imroc/req/v3 v3.52.2 h1:xJocr1aIv0a2K9knfBQ4JnZHk+kWTITdjf0mgDg229I= github.com/imroc/req/v3 v3.52.2/go.mod h1:dBGsDloOSZJcFs6PnTjZXYBJK70OXbZpizHBLNqcH2k= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= @@ -42,12 +37,8 @@ github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4 github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.51.0 h1:K8exxe9zXxeRKxaXxi/GpUqYiTrtdiWP8bo1KFya6Wc= -github.com/quic-go/quic-go v0.51.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA= github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= -github.com/refraction-networking/utls v1.7.1 h1:dxg+jla3uocgN8HtX+ccwDr68uCBBO3qLrkZUbqkcw0= -github.com/refraction-networking/utls v1.7.1/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ= github.com/refraction-networking/utls v1.7.3 h1:L0WRhHY7Oq1T0zkdzVZMR6zWZv+sXbHB9zcuvsAEqCo= github.com/refraction-networking/utls v1.7.3/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= @@ -56,34 +47,20 @@ github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= -go.uber.org/mock v0.5.1 h1:ASgazW/qBmR+A32MYFDB6E2POoTgOwT509VP0CT/fjs= -go.uber.org/mock v0.5.1/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= -golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= -golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= -golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= -golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= -golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= @@ -93,3 +70,5 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= From 27cfe2fdebbd9f9ab12c614bd0edb97a661d15aa Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 4 Jun 2025 22:35:22 +0800 Subject: [PATCH 301/450] Add solution and test-cases for problem 1163 --- .../README.md | 22 +++++++------------ .../Solution.go | 15 +++++++++++-- .../Solution_test.go | 13 +++++------ 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/README.md b/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/README.md index f16a7d96b..c497f489b 100644 --- a/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/README.md +++ b/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/README.md @@ -1,28 +1,22 @@ # [1163.Last Substring in Lexicographical Order][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 +Given a string `s`, return the last substring of `s` in lexicographical order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abab" +Output: "bab" +Explanation: The substrings are ["a", "ab", "aba", "abab", "b", "ba", "bab"]. The lexicographically maximum substring is "bab". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Last Substring in Lexicographical Order -```go ``` - +Input: s = "leetcode" +Output: "tcode" +``` ## 结语 diff --git a/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution.go b/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution.go index d115ccf5e..e555010f9 100644 --- a/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution.go +++ b/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + indies := [26][]int{} + for i, b := range s { + indies[b-'a'] = append(indies[b-'a'], i) + } + i := 25 + for ; i >= 0 && len(indies[i]) == 0; i-- { + } + ans := "" + for _, index := range indies[i] { + ans = max(ans, s[index:]) + } + return ans } diff --git a/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution_test.go b/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution_test.go index 14ff50eb4..2c37db158 100644 --- a/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution_test.go +++ b/leetcode/1101-1200/1163.Last-Substring-in-Lexicographical-Order/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abab", "bab"}, + {"TestCase2", "leetcode", "tcode"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 03a916e9b847f28231801edfb1b39fb3ec0e961d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 6 Jun 2025 09:29:29 +0800 Subject: [PATCH 302/450] Add solution and test-cases for problem 2434 --- .../README.md | 44 +++++++++++++------ .../Solution.go | 24 +++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md index 80b5e18cc..f7e2ed46b 100755 --- a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md +++ b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md @@ -1,28 +1,46 @@ # [2434.Using a Robot to Print the Lexicographically Smallest String][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 a string `s` and a robot that currently holds an empty string `t`. Apply one of the following operations until `t` and `t` **are both empty**: + +- Remove the **first** character of a string `s` and give it to the robot. The robot will append this character to the string `t`. +- Remove the **last** character of a string `t` and give it to the robot. The robot will write this character on paper. + +Return the lexicographically smallest string that can be written on the paper. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "zza" +Output: "azz" +Explanation: Let p denote the written string. +Initially p="", s="zza", t="". +Perform first operation three times p="", s="", t="zza". +Perform second operation three times p="azz", s="", t="". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Using a Robot to Print the Lexicographically Smallest String -```go ``` +Input: s = "bac" +Output: "abc" +Explanation: Let p denote the written string. +Perform first operation twice p="", s="c", t="ba". +Perform second operation twice p="ab", s="c", t="". +Perform first operation p="ab", s="", t="c". +Perform second operation p="abc", s="", t="". +``` + +**Example 3:** +``` +Input: s = "bdda" +Output: "addb" +Explanation: Let p denote the written string. +Initially p="", s="bdda", t="". +Perform first operation four times p="", s="", t="bdda". +Perform second operation four times p="addb", s="", t="". +``` ## 结语 diff --git a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go index d115ccf5e..dafb42a81 100644 --- a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go +++ b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + cnt := make([]int, 26) + for _, c := range s { + cnt[c-'a']++ + } + + stack := []rune{} + res := []rune{} + minCharacter := 'a' + for _, c := range s { + stack = append(stack, c) + cnt[c-'a']-- + for minCharacter != 'z' && cnt[minCharacter-'a'] == 0 { + minCharacter++ + } + for len(stack) > 0 && stack[len(stack)-1] <= minCharacter { + res = append(res, stack[len(stack)-1]) + stack = stack[:len(stack)-1] + } + } + + return string(res) } diff --git a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution_test.go b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution_test.go index 14ff50eb4..0700f8559 100644 --- a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution_test.go +++ b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "zza", "azz"}, + {"TestCase2", "bac", "abc"}, + {"TestCase3", "bdda", "addb"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d1634f858c6eca3accd48e6582afc653a3fc36c0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 7 Jun 2025 20:32:18 +0800 Subject: [PATCH 303/450] Add solution and test-cases for problem 3170 --- .../README.md | 35 ++++++++++++------- .../Solution.go | 29 +++++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md index 61fb19595..5b4b95a03 100755 --- a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md +++ b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md @@ -1,28 +1,37 @@ # [3170.Lexicographically Minimum String After Removing Stars][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 a string `s`. It may contain any number of `'*'` characters. Your task is to remove all `'*'` characters. + +While there is a `'*'`, do the following operation: + +- Delete the leftmost `'*'` and the **smallest** non-`'*'` character to its left. If there are several smallest characters, you can delete any of them. + +Return the **lexicographically smallest** resulting string after removing all `'*'` characters. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "aaba*" -## 题意 -> ... +Output: "aab" -## 题解 +Explanation: -### 思路1 -> ... -Lexicographically Minimum String After Removing Stars -```go +We should delete one of the 'a' characters with '*'. If we choose s[3], s becomes the lexicographically smallest. ``` +**Example 2:** + +``` +Input: s = "abc" + +Output: "abc" + +Explanation: + +There is no '*' in the string. +``` ## 结语 diff --git a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go index d115ccf5e..0e12b604b 100644 --- a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go +++ b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + cnt := make([][]int, 26) + for i := range cnt { + cnt[i] = make([]int, 0) + } + arr := []rune(s) + for i, c := range arr { + if c != '*' { + cnt[c-'a'] = append(cnt[c-'a'], i) + } else { + for j := 0; j < 26; j++ { + if len(cnt[j]) > 0 { + last := len(cnt[j]) - 1 + arr[cnt[j][last]] = '*' + cnt[j] = cnt[j][:last] + break + } + } + } + } + var ans []rune + for _, c := range arr { + if c != '*' { + ans = append(ans, c) + } + } + return string(ans) } diff --git a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go index 14ff50eb4..40855c170 100644 --- a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go +++ b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aaba*", "aab"}, + {"TestCase2", "abc", "abc"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5c05458ff635b78189ec22ef8044877e4d62fbf0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 Jun 2025 17:26:41 +0800 Subject: [PATCH 304/450] Add solution and test-cases for problem 2049 --- .../1.png | Bin 0 -> 31824 bytes .../2.png | Bin 0 -> 2426 bytes .../README.md | 41 ++++++++----- .../Solution.go | 58 +++++++++++++++++- .../Solution_test.go | 13 ++-- 5 files changed, 89 insertions(+), 23 deletions(-) create mode 100644 leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/1.png create mode 100644 leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/2.png diff --git a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/1.png b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/1.png new file mode 100644 index 0000000000000000000000000000000000000000..43805c88835737c017a772fdc0363f6e83b6a039 GIT binary patch literal 31824 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 [!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 +There is a **binary** tree rooted at `0` consisting of `n` nodes. The nodes are labeled from `0` to `n - 1`. You are given a **0-indexed** integer array `parents` representing the tree, where `parents[i]` is the parent of node `i`. Since node `0` is the root, `parents[0] == -1`. + +Each node has a **score**. To find the score of a node, consider if the node and the edges connected to it were **removed**. The tree would become one or more **non-empty** subtrees. The **size** of a subtree is the number of the nodes in it. The **score** of the node is the **product of the sizes** of all those subtrees. + +Return the **number** of nodes that have the **highest score**. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: parents = [-1,2,0,2,0] +Output: 3 +Explanation: +- The score of node 0 is: 3 * 1 = 3 +- The score of node 1 is: 4 = 4 +- The score of node 2 is: 1 * 1 * 2 = 2 +- The score of node 3 is: 4 = 4 +- The score of node 4 is: 4 = 4 +The highest score is 4, and three nodes (node 1, node 3, and node 4) have the highest score. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Count Nodes With the Highest Score -```go ``` - +Input: parents = [-1,2,0] +Output: 2 +Explanation: +- The score of node 0 is: 2 = 2 +- The score of node 1 is: 2 = 2 +- The score of node 2 is: 1 * 1 = 1 +The highest score is 2, and two nodes (node 0 and node 1) have the highest score. +``` ## 结语 diff --git a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go index d115ccf5e..bbbd64618 100644 --- a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go +++ b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(parents []int) int { + adj := make(map[int][]int) + for c, f := range parents { + adj[f] = append(adj[f], c) + } + n := len(parents) + children := make([][2]int, n) + var dfs func(int) int + dfs = func(root int) int { + children[root] = [2]int{-1, -1} + index := 0 + count := 0 + for _, child := range adj[root] { + children[root][index] = dfs(child) + count += children[root][index] + index++ + } + return count + 1 + } + _ = dfs(0) + ans := 0 + // 尝试移除0 + left := children[0][0] + if left == -1 { + left = 1 + } + right := children[0][1] + if right == -1 { + right = 1 + } + ans = left * right + count := 1 + for i := 1; i < n; i++ { + x := n + x-- + left = children[i][0] + right = children[i][1] + if left != -1 { + x -= left + } else { + left = 1 + } + if right != -1 { + x -= right + } else { + right = 1 + } + now := left * right * x + if now == ans { + count++ + } else if now > ans { + ans = now + count = 1 + } + } + return count } diff --git a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution_test.go b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution_test.go index 14ff50eb4..75a4ce3ed 100644 --- a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution_test.go +++ b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/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, 0, 2, 0}, 3}, + {"TestCase2", []int{-1, 2, 0}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a6625ab1955ae2afc8c4d7cd0adc622d110a16da Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 9 Jun 2025 09:26:01 +0800 Subject: [PATCH 305/450] Add solution and test-cases for problem 3249 --- .../3249.Count-the-Number-of-Good-Nodes/1.png | Bin 0 -> 18148 bytes .../3249.Count-the-Number-of-Good-Nodes/2.png | Bin 0 -> 20093 bytes .../3249.Count-the-Number-of-Good-Nodes/3.jpg | Bin 0 -> 42013 bytes .../README.md | 41 +++++++++++------ .../Solution.go | 43 +++++++++++++++++- .../Solution_test.go | 14 +++--- 6 files changed, 76 insertions(+), 22 deletions(-) create mode 100644 leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/1.png create mode 100644 leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/2.png create mode 100644 leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/3.jpg diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/1.png b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/1.png new file mode 100644 index 0000000000000000000000000000000000000000..a8eb208f4f507092978f6dc7b69012e0c199c4ab GIT binary patch literal 18148 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 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/2.png b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/2.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f3c9fb5a5b6efdfd924fbef9f23977b7c0f66d GIT binary patch literal 20093 zcmeHvWn7eB*Y1FYfr5y1ND3%O*AOC|3Ift1DUEcG0n#Jg1JX!$hk&$zq;yMz0}M!? zeUJa=JB)F)Ul=O_0rde_T>Jv~!J$pTfx!?k0?<2{ zI1JAm{LsQK@_-)#7%n;Z!Gq!8gP)84zu12_Bu`h(XpC;aV7guF7dcb2$6{mhtcxb)i@hYNWS_{rm?8CMNl%t|*Lm6svmrvoz`3G&CIe zZ`Mckj?eefcsvfksME9LQfM@nV}2H6NErNy0Y4u0>F z*2)=g5BZlI1`WFBq28xQa_48Kj4Ujjf8?6Hpb4e4>W+TM<*{$o+0zqg`aQn0>Fot4 zczbIrsn|1nHjTVbZo9uaQ>B6&C39o9#!9o$?6cI+3b>iUK1eF~Cf#v!T>axNKL6y) zIwEr7CD!z0uYIk!M~3gvb~)4!%a zh)}b?dIbjKJ6McR>6)-@d`RQ{=QAgf$U-}E^dJVs^E#aKg1{|kDnfGXycfe{jN5|A zZc|WL_DGL9^oe9?el~DlWi+~Mcb9z*25V|7s99rO9nOt`pZsoV3+Bz%nVfQ62-#VR zF_6#I$PdvkBu%;MScHos}!6Ol405%g0LAxb-PXu%|?+LLb>Rnvc^ z>1S3!@tDHQpq*OuIZ4>1YqHt_Ltm5s#jFqYrjs#7*3>i;wD1DdLj0U4JxuFkr)@K} zJ0x;*`%dAfas_v&xqm4(nNZr%K{ZpTKC>8ED?M0fPq(ae93vf+C{Vl~z9DuHIo-D` z8;172|6Dvbi_Yd}(brg<4eW%O?r%-8eY{CEU@&xjtl=Bimu)&ZFD5-zqF0Q31xYvD z+4Y3_+Bo;ot)6CU)xcaj=tzq$^-8F1ap5Y{Y`t)+cm&we#rYB-L{EaW?=kkc& z`fDcB3l5C!u~(&9{O}pY#Abe8_~&&!*H$jJP37X`BpbX#EwNtK8=@4?TBxIoZE{YTJ*q8P6tScsYH=nxe z{j4baC+UY2`-QfPJe0oBLNtX_BVUh-%iyy0|1;`2YFVL_qMkp0mNslRp6kCdG71rC zI)iqRm9*aN&l;aMUyT;%g~!I4Z{Y09fED_Zdu<0_4Y$VodNo%sY4WcR4f}%11y*lD zY4DoB8oX*Qa1EN5@7WX0aizFZ65;17*B2ik6VE2Dxjfv*IK(ql@-a!gthB6nyNhi! z8FBxbGUex>ut@I(MyRgNAr+b4toy^Ik+=x>`u+M+? zx6}AMcz@+qG)Kc935($`COz6JKwT}yTNZ>B8?}>ze1Er-<7WA&{O+&sCew9pZNV6; zpGA*LN=q|*&d=Iz%-(<$4Bv2}ftbRTy_3UT%*=~IeG#ySF8^KpY_%Q-Tf?JdIw3U* z{(&AE$#as}5*ZDWfBK)?>J&McH0q@iRNU*JM|J?6n641R4yvW}3?Kk|=Xfyrj3I%~ zIvle;O2Peu*QD!?*QvwbZE_u&jth<}{f}oX-R7Eo+Y}w^4yHZA9qYCQ>%i4v(!3o4$N)INVcs0xqT1JiBo|qyGp&7!!Jd&EBvUT$HHoyM8W@>)#qWZ?6%+Ic}re?#jWSs zytN9>9643ha5RzG0cO--{f`D)@7m00jv6ynuSKrz;R%f~(T~5nDd8#)s#^_trg2L^ ztHe0q=0eNITkFR%?d|RBu?4Cbfs0E^Q8ujJ!yan^@4$EoFR6wEf-du5yL?+7o*Z&i zVtDwn;CW6sI9}IgrcxeX7^L=-kZh5|?&0PQ*H9iha^^OWH19jN%- z?fv58;lP{Pm!n^xxtD5q1uIL!lLP$yhN1bEyo&a;k>tq>28xOHn*Z`Hc)dE5iBKA@NlA#$ zMhDiAKkdAr9mwPdWs>k;o+bQIbQ|m#1RgEw37A7xsF%&bu6(yZ0qDTMqn{u1l;lYb zfeI-4FaN%mN~i?YYA6o>NJAK64r!4`WN1o3km)VR)Fj#Jut@mBp9k895d?ido=DP% zL$xZ3!(~7LS*QRWA=-*cl7|i|Kzp&Z6hrU>j~{9VEn(k?lq7v3RN$RBTn7}e!xkVw zThU1JG-C_ET1!s}emsJV8}Unoefv_9Es9W+h{fR(G=%ury_a|ey+J9-(*s$lzpwk7 zErWKmLT_-OMI{CKOW%jy(EHBSS(J|aD>O0!_~;F4NuGC)L4l_?(Ho+YJh)Pjex^lD zf&8>keouchf*;xUK{d1Pt=uR6=FcyJHrVmblV#DT+KYlVG?n|CC0-{CF^~X7bpu@6 z4hen;kU#~5TDe&R{oBSM#h`f)MR=c%9J{Lv9>eKhNb+<+JG?*~PXAnz=LEb9u|U}O z=sF=jbj%2lqi>WF{(z<Y7>u>G?v&Zdi;JIs8Q<-kAt?h8`w4A9j2|NU-a_rG%#boXEYb&OAp!KuxfuKtw%5$MlsUWL`zys%bZbWe}s>yf;;85hW&_;hSy2*M3?MZHw+TRv4t)o8*5ABR7j7hMyvFMrg1naJeOe0^LkzOV= zvOuqP&8}h2k0RJbA}v+d7hT#X%0|Sb_(_JwYsfY02I!iQrlgti;)*N#g9lfqL#fuI z{7P#Y1W7;MJY5M|;lO|i&^OXBo^M@e5E1$IvxNg%C0Vh84w;iqqk0Vy>z-b!w?4Ye zcxeKoi%}_oFUq7lnyj>ydvbHnpIX#2=cYL$AD^_o+mgoWRITqcfA{>i>NkBNY>Q2A z7u>}d8J~^h&E34W`~>VZd3*{!MbYyU2d^9{sY3Oe8sO;NTlw+ije~;;Q1n9N{$^E4 zVyXN#8|fTVPluAY^}R3$Z#K*41lcRB1ZiKtRxoMtv)%Is&V%Oy;lP*SZ|*eM)jlpo zqQ{Vvle1iRlUtYC`;Vd9T29ttAX~ww%4zo?SHE>VPjvFq?APmi0)o|V^YnxjkuCWu z$%->R@MUt3HC5!54CSP?HtMd0$E+}z7mKg{`oh7j~fzZ#>=f5^2k+`T&%YV*c3| zB@t3EvQ@Tw334LSFZ7zjP$-)o*w*iFBv;a{Ct~*gWF~|IXY;E&60!qje9Sq z2Hnn1rrjx(7TR5+=UNJfjGXvCsfe9wBcHt^Hiy~et@QlIq*0r$Nt~;O#YmlaTd2~=g75Xp z)o#V7?|^XA9`TENG%^7)?Z(m~O9QEsE!Qz&%5g)DBQDk25_Vj6es5v+^ zW`$Vgm2|w=*>BrU3&kBQqXtsHGiYfI;ATF>sdw8o9V;??51hClAB^C=dm|sZ`QI4p z2X&_(nLNy}tSn&Ec|)HQ30Ha(^rZH=f?o67El>7^`{1lY1l_rFrvuWLjoBnz+d`dx zJpA%{)R~u~R9|pe#%q^b$hC)3nSeiFo;{eTq!}vQoG@S_(SM9yZk^kEb`_or@ePjI5y=ZUMZL1qiz+19F*%|yyYwUW2#+}k-1 zS+mvfsl^T`UFK!Siwq15D_IP<%4(vL!;F*~qgD3Sr`n*IOMpQ<6X-ZFs& zqTX<{#-?+L2bBEs?p;ZOXnZLy74s&_Ln>2DM0Q;74!tU`vMLQJ2TS38^jDR|L^qFG zS{@tS9hd0yiK#$r!_ih*#CpUhYe63ngOTU+DeXqmpP1y=V(-kHM>{+dmaEn?o=WCs znE2o$rLW(~!MUw~+y}-AA}AZt+t@zzevH=ACsjdE0@UZ7oXQl!0H>L^>cP}m$#G8tzw zTDxN}EqkT#gw^e^aVj4i6Lw+X2>i*KGHf9T`k8u!@i7YSdGR(h>SvIe$&kb9KyEc> zM$#vuHO=-6xi{sm~vF4`fDz4@6bE$^{Q2`QNaxh zoB?h&8OAqmoc0PEc-o6MzB!Z*kQd8c7Quz-8ui3-s-{WfyUhnM2a{Q9|ED)w3O_$_ zuRfSocdvW(jaE*{I<@`t{c+%FyX07Yu~c}~?wkqlI&%0hzQKf4TyjPz`@Qm# zT9<8oucYGPY!5Mq!^@KrKzA7UqPWdUx6jX>)H9b=pP`X`n03r(yTWKe$Q~)Q+ry7; z&po*%!f-I@fE09DeDs4J38#C189$s|uLj@%r5PFJz)#NYjxq3NYx&5*YnrCw^%eb{ zzj0{6uw{HzGZIp?8PcJYEZ~gI-Cj&G?U9@Tr=8>!iqjOfY&pTFJTR!X_ox0~ zC*9}V7aTDvA{bk*7=op(T47+nG3GAb|7yJfYg!U=TuGscskbw9R2ko{KR~5tW_C4r z9jAjMwC%wx^^=e6KVt0fvt~0Z*C`|EH+TCEj?d1U6-6}c8($CVxd(GWUDEwGSAOQI z=fAn~gD$Dli^7Jb1D6ggMyzT!Cf#I_nuQHdY^v^+j8dKdZc%A4D&C+*dmMx=&9Rt$ zWu%17zJY*9U-ht@vMfELJ$HCL(QB#MCQqCDh*rkj2PZ5gcNqO6>E0 zs*0kxxsPx6Ed!SZ(JgYg7;&@{&?kDV$fOvXQYq^;`}WG>(RyLbsJ@4ifi#!htoQ;| zQ_|4G&5=TmpcO*;=+4%Fu{Qlbig6_xs;Z_G9(3HMdyx%ZI^-S#RM2Y5oY$J-vN_yY z8fftHV0rN1PT?rqRIN*l^+dCa%D7Q`s2qT4_MAppCxd+eF;{LmF( zgr7Otb^r_w7LOhyBcqhQCt7Nd<}iOtB;Wg>GlJQRc}-7f^3>lvrKj2Vbg_EbeFd#! zyZLExQ41i$T?1DVKFklQ9CV%@oOd4xb2D%|I>bnR>5`0m zCB4j<(MbfIQo;y^3Yot*@@1H@?Ex#+r1=L2=>>>Aqe8T-w|9f*!IaC9OZG!f&Sz^w zIcb`?!KN(F#0!kj?)tlxSA^n}A?K%BGON2?(pO>izyV!2l(KUD=<2B6lD;&{dR(5TEuo zP>4nM<`03(4V#k&d+<9!-!iBdj~UAJ!L>kuj$FJ7wD~1btHUgm3EHUm1btuWQ*mM; z{3M7T!dNamA_Aj$R~nx1(f{&Gs8J6BUHJfR(F9?dF9^_-0D3??1qbCz&Q^y%gg;;s zke%jB&=&@pgm)Jz{1`4n4VnZg+ZQl2r3fe>4hj&Mv^wm80=S@n_#FVHJeItGg)34& zxK>bu=1GC(5nO65bpn}sKO!z8@aR$bNdL>f6+q_zHZ&#*+Pw_03-J#Gef!{b0u-Qq zbO_f94m$FtRgejfdw%Q;WLkn=C*4}=K=1daCH#SfXCYK5*4O`XBJ>7;3K{Z&H$%$;phD7Bpm7jfZAU&&HYY84 zVIOorT(Fg!4iwl30v)@64weP;>H&4;qpNfolphSPE)vM#1@({|;_9ako_j$u@DzuE zECR^^;5o>H0rl&C1kZt74#~c*etIB}6C}TP^_v1RFC@PO&!POFEF}^=hw?)*s9z1r z|NLmIo%DjZ_AA31P#UUMVz^6N{k8qjy)1G>#_?ro66%p3EIehLx z)ocCg8GG>YX3`^5Hk)Voi=xL zux0=ETuTYSHwKix6$V;k`f~CCLeQpi#s$tt0$E8jGY|QeL&wH5r}BYe)ABCe40)4! z*3Fr^X}SgG?rem{z5I9NcJ#R9h*dt@>Ab?xp1;A%RZBi~*#C@O_H*X(`N$q@j12<4 z50HmNPr_5osLax|$2nsV$uc=N9pvg9?OQKRXv+^~Iyv#2-^K_7Q0jqR&6ARniq-6W zwHQZ5lxO{3CtT!O<1E(R+ zJUZ_N1_y%ithfpja80?lpyk~d2)MM5*t3&P#M=QP*QzvmPbwg+$o zu7dG+32e2f*Mpg>!nQA@tgQ0R5{5Q+heXnF_+8HqF*{>sGqU9t>WfjDHp7J0m%yTq zSX?|(ef~U8GaV-jV00HHr#9z1!sr3ic0kHK@|k)(74Lx4KEK3F&%ME zX{6I>YZblBJy{m}=6*u}2M0f;c}VT@@U=qs;0nRO)`S@PvE)Vh&y^jq*QsLcn^wWL z?5uG*-up?D^9!u@iBY+I55ajsQ$^ntmE`a!^i*x*C^#H0fr=ymIP4f1Uw))pwt9&S zeqT?+Juv-fuAHk}GgUX5OaJaNnHT{sasQ=Dmv**lw*kmg`bRUF==Lk6TF;haG|y_1 zkp5k_g~cxCV%0xuc4Vj}&T0J6nhz~Be{|b$pb+bG|7)sJUe7p;kMAmsr*Vdha_C)l zl8auXe$C~ys!Nu*F8r1m8M8s4*#Kgpj8p(KIXUr!xB%zneQN_D*E#Ys+duy{#*bk; z-imn^H^`W;mf9*`(BlPv!nKveY;tSmrt)$x{@(hp@19`?aaic~4R z(f3ij+}9PoqbX_--LKWiK20^=-WC|>g-fnn=CVzAxSDmoR!oMI#4V=xi}>i(VU46w z8*^q-aD2J+T_xG*r`wf-RrX^uu?Zgiq&U!Nn@zy2nKGf&5f(CLY0{ULla-iwKob4I zL0&h}8(#`U0~eR#>>l&J#ZNr(sE3ObqCJo6bDMl;uG5-O(JXc=790!2cFlJmf^Z_TyiB!FCG>A3j(UN zHM>OK3k<((0;j7VwTJOZ`qo#uywyt5&mF#`>l-WjiJ#^J(4%8P&?;CFZ^cM|tni8@ zBRX0x+`{uugsV)AV%|}#W4#&b!&%5hCo-8%R-PEUCKjmGfHXkbpg_0tt26z|L3ehB zgUKsq2bA3k+I4T{hCs-Prt_x z4;Lb)fC^@n{AT__!||4Bce)|j0GDNkV&k{ES@q%>2rs*37rKM9*+?PNzs5}NGFGK% zk^Dw3${^Hgl6aiF?5Nr3@#D@kOad?W+yY}0E_OV(nhcMw?G-!iylA{3msl*pq;Hv6 zA9Rh;%wr|jB2T;}=P$Cv;v*u<9h7p_p-Hzlu<}crf zdl*mGH@KpBH3#Bjgdh9x=?yqY_~ca{=|B-_aQZ!KJhKfB1K3>nea(IIWsmQ~eXAc2 zL6$e70O8b48NA_h}49YM))NJD8x8Wje2K>W6J)sWFye%+ROj!QnEl0BuS9 zfVlkh9*M5q+hA%D?O)#$%z7>sev2*N+3gccHqv2uFL7h#TM&r?V1Z>=jut=&?dehZ zKp_R6C%r%1JmKAlhNkJ8zZIh?rf3mE`xY?An|IlnwF<@4<_-9U3k+zNX z)!vs9fxZ6J5WrHSI9`jgoiZgF8E4X%N?c`L5J`~ZK}quXc*~{uJz&z%c9ai`WM>&* z|C%@<_r+Dzvq~1g>P;l4`5{_Zt_!jAKfsidmha6N5Sfv6cILyumr;BCg-#pr3|SNS zV|1AedC#i0XBwmaBunE#TAh{_1Zqkh#ru-Q49-I!78f8bk#j9xqZ;TsIsELy|J5q! z?owA<2xFh%a~yo^QAcZG;<7zme&hu6y&6XVF_|eS zSTZ}UYm9ysvKW$QVLwYoD?5tpbdVqZS-=&c=1i>zW0pS9w`REwBS;ZDT~#T0J;uVq;|u2b`j=K^3uw9{U?%kWr@q7HgiIWD7>fIgeTF9IoYlVDtHa#^;0{ z*sT0ZxrGg*$EFk@`nY{g;+faJWbTM`iDF@@iBiB$TukrjsWS26nv2q3>tAFI~Kx32I+WI^Sc$EzgHEiYN%Dr@`a&)V~$?XP3db}~V`nF+cl|UYAZA~$h zj&;7a-m4zmEy#rVB)$N;ys`}f;1G{zJ3X<`RwT>&{O#2irqWje9gEA6D`V|ClT^u*}g2$rYc|2U~3S8Y8Mt zTCYX->C+S=E$g*`8^k?pF1e#enD5o0;r^F<*~MnqlD#Sn8jmy+hF{dPUcFlEuEsV5 z=wL%S3vEt&F?Vo)2j1KAmktDb$tUWAW2X$TD&JZ_+U^0%U4V_bwG^N_FbM9My`dZk z!B{W|?`dL5B<=H-1Y{8a_#jl3L$UuM0PGaRFDxAh2lg4vLlr9uz@9MiB0Te^rOCe~ zAjD_(mCZjT01?HGWxo0bcnKbe2UHQDJ(<8eo<0MaxLS9s0my?01T~S|L-heD1(pb$ zrK*c)U3>8E*%*R;#C3wcw*bVzB0e`|;8(Dj@PTS2MN0R9sgu&r^(GC-lLG2_PtZ39P#(bkZo22c+;J}zr)dhvI6wx~H`N3Am;dq#^gId3 zZ9s;edjUDq-)tR#LQQ%=_5(7MM+C^GK&AsS6_BNY4COxrGLygAF_eD{$d`c(<*x?v zJdmOMaX@YcGL+v9$fD6>;E_M@J-WvWPrO zW(N!d28PyXn{o?1T59BIB~`SDM_mKaF|ti1T28rO`}*q4T5M=Y2&ZXZsH-2v#oIqj zX^^Zb>aw{hmtnPZDTZV^mEOz|OeWpoj1wVbVXW$`od_Ij4>%{qQY2TW%Qu-S5m}sto8?O1&gM%!H{q>Wbp`HYd6&%K_zH zLYR7(kt%}OfP;T#awrxDc1)XMc$JJy@W@#2g{$H=Gvn}&AMlsrmaoTlUWt%ogJ9l~ z^0*Erz+Pb2=leZhkLzc@M>w7 zgiatRH_U9+$c$QHJ(!u1^MPC4#bji08ficVP5!||Wg(!VhBJXE787dDB1^{caN(KW z&R!Q=rTq3Zge)nGQLCxmHu)ZZ&;16>SzMg{i*_aIvly$!5GDeIoo-B&hkg5Y9x-8~ zL(8VIF?1ZorWyVt%_sa|T1Ot)g8l zSl<5!qR!^t0=ob6KMWnP_im{^eh&ZLG?9UZTRfLBXblaPg|m^7Rd&_6)rW{U)z-QM z6V58Hx$d>^dL8Id6}xJHjz&ZPiVo}r2~LQ=PMv_}+1Y{0-XACkxwo3*PARu`Jy1)_ z3*)-n`(y{eNQLc)i9~O>=<$XU_$MV2wvpLo05%1IGZcTWag57v=bwsX*jE8Y%-%m=Wj0 zligGBKXX&wwX2qA$9=s3^lijd{)WbbeZH4MNO=8jWS(mEJ2 z+7uu_jYA7UK+Wv@2QOEzPWY(a&myXv9piwy}LoP|1R%gjbecn2{US0 zHC;7gF1%Qz?2`r!S&RWj)!-FwV%yLHCx?#ofdvbQ%?TYlj~S`%2Y+p{gX0zfOV2PS z#znHR!qz8F*VT|$fF?V9|VO_SWvwX#=j=oR#${HqyzF3f69mi0oq=B_grr)6Rpw>KXtnEkv!g!Ip) zWe<#{r)Qowey1qX>OoKR>(gId;{%s+1mx02u~kQ~Rlz!WTOLJ>ttFZEvkliaAEvn3o%poWw<{l*EiC??FlLp!T;(#g_zvj82g zIvg7zfqt-C-R>_m{M2y<2UFKCh!zjP=>CJ*j zv`-HEDp5G&kg$RS7#Lut7-DA5&va{WlOmtXH2N_~-xki0eWN-;1@w$~#d zhhKa(o`>a_LJR$FFxypwF#m%$yiIa^2rFe1OLBhl!Xh8;VgRr0zF%vRB{uJ}g7qyZrzQB}WKxGdUu zR_ko4bjR$&jcK^2Z#@Roo0->Lyb}oDGAp+LPOd}OJ#<0WC%FXGj9uck4{~5>zaYd3 zDXKZy2}c?bp9l0ia(0HNZZ#JlbCR9EDRN1A__^TLLt(?wfkK2DkEO;aX`C0_ozX+f zPj)6cOOJ?({9pY6*8_BG-YlXiM+yNL7!qAD<=*{A9h`#!vEvW-EPHEo1u;oYkp@wg zKR*$32q+w`qrMAJE4Yoy@8>p*l5%rQ&$?cGsR#C1FHQgFLRVt>-Vzc956r8$+Fqlc zsQW@1I|6f6d;zz!WWKWaG&h{=%#hMIkqyP{3=y5(QPWIuS?-|2j4zga3T=ec33eGQ zpWpRb8P#o*Tc)m0|JETDz8hm~q}&-+9yDzECH>X|F`BBKXU`hF$Cj9(?m35f8X<%2MnU1ZPZYm`R(1h3EO~yGzh`OsOJl6= z5J9aIBF1FXP@R*W9_z-<-lYAHLZp*ODmpb_N)+=6@-7dT3VLI*&;~TDDEsBa-~~dM z#1nCPx*<#uz$2jyJ_*D{VqB0;-`jVl2ECaGQ;QjVa;iE4)qRT{OsC z%^5(+mjX$!|(}dp5c|$qO{zz@w|s zZKF$3ntbFQbM0W%LqYGq1(W&2C?|VcSaI>MHj3(vn1y7ArC-_wemEFYhhbw*{jnoh~3A67>65LAP-LCdYjJ zZckXU59&d^M`iymaE^V!jT}qE+KiDZ`)yeevl0mfERF=eDMmJpp2(^yfkP1EDO|>> zT>Du(&CJdTqn5h8#CUaP#u2%m_?(6!MZj_Ewxxh0oT zJr_Ac!_VNH)&UryK6phCN5fMZZj0lo?c000MZM1OP%?)o_<`;%5n#;%3y^a;(5z8C z*LghxP~J`0^fe9i4BE@a*{c^NjP_54t_rc`E=uZ6|13^gj5DjD@W`SA>=j_Os*4{R zY5O`!C9S(YpUcA~hi&))10j(Eb@~r55OwK#MOQlw327GgbJ>34O!&T!U@{1-)A5VDGhfcTf8m_Qtw*5WdiC59b4L0ZovFVfjfeF<=e@<7bt@^MDWYzNsy82$N=T!XWRq7BBp8-Z-|096YLo*@9-4uRTT zD&!hzFjBKURftKU&0<)~OO6l*qFvHIV+s3yNCF2KQ99?q^TBs&LF=$x?Ck5qEf^rw z@3E)^M&S9?x;lL0Q;`GKg{#aZ9+^oh6 zNcdX<@~SU>|4Ukd&FWv|c{h)}7z8em0TK!hJ*pe{rLd}7I3WmvJ~QBn!5}IHu{1mx z@){8y1pV0r^M@zE6N62@MYOpQ_7OvFJH(~%CPY($PQqZ|>W95@tHW<7Q(_RJO^dMa zGjNV!c7RJ`MvM9mNFgwYOQHN2o&fa%@~k82P%VJW0)sqj^S_)G7<8R~l~*-u&1hRtELM=Ep=JITeYh5S$2V1Kuy} z$7Asc0`v_C;z4xKr&#;Bwyi?h=|FbEd9r2Tki!TBFP140^a((y38I5G#Tq!_Qow76 zeW1aywr}Oe1?&|Vf&RrZU%+0u3nonb4?+K3aN!4B34+1q9*gUMH^03qcL zRNCwdbP6~pLKlAg@Ml&u%Zcw$hJjGzG@x+29?GtOuF6!5L-yW`hC)0~4n3975V!Y} zS->p$q31Hi=qq{I=|oAlBTSD44L+|Cy-G>KkTtQ1$XH z8~Vzrk;&K`Flx$ott3CX!*7xgN&A6wf2x+B&lCppXP3F;=vqJ^Y?9iji`#7I9$*E%>4!#H7-o57`o&7hvMXW1=bCTyOR|Yl?oyPHX0B zvBn<*8q4+N*@7fEAeL;W*Q+O2X%no~bY zDF?=FG3xqIb!a;Pi6i#*?ik$y>$liR{1#2a^W>salxu2kFquO+fxvdq+k}0uG2jHCXp775FP7`DQD~ zKw_uU#b7d#7H4Z?d-VBY#l+o?Kw@ExH;8f>@2w;+)*nRQ?z7|dk@Uf+A7oPj@{;DR zF9z@RFl!aD4OqG+-H3*jRF(__E{nlmw-0}}h@lP?yiH{lbXZGGqwg-O`_TI^8$?4)9QdW%CKdcHDvi¬*sL2z(Kr*>yY zmHMym>((0qdmGiwq`*iBmGObg9J|)d2l|lG!(h$b8aN^jzm|8_aufa&19%2u0Dqd^ z8gad9RRSfkYv%fQgoMT?<7Q2_9e;j@|K z05m7w>R;pq@BKW0cM6;Axrga#q)A}DmIG1{FynQX6ugL>^Exa1Xdu-#_SN`y;-gV z$Y;+)G*n2+$T34t&QHyjd#6$X$z$I2BCP2$&S@J3BlB0l>3A#_FFZLUrvs5X8ZHyr zu>zA5_JFz{;DBH?AgPa40)Oqu?(gn0WOe++S4|c*VYAP3|C-b61iwrCtE=Wy89`DC=`jTi28Vzpf zJcyu{+k2)|vbPtZG?koEg zJV6uTbdOyMIL)x;&Yc*$`)G9W(J|D%An8HOAG-Sc)a3_{h_c zJlC%QiXzkzs>V-|5^?l*pK$gd^y<5FBMFIQ;r zv18kL7sq~J1oUk;s)Mso$ZD4E6f{oo!*|PvJ(Z4 ztD2(80?%}72BJPaRRHLf;TAw3@yR*rMadZoPkcb!RP9?vM^#TqiS;kq05;FZO!cTV zANCi2N7_mpe7d6Aaq0ddQ3byYyj-W_Ebld!b)ZiI!yrj6zevd|zwy3LPA18!SMp9~ zeiq$h)3>{;hLmB6+{hzIU)p4Ovo_pYJn%}=uP2FsS#bT$lNuReuw`izA5ioMzGmL| zX)KrUNVzSkBqSQ8G?Wl9uuEN@%+z@=(M$wY(um&a2A6PP%a1rxj2JTgIN?u%87fvE z*jwLza#ZI3cN%Y+pI5Ft5i|T~aM)PveOiL7#mRcK?HU{vInmx(K}J@x70apKMZX@s z8H285pg8_I2e$5qh>Q#4KJybra}$X{SwAVRv<>$6NYsAl4mKb(-xi?r7y6(ePUwy%IX z#9r0uy+X6tz3qJvPu+O5whe;JPvE(Jog?`(av(Cg=i2e90(^kR8laAHFGAbt3Kwn0 z?;orDX)7nna9EcN$kE=>D1tQ6oarj@%6cI(ra+Hk)gJgkrxsGzNo;tf>7IP7;FU&{ zepqr14v4y&q{@&HWLrzO=c@5fF@(m^fo+BXI1e+#gevHK6d^vRoZQt@77K(rv~*ua zAohLSSlDu{OgdSII<>uw^RkgaILr%wwVU4GyE&F3-Vn!btJY)h=e1C(W4TPl!%Avq z=Fu2%s)l4sIUjb&s6MPPHK@~YxX=M0HrQ5e^x-9`(MsD%tmvmP_*sm0En3|QzJF` zY(-OO!c#OFZK^&mhQh-3=RO|38P)5?y!h6-vvdLI!s}oH5D8jGqWxxrd1H?CYZ-N? z`!wk~m2K{nENeKo|I-!6YI@@!1%a*!;DU4BUj4`aE++9_ANBF->J;KG(niC!Nr1 zex{!+8kb=}d9-QE0ceahzDq(q_6yTtW+<(!c1}+9r3jUQz4B;Sm*j#g_$Wwpo))(x z_NoUkx4(|y~x zLtGH#N;w^39a&D^j(PWv-pooS^hBo6`;h7+hagfeQ zF*lxkp literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/3.jpg b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78cf21ae7bac50727b379270f2addea903c0304a GIT binary patch literal 42013 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 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md index 5ef59eb3f..315daaf98 100755 --- a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md +++ b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md @@ -1,28 +1,43 @@ # [3249.Count the Number of Good Nodes][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 +There is an **undirected** tree with `n` nodes labeled from `0` to `n - 1`, and rooted at node `0`. You are given a 2D integer array `edges` of length `n - 1`, where `edges[i] = [ai, bi]` indicates that there is an edge between nodes `ai` and `bi` in the tree. + +A node is **good** if all the subtrees rooted at its children have the same size. + +Return the number of **good** nodes in the given tree. + +A **subtree** of `treeName` is a tree consisting of a node in `treeName` and all of its descendants. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: edges = [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6]] + +Output: 7 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Count the Number of Good Nodes -```go ``` +Input: edges = [[0,1],[1,2],[2,3],[3,4],[0,5],[1,6],[2,7],[3,8]] +Output: 6 +``` + +**Example 3:** + +![3](./3.jpg) + +``` +Input: edges = [[0,1],[1,2],[1,3],[1,4],[0,5],[5,6],[6,7],[7,8],[0,9],[9,10],[9,12],[10,11]] + +Output: 12 +``` ## 结语 diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go index d115ccf5e..0ded0369f 100644 --- a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go +++ b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(edges [][]int) int { + var ans int + n := len(edges) + 1 + adj := make(map[int][]int) + for _, e := range edges { + adj[e[0]] = append(adj[e[0]], e[1]) + adj[e[1]] = append(adj[e[1]], e[0]) + } + size := make([][]int, n) + var dfs func(int, int) int + dfs = func(root, parent int) int { + cnt := 1 + for _, rel := range adj[root] { + if rel == parent { + continue + } + lz := dfs(rel, root) + cnt += lz + size[root] = append(size[root], lz) + } + return cnt + } + dfs(0, -1) + for _, ls := range size { + if len(ls) == 0 { + ans++ + continue + } + + cmp := ls[0] + i := 1 + for ; i < len(ls); i++ { + if cmp != ls[i] { + break + } + } + if i == len(ls) { + ans++ + } + } + return ans } diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go index 14ff50eb4..667c0470f 100644 --- a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go +++ b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go @@ -10,12 +10,12 @@ 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{{0, 1}, {0, 2}, {1, 3}, {1, 4}, {2, 5}, {2, 6}}, 7}, + {"TestCase2", [][]int{{0, 1}, {1, 2}, {2, 3}, {3, 4}, {0, 5}, {1, 6}, {2, 7}, {3, 8}}, 6}, + {"TestCase3", [][]int{{0, 1}, {1, 2}, {1, 3}, {1, 4}, {0, 5}, {5, 6}, {6, 7}, {7, 8}, {0, 9}, {9, 10}, {9, 12}, {10, 11}}, 12}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 224d828bcf9150e2b452e5f8284b88569cdb236e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 10 Jun 2025 08:59:35 +0800 Subject: [PATCH 306/450] 3401-3500 problems --- cmd/main.go | 3 +- .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3404.Count-Special-Subsequences/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3407.Substring-Matching-Pattern/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3408.Design-Task-Manager/README.md | 32 +++++++++++++++ .../3408.Design-Task-Manager/Solution.go | 5 +++ .../3408.Design-Task-Manager/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3425.Longest-Special-Path/README.md | 32 +++++++++++++++ .../3425.Longest-Special-Path/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3401-3500/3429.Paint-House-IV/README.md | 32 +++++++++++++++ .../3401-3500/3429.Paint-House-IV/Solution.go | 5 +++ .../3429.Paint-House-IV/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3433.Count-Mentions-Per-User/README.md | 32 +++++++++++++++ .../3433.Count-Mentions-Per-User/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3441.Minimum-Cost-Good-Caption/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3446.Sort-Matrix-by-Diagonals/README.md | 32 +++++++++++++++ .../3446.Sort-Matrix-by-Diagonals/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3452.Sum-of-Good-Numbers/README.md | 32 +++++++++++++++ .../3452.Sum-of-Good-Numbers/Solution.go | 5 +++ .../3452.Sum-of-Good-Numbers/Solution_test.go | 39 +++++++++++++++++++ .../3453.Separate-Squares-I/README.md | 32 +++++++++++++++ .../3453.Separate-Squares-I/Solution.go | 5 +++ .../3453.Separate-Squares-I/Solution_test.go | 39 +++++++++++++++++++ .../3454.Separate-Squares-II/README.md | 32 +++++++++++++++ .../3454.Separate-Squares-II/Solution.go | 5 +++ .../3454.Separate-Squares-II/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ leetcode/3401-3500/3457.Eat-Pizzas!/README.md | 32 +++++++++++++++ .../3401-3500/3457.Eat-Pizzas!/Solution.go | 5 +++ .../3457.Eat-Pizzas!/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3467.Transform-Array-by-Parity/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3401-3500/3470.Permutations-IV/README.md | 32 +++++++++++++++ .../3470.Permutations-IV/Solution.go | 5 +++ .../3470.Permutations-IV/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3477.Fruits-Into-Baskets-II/README.md | 32 +++++++++++++++ .../3477.Fruits-Into-Baskets-II/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3479.Fruits-Into-Baskets-III/README.md | 32 +++++++++++++++ .../3479.Fruits-Into-Baskets-III/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3484.Design-Spreadsheet/README.md | 32 +++++++++++++++ .../3484.Design-Spreadsheet/Solution.go | 5 +++ .../3484.Design-Spreadsheet/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3486.Longest-Special-Path-II/README.md | 32 +++++++++++++++ .../3486.Longest-Special-Path-II/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3490.Count-Beautiful-Numbers/README.md | 32 +++++++++++++++ .../3490.Count-Beautiful-Numbers/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3401-3500/3493.Properties-Graph/README.md | 32 +++++++++++++++ .../3493.Properties-Graph/Solution.go | 5 +++ .../3493.Properties-Graph/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3498.Reverse-Degree-of-a-String/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ 238 files changed, 6006 insertions(+), 1 deletion(-) create mode 100755 leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/README.md create mode 100644 leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution.go create mode 100644 leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution_test.go create mode 100755 leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/README.md create mode 100644 leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution.go create mode 100644 leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution_test.go create mode 100755 leetcode/3401-3500/3404.Count-Special-Subsequences/README.md create mode 100644 leetcode/3401-3500/3404.Count-Special-Subsequences/Solution.go create mode 100644 leetcode/3401-3500/3404.Count-Special-Subsequences/Solution_test.go create mode 100755 leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md create mode 100644 leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go create mode 100644 leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go create mode 100755 leetcode/3401-3500/3407.Substring-Matching-Pattern/README.md create mode 100644 leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution.go create mode 100644 leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution_test.go create mode 100755 leetcode/3401-3500/3408.Design-Task-Manager/README.md create mode 100644 leetcode/3401-3500/3408.Design-Task-Manager/Solution.go create mode 100644 leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go create mode 100755 leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/README.md create mode 100644 leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution.go create mode 100644 leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution_test.go create mode 100755 leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/README.md create mode 100644 leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution.go create mode 100644 leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution_test.go create mode 100755 leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/README.md create mode 100644 leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution.go create mode 100644 leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution_test.go create mode 100755 leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/README.md create mode 100644 leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution.go create mode 100644 leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution_test.go create mode 100755 leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/README.md create mode 100644 leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution.go create mode 100644 leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution_test.go create mode 100755 leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/README.md create mode 100644 leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution.go create mode 100644 leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution_test.go create mode 100755 leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/README.md create mode 100644 leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution.go create mode 100644 leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution_test.go create mode 100755 leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/README.md create mode 100644 leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution.go create mode 100644 leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution_test.go create mode 100755 leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/README.md create mode 100644 leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution.go create mode 100644 leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution_test.go create mode 100755 leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/README.md create mode 100644 leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution.go create mode 100644 leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution_test.go create mode 100755 leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/README.md create mode 100644 leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution.go create mode 100644 leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution_test.go create mode 100755 leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/README.md create mode 100644 leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution.go create mode 100644 leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution_test.go create mode 100755 leetcode/3401-3500/3425.Longest-Special-Path/README.md create mode 100644 leetcode/3401-3500/3425.Longest-Special-Path/Solution.go create mode 100644 leetcode/3401-3500/3425.Longest-Special-Path/Solution_test.go create mode 100755 leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/README.md create mode 100644 leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution.go create mode 100644 leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution_test.go create mode 100755 leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/README.md create mode 100644 leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution.go create mode 100644 leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution_test.go create mode 100755 leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/README.md create mode 100644 leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution.go create mode 100644 leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution_test.go create mode 100755 leetcode/3401-3500/3429.Paint-House-IV/README.md create mode 100644 leetcode/3401-3500/3429.Paint-House-IV/Solution.go create mode 100644 leetcode/3401-3500/3429.Paint-House-IV/Solution_test.go create mode 100755 leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/README.md create mode 100644 leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution.go create mode 100644 leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution_test.go create mode 100755 leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/README.md create mode 100644 leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution.go create mode 100644 leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution_test.go create mode 100755 leetcode/3401-3500/3433.Count-Mentions-Per-User/README.md create mode 100644 leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution.go create mode 100644 leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution_test.go create mode 100755 leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/README.md create mode 100644 leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution.go create mode 100644 leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution_test.go create mode 100755 leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/README.md create mode 100644 leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution.go create mode 100644 leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution_test.go create mode 100755 leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/README.md create mode 100644 leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution.go create mode 100644 leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution_test.go create mode 100755 leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/README.md create mode 100644 leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go create mode 100644 leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go create mode 100755 leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/README.md create mode 100644 leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go create mode 100644 leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go create mode 100755 leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/README.md create mode 100644 leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution.go create mode 100644 leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution_test.go create mode 100755 leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/README.md create mode 100644 leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution.go create mode 100644 leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution_test.go create mode 100755 leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md create mode 100644 leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go create mode 100644 leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go create mode 100755 leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/README.md create mode 100644 leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution.go create mode 100644 leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution_test.go create mode 100755 leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/README.md create mode 100644 leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution.go create mode 100644 leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution_test.go create mode 100755 leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/README.md create mode 100644 leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go create mode 100644 leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go create mode 100755 leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/README.md create mode 100644 leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution.go create mode 100644 leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution_test.go create mode 100755 leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/README.md create mode 100644 leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution.go create mode 100644 leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution_test.go create mode 100755 leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/README.md create mode 100644 leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution.go create mode 100644 leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution_test.go create mode 100755 leetcode/3401-3500/3452.Sum-of-Good-Numbers/README.md create mode 100644 leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution.go create mode 100644 leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution_test.go create mode 100755 leetcode/3401-3500/3453.Separate-Squares-I/README.md create mode 100644 leetcode/3401-3500/3453.Separate-Squares-I/Solution.go create mode 100644 leetcode/3401-3500/3453.Separate-Squares-I/Solution_test.go create mode 100755 leetcode/3401-3500/3454.Separate-Squares-II/README.md create mode 100644 leetcode/3401-3500/3454.Separate-Squares-II/Solution.go create mode 100644 leetcode/3401-3500/3454.Separate-Squares-II/Solution_test.go create mode 100755 leetcode/3401-3500/3455.Shortest-Matching-Substring/README.md create mode 100644 leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution.go create mode 100644 leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution_test.go create mode 100755 leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/README.md create mode 100644 leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution.go create mode 100644 leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution_test.go create mode 100755 leetcode/3401-3500/3457.Eat-Pizzas!/README.md create mode 100644 leetcode/3401-3500/3457.Eat-Pizzas!/Solution.go create mode 100644 leetcode/3401-3500/3457.Eat-Pizzas!/Solution_test.go create mode 100755 leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/README.md create mode 100644 leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution.go create mode 100644 leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution_test.go create mode 100755 leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/README.md create mode 100644 leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go create mode 100644 leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go create mode 100755 leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md create mode 100644 leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go create mode 100644 leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go create mode 100755 leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/README.md create mode 100644 leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution.go create mode 100644 leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution_test.go create mode 100755 leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/README.md create mode 100644 leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution.go create mode 100644 leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution_test.go create mode 100755 leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/README.md create mode 100644 leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution.go create mode 100644 leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution_test.go create mode 100755 leetcode/3401-3500/3467.Transform-Array-by-Parity/README.md create mode 100644 leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution.go create mode 100644 leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution_test.go create mode 100755 leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/README.md create mode 100644 leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution.go create mode 100644 leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution_test.go create mode 100755 leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/README.md create mode 100644 leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution.go create mode 100644 leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution_test.go create mode 100755 leetcode/3401-3500/3470.Permutations-IV/README.md create mode 100644 leetcode/3401-3500/3470.Permutations-IV/Solution.go create mode 100644 leetcode/3401-3500/3470.Permutations-IV/Solution_test.go create mode 100755 leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/README.md create mode 100644 leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution.go create mode 100644 leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution_test.go create mode 100755 leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/README.md create mode 100644 leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution.go create mode 100644 leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution_test.go create mode 100755 leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/README.md create mode 100644 leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution.go create mode 100644 leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution_test.go create mode 100755 leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/README.md create mode 100644 leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution.go create mode 100644 leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution_test.go create mode 100755 leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md create mode 100644 leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go create mode 100644 leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go create mode 100755 leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/README.md create mode 100644 leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution.go create mode 100644 leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution_test.go create mode 100755 leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md create mode 100644 leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go create mode 100644 leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go create mode 100755 leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/README.md create mode 100644 leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution.go create mode 100644 leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution_test.go create mode 100755 leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/README.md create mode 100644 leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution.go create mode 100644 leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution_test.go create mode 100755 leetcode/3401-3500/3484.Design-Spreadsheet/README.md create mode 100644 leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go create mode 100644 leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go create mode 100755 leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/README.md create mode 100644 leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution.go create mode 100644 leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution_test.go create mode 100755 leetcode/3401-3500/3486.Longest-Special-Path-II/README.md create mode 100644 leetcode/3401-3500/3486.Longest-Special-Path-II/Solution.go create mode 100644 leetcode/3401-3500/3486.Longest-Special-Path-II/Solution_test.go create mode 100755 leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md create mode 100644 leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go create mode 100644 leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go create mode 100755 leetcode/3401-3500/3488.Closest-Equal-Element-Queries/README.md create mode 100644 leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution.go create mode 100644 leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution_test.go create mode 100755 leetcode/3401-3500/3489.Zero-Array-Transformation-IV/README.md create mode 100644 leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution.go create mode 100644 leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution_test.go create mode 100755 leetcode/3401-3500/3490.Count-Beautiful-Numbers/README.md create mode 100644 leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution.go create mode 100644 leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution_test.go create mode 100755 leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/README.md create mode 100644 leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution.go create mode 100644 leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution_test.go create mode 100755 leetcode/3401-3500/3493.Properties-Graph/README.md create mode 100644 leetcode/3401-3500/3493.Properties-Graph/Solution.go create mode 100644 leetcode/3401-3500/3493.Properties-Graph/Solution_test.go create mode 100755 leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/README.md create mode 100644 leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go create mode 100644 leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go create mode 100755 leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md create mode 100644 leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go create mode 100644 leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go create mode 100755 leetcode/3401-3500/3498.Reverse-Degree-of-a-String/README.md create mode 100644 leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution.go create mode 100644 leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution_test.go create mode 100755 leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/README.md create mode 100644 leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution.go create mode 100644 leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution_test.go create mode 100755 leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/README.md create mode 100644 leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution.go create mode 100644 leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution_test.go diff --git a/cmd/main.go b/cmd/main.go index 7d5835f66..759d7345b 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -35,7 +35,8 @@ func main() { //leetcode.MakeDirFromTo(problems, 2901, 3000) //leetcode.MakeDirFromTo(problems, 3101, 3200) //leetcode.MakeDirFromTo(problems, 3201, 3300) - leetcode.MakeDirFromTo(problems, 3301, 3400) + //leetcode.MakeDirFromTo(problems, 3301, 3400) + leetcode.MakeDirFromTo(problems, 3401, 3500) // leetcode.MakeDir(problems) diff --git a/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/README.md b/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/README.md new file mode 100755 index 000000000..f0300a875 --- /dev/null +++ b/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/README.md @@ -0,0 +1,32 @@ +# [3402.Minimum Operations to Make Columns Strictly Increasing][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Columns Strictly Increasing +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-columns-strictly-increasing/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution.go b/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution_test.go b/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3402.Minimum-Operations-to-Make-Columns-Strictly-Increasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/README.md b/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/README.md new file mode 100755 index 000000000..565ca9c20 --- /dev/null +++ b/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/README.md @@ -0,0 +1,32 @@ +# [3403.Find the Lexicographically Largest String From the Box I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Lexicographically Largest String From the Box I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-lexicographically-largest-string-from-the-box-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution.go b/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution_test.go b/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3403.Find-the-Lexicographically-Largest-String-From-the-Box-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3404.Count-Special-Subsequences/README.md b/leetcode/3401-3500/3404.Count-Special-Subsequences/README.md new file mode 100755 index 000000000..5addb41f0 --- /dev/null +++ b/leetcode/3401-3500/3404.Count-Special-Subsequences/README.md @@ -0,0 +1,32 @@ +# [3404.Count Special Subsequences][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Special Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-special-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3404.Count-Special-Subsequences/Solution.go b/leetcode/3401-3500/3404.Count-Special-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3404.Count-Special-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3404.Count-Special-Subsequences/Solution_test.go b/leetcode/3401-3500/3404.Count-Special-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3404.Count-Special-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md new file mode 100755 index 000000000..1e150cbc8 --- /dev/null +++ b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md @@ -0,0 +1,32 @@ +# [3405.Count the Number of Arrays with K Matching Adjacent Elements][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Arrays with K Matching Adjacent Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-arrays-with-k-matching-adjacent-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3407.Substring-Matching-Pattern/README.md b/leetcode/3401-3500/3407.Substring-Matching-Pattern/README.md new file mode 100755 index 000000000..39570a024 --- /dev/null +++ b/leetcode/3401-3500/3407.Substring-Matching-Pattern/README.md @@ -0,0 +1,32 @@ +# [3407.Substring Matching Pattern][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Substring Matching Pattern +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/substring-matching-pattern/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution.go b/leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution_test.go b/leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3407.Substring-Matching-Pattern/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3408.Design-Task-Manager/README.md b/leetcode/3401-3500/3408.Design-Task-Manager/README.md new file mode 100755 index 000000000..4c979a7eb --- /dev/null +++ b/leetcode/3401-3500/3408.Design-Task-Manager/README.md @@ -0,0 +1,32 @@ +# [3408.Design Task Manager][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Task Manager +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-task-manager/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3408.Design-Task-Manager/Solution.go b/leetcode/3401-3500/3408.Design-Task-Manager/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3408.Design-Task-Manager/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go b/leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/README.md b/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/README.md new file mode 100755 index 000000000..e459d54d2 --- /dev/null +++ b/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/README.md @@ -0,0 +1,32 @@ +# [3409.Longest Subsequence With Decreasing Adjacent Difference][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Subsequence With Decreasing Adjacent Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-subsequence-with-decreasing-adjacent-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution.go b/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution_test.go b/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3409.Longest-Subsequence-With-Decreasing-Adjacent-Difference/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/README.md b/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/README.md new file mode 100755 index 000000000..70c974fd7 --- /dev/null +++ b/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/README.md @@ -0,0 +1,32 @@ +# [3410.Maximize Subarray Sum After Removing All Occurrences of One Element][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Subarray Sum After Removing All Occurrences of One Element +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-subarray-sum-after-removing-all-occurrences-of-one-element/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution.go b/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution_test.go b/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3410.Maximize-Subarray-Sum-After-Removing-All-Occurrences-of-One-Element/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/README.md b/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/README.md new file mode 100755 index 000000000..74fcaceab --- /dev/null +++ b/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/README.md @@ -0,0 +1,32 @@ +# [3411.Maximum Subarray With Equal Products][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Subarray With Equal Products +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-subarray-with-equal-products/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution.go b/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution_test.go b/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3411.Maximum-Subarray-With-Equal-Products/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/README.md b/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/README.md new file mode 100755 index 000000000..303b8cc8d --- /dev/null +++ b/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/README.md @@ -0,0 +1,32 @@ +# [3412.Find Mirror Score of a String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Mirror Score of a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-mirror-score-of-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution.go b/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution_test.go b/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3412.Find-Mirror-Score-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/README.md b/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/README.md new file mode 100755 index 000000000..f9f38eab6 --- /dev/null +++ b/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/README.md @@ -0,0 +1,32 @@ +# [3413.Maximum Coins From K Consecutive Bags][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Coins From K Consecutive Bags +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-coins-from-k-consecutive-bags/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution.go b/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution_test.go b/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3413.Maximum-Coins-From-K-Consecutive-Bags/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/README.md b/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/README.md new file mode 100755 index 000000000..4fc85c66b --- /dev/null +++ b/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/README.md @@ -0,0 +1,32 @@ +# [3414.Maximum Score of Non-overlapping Intervals][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score of Non-overlapping Intervals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-of-non-overlapping-intervals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution.go b/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution_test.go b/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3414.Maximum-Score-of-Non-overlapping-Intervals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/README.md b/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/README.md new file mode 100755 index 000000000..94d5b9192 --- /dev/null +++ b/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/README.md @@ -0,0 +1,32 @@ +# [3417.Zigzag Grid Traversal With Skip][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Zigzag Grid Traversal With Skip +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/zigzag-grid-traversal-with-skip/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution.go b/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution_test.go b/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3417.Zigzag-Grid-Traversal-With-Skip/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/README.md b/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/README.md new file mode 100755 index 000000000..f0a9f7158 --- /dev/null +++ b/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/README.md @@ -0,0 +1,32 @@ +# [3418.Maximum Amount of Money Robot Can Earn][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Amount of Money Robot Can Earn +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-amount-of-money-robot-can-earn/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution.go b/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution_test.go b/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3418.Maximum-Amount-of-Money-Robot-Can-Earn/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/README.md b/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/README.md new file mode 100755 index 000000000..2c7bf55ba --- /dev/null +++ b/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/README.md @@ -0,0 +1,32 @@ +# [3419.Minimize the Maximum Edge Weight of Graph][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize the Maximum Edge Weight of Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-the-maximum-edge-weight-of-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution.go b/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution_test.go b/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3419.Minimize-the-Maximum-Edge-Weight-of-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/README.md b/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/README.md new file mode 100755 index 000000000..6a642f29c --- /dev/null +++ b/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/README.md @@ -0,0 +1,32 @@ +# [3420.Count Non-Decreasing Subarrays After K Operations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Non-Decreasing Subarrays After K Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-non-decreasing-subarrays-after-k-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution.go b/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution_test.go b/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3420.Count-Non-Decreasing-Subarrays-After-K-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/README.md b/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/README.md new file mode 100755 index 000000000..9aee95b5e --- /dev/null +++ b/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/README.md @@ -0,0 +1,32 @@ +# [3423.Maximum Difference Between Adjacent Elements in a Circular Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Difference Between Adjacent Elements in a Circular Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-difference-between-adjacent-elements-in-a-circular-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution.go b/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution_test.go b/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3423.Maximum-Difference-Between-Adjacent-Elements-in-a-Circular-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/README.md b/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/README.md new file mode 100755 index 000000000..8d0a64a22 --- /dev/null +++ b/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/README.md @@ -0,0 +1,32 @@ +# [3424.Minimum Cost to Make Arrays Identical][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Make Arrays Identical +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-make-arrays-identical/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution.go b/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution_test.go b/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3424.Minimum-Cost-to-Make-Arrays-Identical/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3425.Longest-Special-Path/README.md b/leetcode/3401-3500/3425.Longest-Special-Path/README.md new file mode 100755 index 000000000..fc89f8450 --- /dev/null +++ b/leetcode/3401-3500/3425.Longest-Special-Path/README.md @@ -0,0 +1,32 @@ +# [3425.Longest Special Path][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Special Path +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-special-path/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3425.Longest-Special-Path/Solution.go b/leetcode/3401-3500/3425.Longest-Special-Path/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3425.Longest-Special-Path/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3425.Longest-Special-Path/Solution_test.go b/leetcode/3401-3500/3425.Longest-Special-Path/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3425.Longest-Special-Path/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/README.md b/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/README.md new file mode 100755 index 000000000..e63182da8 --- /dev/null +++ b/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/README.md @@ -0,0 +1,32 @@ +# [3426.Manhattan Distances of All Arrangements of Pieces][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Manhattan Distances of All Arrangements of Pieces +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/manhattan-distances-of-all-arrangements-of-pieces/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution.go b/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution_test.go b/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3426.Manhattan-Distances-of-All-Arrangements-of-Pieces/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/README.md b/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/README.md new file mode 100755 index 000000000..cea578261 --- /dev/null +++ b/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/README.md @@ -0,0 +1,32 @@ +# [3427.Sum of Variable Length Subarrays][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Variable Length Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-variable-length-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution.go b/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution_test.go b/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3427.Sum-of-Variable-Length-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/README.md b/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/README.md new file mode 100755 index 000000000..50512273c --- /dev/null +++ b/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/README.md @@ -0,0 +1,32 @@ +# [3428.Maximum and Minimum Sums of at Most Size K Subsequences][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum and Minimum Sums of at Most Size K Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-and-minimum-sums-of-at-most-size-k-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution.go b/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution_test.go b/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3428.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3429.Paint-House-IV/README.md b/leetcode/3401-3500/3429.Paint-House-IV/README.md new file mode 100755 index 000000000..cc4ae535c --- /dev/null +++ b/leetcode/3401-3500/3429.Paint-House-IV/README.md @@ -0,0 +1,32 @@ +# [3429.Paint House IV][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Paint House IV +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/paint-house-iv/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3429.Paint-House-IV/Solution.go b/leetcode/3401-3500/3429.Paint-House-IV/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3429.Paint-House-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3429.Paint-House-IV/Solution_test.go b/leetcode/3401-3500/3429.Paint-House-IV/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3429.Paint-House-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/README.md b/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/README.md new file mode 100755 index 000000000..04db18012 --- /dev/null +++ b/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/README.md @@ -0,0 +1,32 @@ +# [3430.Maximum and Minimum Sums of at Most Size K Subarrays][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum and Minimum Sums of at Most Size K Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-and-minimum-sums-of-at-most-size-k-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution.go b/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution_test.go b/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3430.Maximum-and-Minimum-Sums-of-at-Most-Size-K-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/README.md b/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/README.md new file mode 100755 index 000000000..b6fd9e07f --- /dev/null +++ b/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/README.md @@ -0,0 +1,32 @@ +# [3432.Count Partitions with Even Sum Difference][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Partitions with Even Sum Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-partitions-with-even-sum-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution.go b/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution_test.go b/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3432.Count-Partitions-with-Even-Sum-Difference/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3433.Count-Mentions-Per-User/README.md b/leetcode/3401-3500/3433.Count-Mentions-Per-User/README.md new file mode 100755 index 000000000..7c2e246b1 --- /dev/null +++ b/leetcode/3401-3500/3433.Count-Mentions-Per-User/README.md @@ -0,0 +1,32 @@ +# [3433.Count Mentions Per User][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Mentions Per User +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-mentions-per-user/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution.go b/leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution_test.go b/leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3433.Count-Mentions-Per-User/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/README.md b/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/README.md new file mode 100755 index 000000000..00b2084a7 --- /dev/null +++ b/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/README.md @@ -0,0 +1,32 @@ +# [3434.Maximum Frequency After Subarray Operation][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Frequency After Subarray Operation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-frequency-after-subarray-operation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution.go b/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution_test.go b/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3434.Maximum-Frequency-After-Subarray-Operation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/README.md b/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/README.md new file mode 100755 index 000000000..23c1feae6 --- /dev/null +++ b/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/README.md @@ -0,0 +1,32 @@ +# [3435.Frequencies of Shortest Supersequences][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Frequencies of Shortest Supersequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/frequencies-of-shortest-supersequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution.go b/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution_test.go b/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3435.Frequencies-of-Shortest-Supersequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/README.md b/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/README.md new file mode 100755 index 000000000..3ca5a6f78 --- /dev/null +++ b/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/README.md @@ -0,0 +1,32 @@ +# [3438.Find Valid Pair of Adjacent Digits in String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Valid Pair of Adjacent Digits in String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-valid-pair-of-adjacent-digits-in-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution.go b/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution_test.go b/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3438.Find-Valid-Pair-of-Adjacent-Digits-in-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/README.md b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/README.md new file mode 100755 index 000000000..454428895 --- /dev/null +++ b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/README.md @@ -0,0 +1,32 @@ +# [3439.Reschedule Meetings for Maximum Free Time I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reschedule Meetings for Maximum Free Time I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reschedule-meetings-for-maximum-free-time-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/README.md b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/README.md new file mode 100755 index 000000000..67bc9be06 --- /dev/null +++ b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/README.md @@ -0,0 +1,32 @@ +# [3440.Reschedule Meetings for Maximum Free Time II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reschedule Meetings for Maximum Free Time II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reschedule-meetings-for-maximum-free-time-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/README.md b/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/README.md new file mode 100755 index 000000000..7a72288a8 --- /dev/null +++ b/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/README.md @@ -0,0 +1,32 @@ +# [3441.Minimum Cost Good Caption][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost Good Caption +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-good-caption/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution.go b/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution_test.go b/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3441.Minimum-Cost-Good-Caption/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/README.md b/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/README.md new file mode 100755 index 000000000..99a90ad28 --- /dev/null +++ b/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/README.md @@ -0,0 +1,32 @@ +# [3442.Maximum Difference Between Even and Odd Frequency I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Difference Between Even and Odd Frequency I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-difference-between-even-and-odd-frequency-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution.go b/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution_test.go b/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3442.Maximum-Difference-Between-Even-and-Odd-Frequency-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md new file mode 100755 index 000000000..ba4b87990 --- /dev/null +++ b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md @@ -0,0 +1,32 @@ +# [3443.Maximum Manhattan Distance After K Changes][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Manhattan Distance After K Changes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-manhattan-distance-after-k-changes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/README.md b/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/README.md new file mode 100755 index 000000000..3b1616836 --- /dev/null +++ b/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [3444.Minimum Increments for Target Multiples in an Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Increments for Target Multiples in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-increments-for-target-multiples-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution.go b/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution_test.go b/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3444.Minimum-Increments-for-Target-Multiples-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/README.md b/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/README.md new file mode 100755 index 000000000..56b30adc6 --- /dev/null +++ b/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/README.md @@ -0,0 +1,32 @@ +# [3445.Maximum Difference Between Even and Odd Frequency II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Difference Between Even and Odd Frequency II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-difference-between-even-and-odd-frequency-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution.go b/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution_test.go b/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3445.Maximum-Difference-Between-Even-and-Odd-Frequency-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/README.md b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/README.md new file mode 100755 index 000000000..fb7e4c0d7 --- /dev/null +++ b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/README.md @@ -0,0 +1,32 @@ +# [3446.Sort Matrix by Diagonals][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sort Matrix by Diagonals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sort-matrix-by-diagonals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/README.md b/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/README.md new file mode 100755 index 000000000..78f003eca --- /dev/null +++ b/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/README.md @@ -0,0 +1,32 @@ +# [3447.Assign Elements to Groups with Constraints][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Assign Elements to Groups with Constraints +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/assign-elements-to-groups-with-constraints/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution.go b/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution_test.go b/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3447.Assign-Elements-to-Groups-with-Constraints/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/README.md b/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/README.md new file mode 100755 index 000000000..d4cab6efb --- /dev/null +++ b/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/README.md @@ -0,0 +1,32 @@ +# [3448.Count Substrings Divisible By Last Digit][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Substrings Divisible By Last Digit +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-substrings-divisible-by-last-digit/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution.go b/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution_test.go b/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3448.Count-Substrings-Divisible-By-Last-Digit/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/README.md b/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/README.md new file mode 100755 index 000000000..f0d2d03ac --- /dev/null +++ b/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/README.md @@ -0,0 +1,32 @@ +# [3449.Maximize the Minimum Game Score][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize the Minimum Game Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-minimum-game-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution.go b/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution_test.go b/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3449.Maximize-the-Minimum-Game-Score/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3452.Sum-of-Good-Numbers/README.md b/leetcode/3401-3500/3452.Sum-of-Good-Numbers/README.md new file mode 100755 index 000000000..03a6c84c4 --- /dev/null +++ b/leetcode/3401-3500/3452.Sum-of-Good-Numbers/README.md @@ -0,0 +1,32 @@ +# [3452.Sum of Good Numbers][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Good Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-good-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution.go b/leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution_test.go b/leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3452.Sum-of-Good-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3453.Separate-Squares-I/README.md b/leetcode/3401-3500/3453.Separate-Squares-I/README.md new file mode 100755 index 000000000..794dcf531 --- /dev/null +++ b/leetcode/3401-3500/3453.Separate-Squares-I/README.md @@ -0,0 +1,32 @@ +# [3453.Separate Squares I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Separate Squares I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/separate-squares-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3453.Separate-Squares-I/Solution.go b/leetcode/3401-3500/3453.Separate-Squares-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3453.Separate-Squares-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3453.Separate-Squares-I/Solution_test.go b/leetcode/3401-3500/3453.Separate-Squares-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3453.Separate-Squares-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3454.Separate-Squares-II/README.md b/leetcode/3401-3500/3454.Separate-Squares-II/README.md new file mode 100755 index 000000000..d205b8258 --- /dev/null +++ b/leetcode/3401-3500/3454.Separate-Squares-II/README.md @@ -0,0 +1,32 @@ +# [3454.Separate Squares II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Separate Squares II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/separate-squares-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3454.Separate-Squares-II/Solution.go b/leetcode/3401-3500/3454.Separate-Squares-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3454.Separate-Squares-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3454.Separate-Squares-II/Solution_test.go b/leetcode/3401-3500/3454.Separate-Squares-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3454.Separate-Squares-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3455.Shortest-Matching-Substring/README.md b/leetcode/3401-3500/3455.Shortest-Matching-Substring/README.md new file mode 100755 index 000000000..b0cd38e6f --- /dev/null +++ b/leetcode/3401-3500/3455.Shortest-Matching-Substring/README.md @@ -0,0 +1,32 @@ +# [3455.Shortest Matching Substring][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Shortest Matching Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shortest-matching-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution.go b/leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution_test.go b/leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3455.Shortest-Matching-Substring/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/README.md b/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/README.md new file mode 100755 index 000000000..3cae3c348 --- /dev/null +++ b/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/README.md @@ -0,0 +1,32 @@ +# [3456.Find Special Substring of Length K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Special Substring of Length K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-special-substring-of-length-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution.go b/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution_test.go b/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3456.Find-Special-Substring-of-Length-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3457.Eat-Pizzas!/README.md b/leetcode/3401-3500/3457.Eat-Pizzas!/README.md new file mode 100755 index 000000000..03ffb10ad --- /dev/null +++ b/leetcode/3401-3500/3457.Eat-Pizzas!/README.md @@ -0,0 +1,32 @@ +# [3457.Eat Pizzas!][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Eat Pizzas! +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/eat-pizzas/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3457.Eat-Pizzas!/Solution.go b/leetcode/3401-3500/3457.Eat-Pizzas!/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3457.Eat-Pizzas!/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3457.Eat-Pizzas!/Solution_test.go b/leetcode/3401-3500/3457.Eat-Pizzas!/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3457.Eat-Pizzas!/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/README.md b/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/README.md new file mode 100755 index 000000000..17691cdc9 --- /dev/null +++ b/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/README.md @@ -0,0 +1,32 @@ +# [3458.Select K Disjoint Special Substrings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Select K Disjoint Special Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/select-k-disjoint-special-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution.go b/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution_test.go b/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3458.Select-K-Disjoint-Special-Substrings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/README.md b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/README.md new file mode 100755 index 000000000..a26b414ce --- /dev/null +++ b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/README.md @@ -0,0 +1,32 @@ +# [3459.Length of Longest V-Shaped Diagonal Segment][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Length of Longest V-Shaped Diagonal Segment +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/length-of-longest-v-shaped-diagonal-segment/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md new file mode 100755 index 000000000..ce9f8a897 --- /dev/null +++ b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md @@ -0,0 +1,32 @@ +# [3461.Check If Digits Are Equal in String After Operations I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check If Digits Are Equal in String After Operations I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-digits-are-equal-in-string-after-operations-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/README.md b/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/README.md new file mode 100755 index 000000000..ebcc64a3c --- /dev/null +++ b/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/README.md @@ -0,0 +1,32 @@ +# [3462.Maximum Sum With at Most K Elements][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Sum With at Most K Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-sum-with-at-most-k-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution.go b/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution_test.go b/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3462.Maximum-Sum-With-at-Most-K-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/README.md b/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/README.md new file mode 100755 index 000000000..f2e2d3a32 --- /dev/null +++ b/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/README.md @@ -0,0 +1,32 @@ +# [3463.Check If Digits Are Equal in String After Operations II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check If Digits Are Equal in String After Operations II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-digits-are-equal-in-string-after-operations-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution.go b/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution_test.go b/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3463.Check-If-Digits-Are-Equal-in-String-After-Operations-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/README.md b/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/README.md new file mode 100755 index 000000000..ae0284c82 --- /dev/null +++ b/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/README.md @@ -0,0 +1,32 @@ +# [3464.Maximize the Distance Between Points on a Square][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize the Distance Between Points on a Square +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-distance-between-points-on-a-square/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution.go b/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution_test.go b/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3464.Maximize-the-Distance-Between-Points-on-a-Square/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3467.Transform-Array-by-Parity/README.md b/leetcode/3401-3500/3467.Transform-Array-by-Parity/README.md new file mode 100755 index 000000000..0dc913d62 --- /dev/null +++ b/leetcode/3401-3500/3467.Transform-Array-by-Parity/README.md @@ -0,0 +1,32 @@ +# [3467.Transform Array by Parity][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Transform Array by Parity +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/transform-array-by-parity/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution.go b/leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution_test.go b/leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3467.Transform-Array-by-Parity/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/README.md b/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/README.md new file mode 100755 index 000000000..bdd63ba5d --- /dev/null +++ b/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/README.md @@ -0,0 +1,32 @@ +# [3468.Find the Number of Copy Arrays][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Copy Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-copy-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution.go b/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution_test.go b/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3468.Find-the-Number-of-Copy-Arrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/README.md b/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/README.md new file mode 100755 index 000000000..4c9dd3ed7 --- /dev/null +++ b/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/README.md @@ -0,0 +1,32 @@ +# [3469.Find Minimum Cost to Remove Array Elements][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Minimum Cost to Remove Array Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-minimum-cost-to-remove-array-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution.go b/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution_test.go b/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3469.Find-Minimum-Cost-to-Remove-Array-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3470.Permutations-IV/README.md b/leetcode/3401-3500/3470.Permutations-IV/README.md new file mode 100755 index 000000000..d805d4fd4 --- /dev/null +++ b/leetcode/3401-3500/3470.Permutations-IV/README.md @@ -0,0 +1,32 @@ +# [3470.Permutations IV][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Permutations IV +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/permutations-iv/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3470.Permutations-IV/Solution.go b/leetcode/3401-3500/3470.Permutations-IV/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3470.Permutations-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3470.Permutations-IV/Solution_test.go b/leetcode/3401-3500/3470.Permutations-IV/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3470.Permutations-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/README.md b/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/README.md new file mode 100755 index 000000000..2fa3c652e --- /dev/null +++ b/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/README.md @@ -0,0 +1,32 @@ +# [3471.Find the Largest Almost Missing Integer][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Largest Almost Missing Integer +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-largest-almost-missing-integer/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution.go b/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution_test.go b/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3471.Find-the-Largest-Almost-Missing-Integer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/README.md b/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/README.md new file mode 100755 index 000000000..bc11b83b4 --- /dev/null +++ b/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/README.md @@ -0,0 +1,32 @@ +# [3472.Longest Palindromic Subsequence After at Most K Operations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Palindromic Subsequence After at Most K Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-palindromic-subsequence-after-at-most-k-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution.go b/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution_test.go b/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3472.Longest-Palindromic-Subsequence-After-at-Most-K-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/README.md b/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/README.md new file mode 100755 index 000000000..67bfa8aeb --- /dev/null +++ b/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/README.md @@ -0,0 +1,32 @@ +# [3473.Sum of K Subarrays With Length at Least M][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of K Subarrays With Length at Least M +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-k-subarrays-with-length-at-least-m/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution.go b/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution_test.go b/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3473.Sum-of-K-Subarrays-With-Length-at-Least-M/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/README.md b/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/README.md new file mode 100755 index 000000000..e231f5488 --- /dev/null +++ b/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/README.md @@ -0,0 +1,32 @@ +# [3474.Lexicographically Smallest Generated String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Lexicographically Smallest Generated String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/lexicographically-smallest-generated-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution.go b/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution_test.go b/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3474.Lexicographically-Smallest-Generated-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md new file mode 100755 index 000000000..cc2a2b90d --- /dev/null +++ b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md @@ -0,0 +1,32 @@ +# [3477.Fruits Into Baskets II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Fruits Into Baskets II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/fruits-into-baskets-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/README.md b/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/README.md new file mode 100755 index 000000000..a393e9cc6 --- /dev/null +++ b/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/README.md @@ -0,0 +1,32 @@ +# [3478.Choose K Elements With Maximum Sum][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Choose K Elements With Maximum Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/choose-k-elements-with-maximum-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution.go b/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution_test.go b/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3478.Choose-K-Elements-With-Maximum-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md new file mode 100755 index 000000000..74e955fec --- /dev/null +++ b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md @@ -0,0 +1,32 @@ +# [3479.Fruits Into Baskets III][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Fruits Into Baskets III +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/fruits-into-baskets-iii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/README.md b/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/README.md new file mode 100755 index 000000000..bda6af96f --- /dev/null +++ b/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/README.md @@ -0,0 +1,32 @@ +# [3480.Maximize Subarrays After Removing One Conflicting Pair][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Subarrays After Removing One Conflicting Pair +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-subarrays-after-removing-one-conflicting-pair/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution.go b/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution_test.go b/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3480.Maximize-Subarrays-After-Removing-One-Conflicting-Pair/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/README.md b/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/README.md new file mode 100755 index 000000000..27ea8c0dd --- /dev/null +++ b/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/README.md @@ -0,0 +1,32 @@ +# [3483.Unique 3-Digit Even Numbers][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Unique 3-Digit Even Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/unique-3-digit-even-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution.go b/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution_test.go b/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3483.Unique-3-Digit-Even-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3484.Design-Spreadsheet/README.md b/leetcode/3401-3500/3484.Design-Spreadsheet/README.md new file mode 100755 index 000000000..37eb8c215 --- /dev/null +++ b/leetcode/3401-3500/3484.Design-Spreadsheet/README.md @@ -0,0 +1,32 @@ +# [3484.Design Spreadsheet][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Spreadsheet +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-spreadsheet/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/README.md b/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/README.md new file mode 100755 index 000000000..087d4dc38 --- /dev/null +++ b/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/README.md @@ -0,0 +1,32 @@ +# [3485.Longest Common Prefix of K Strings After Removal][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Common Prefix of K Strings After Removal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-common-prefix-of-k-strings-after-removal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution.go b/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution_test.go b/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3485.Longest-Common-Prefix-of-K-Strings-After-Removal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3486.Longest-Special-Path-II/README.md b/leetcode/3401-3500/3486.Longest-Special-Path-II/README.md new file mode 100755 index 000000000..a0dc9828d --- /dev/null +++ b/leetcode/3401-3500/3486.Longest-Special-Path-II/README.md @@ -0,0 +1,32 @@ +# [3486.Longest Special Path II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Special Path II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-special-path-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3486.Longest-Special-Path-II/Solution.go b/leetcode/3401-3500/3486.Longest-Special-Path-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3486.Longest-Special-Path-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3486.Longest-Special-Path-II/Solution_test.go b/leetcode/3401-3500/3486.Longest-Special-Path-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3486.Longest-Special-Path-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md new file mode 100755 index 000000000..eca18aba2 --- /dev/null +++ b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md @@ -0,0 +1,32 @@ +# [3487.Maximum Unique Subarray Sum After Deletion][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Unique Subarray Sum After Deletion +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-unique-subarray-sum-after-deletion/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/README.md b/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/README.md new file mode 100755 index 000000000..4a0c66674 --- /dev/null +++ b/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/README.md @@ -0,0 +1,32 @@ +# [3488.Closest Equal Element Queries][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Closest Equal Element Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/closest-equal-element-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution.go b/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution_test.go b/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3488.Closest-Equal-Element-Queries/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/README.md b/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/README.md new file mode 100755 index 000000000..cbce44f59 --- /dev/null +++ b/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/README.md @@ -0,0 +1,32 @@ +# [3489.Zero Array Transformation IV][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Zero Array Transformation IV +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/zero-array-transformation-iv/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution.go b/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution_test.go b/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3489.Zero-Array-Transformation-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3490.Count-Beautiful-Numbers/README.md b/leetcode/3401-3500/3490.Count-Beautiful-Numbers/README.md new file mode 100755 index 000000000..60f655373 --- /dev/null +++ b/leetcode/3401-3500/3490.Count-Beautiful-Numbers/README.md @@ -0,0 +1,32 @@ +# [3490.Count Beautiful Numbers][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Beautiful Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-beautiful-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution.go b/leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution_test.go b/leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3490.Count-Beautiful-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/README.md b/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/README.md new file mode 100755 index 000000000..28a243ba9 --- /dev/null +++ b/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/README.md @@ -0,0 +1,32 @@ +# [3492.Maximum Containers on a Ship][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Containers on a Ship +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-containers-on-a-ship/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution.go b/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution_test.go b/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3492.Maximum-Containers-on-a-Ship/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3493.Properties-Graph/README.md b/leetcode/3401-3500/3493.Properties-Graph/README.md new file mode 100755 index 000000000..0a84bb7b2 --- /dev/null +++ b/leetcode/3401-3500/3493.Properties-Graph/README.md @@ -0,0 +1,32 @@ +# [3493.Properties Graph][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Properties Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/properties-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3493.Properties-Graph/Solution.go b/leetcode/3401-3500/3493.Properties-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3493.Properties-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3493.Properties-Graph/Solution_test.go b/leetcode/3401-3500/3493.Properties-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3493.Properties-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/README.md b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/README.md new file mode 100755 index 000000000..8ce3f8c87 --- /dev/null +++ b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/README.md @@ -0,0 +1,32 @@ +# [3494.Find the Minimum Amount of Time to Brew Potions][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Minimum Amount of Time to Brew Potions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-minimum-amount-of-time-to-brew-potions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md new file mode 100755 index 000000000..f816cddd9 --- /dev/null +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md @@ -0,0 +1,32 @@ +# [3495.Minimum Operations to Make Array Elements Zero][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Array Elements Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-array-elements-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/README.md b/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/README.md new file mode 100755 index 000000000..879a53df8 --- /dev/null +++ b/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/README.md @@ -0,0 +1,32 @@ +# [3498.Reverse Degree of a String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reverse Degree of a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reverse-degree-of-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution.go b/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution_test.go b/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3498.Reverse-Degree-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/README.md b/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/README.md new file mode 100755 index 000000000..eeffb8010 --- /dev/null +++ b/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/README.md @@ -0,0 +1,32 @@ +# [3499.Maximize Active Section with Trade I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Active Section with Trade I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-active-section-with-trade-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution.go b/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution_test.go b/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3499.Maximize-Active-Section-with-Trade-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/README.md b/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/README.md new file mode 100755 index 000000000..9e6a99d53 --- /dev/null +++ b/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/README.md @@ -0,0 +1,32 @@ +# [3500.Minimum Cost to Divide Array Into Subarrays][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Divide Array Into Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-divide-array-into-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution.go b/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution_test.go b/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3401-3500/3500.Minimum-Cost-to-Divide-Array-Into-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 4ed8213e45929922267a507fad3065c2a98958a2 Mon Sep 17 00:00:00 2001 From: Boris Date: Thu, 12 Jun 2025 21:08:02 +0800 Subject: [PATCH 307/450] update go.mod --- go.mod | 14 +++++----- go.sum | 28 +++++++++---------- .../README.md | 0 .../Solution.go | 0 .../Solution_test.go | 4 +-- 5 files changed, 23 insertions(+), 23 deletions(-) rename leetcode/3401-3500/{3457.Eat-Pizzas! => 3457.Eat-Pizzas}/README.md (100%) rename leetcode/3401-3500/{3457.Eat-Pizzas! => 3457.Eat-Pizzas}/Solution.go (100%) rename leetcode/3401-3500/{3457.Eat-Pizzas! => 3457.Eat-Pizzas}/Solution_test.go (95%) diff --git a/go.mod b/go.mod index 7c34b0611..f8d776302 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/cloudflare/circl v1.6.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20250602020802-c6617b811d0e // indirect + github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/icholy/digest v1.1.0 // indirect @@ -24,12 +24,12 @@ require ( github.com/refraction-networking/utls v1.7.3 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/mock v0.5.2 // indirect - golang.org/x/crypto v0.38.0 // indirect - golang.org/x/mod v0.24.0 // indirect - golang.org/x/net v0.40.0 // indirect - golang.org/x/sync v0.14.0 // indirect + golang.org/x/crypto v0.39.0 // indirect + golang.org/x/mod v0.25.0 // indirect + golang.org/x/net v0.41.0 // indirect + golang.org/x/sync v0.15.0 // indirect golang.org/x/sys v0.33.0 // indirect - golang.org/x/text v0.25.0 // indirect - golang.org/x/tools v0.33.0 // indirect + golang.org/x/text v0.26.0 // indirect + golang.org/x/tools v0.34.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index f630c7785..4c922768b 100644 --- a/go.sum +++ b/go.sum @@ -10,8 +10,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/pprof v0.0.0-20250602020802-c6617b811d0e h1:FJta/0WsADCe1r9vQjdHbd3KuiLPu7Y9WlyLGwMUNyE= -github.com/google/pprof v0.0.0-20250602020802-c6617b811d0e/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= +github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18= +github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -49,20 +49,20 @@ go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= -golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= -golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= -golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= -golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= -golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= +golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/leetcode/3401-3500/3457.Eat-Pizzas!/README.md b/leetcode/3401-3500/3457.Eat-Pizzas/README.md similarity index 100% rename from leetcode/3401-3500/3457.Eat-Pizzas!/README.md rename to leetcode/3401-3500/3457.Eat-Pizzas/README.md diff --git a/leetcode/3401-3500/3457.Eat-Pizzas!/Solution.go b/leetcode/3401-3500/3457.Eat-Pizzas/Solution.go similarity index 100% rename from leetcode/3401-3500/3457.Eat-Pizzas!/Solution.go rename to leetcode/3401-3500/3457.Eat-Pizzas/Solution.go diff --git a/leetcode/3401-3500/3457.Eat-Pizzas!/Solution_test.go b/leetcode/3401-3500/3457.Eat-Pizzas/Solution_test.go similarity index 95% rename from leetcode/3401-3500/3457.Eat-Pizzas!/Solution_test.go rename to leetcode/3401-3500/3457.Eat-Pizzas/Solution_test.go index 14ff50eb4..499883f0b 100644 --- a/leetcode/3401-3500/3457.Eat-Pizzas!/Solution_test.go +++ b/leetcode/3401-3500/3457.Eat-Pizzas/Solution_test.go @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ca1ceef56bc7a1301d5042f7cbe14f8b3c787a78 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 13 Jun 2025 09:21:55 +0800 Subject: [PATCH 308/450] Add solution and test-cases for problem 3310 --- .../3310.Remove-Methods-From-Project/1.png | Bin 0 -> 12338 bytes .../3310.Remove-Methods-From-Project/2.png | Bin 0 -> 13201 bytes .../3310.Remove-Methods-From-Project/3.png | Bin 0 -> 10776 bytes .../README.md | 55 ++++++++++---- .../Solution.go | 70 +++++++++++++++++- .../Solution_test.go | 23 +++--- 6 files changed, 122 insertions(+), 26 deletions(-) create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/1.png create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/2.png create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/3.png diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/1.png b/leetcode/3301-3400/3310.Remove-Methods-From-Project/1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2c2497195121730d4c0826c3c9c0529ea0aceb GIT binary patch literal 12338 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 literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/2.png b/leetcode/3301-3400/3310.Remove-Methods-From-Project/2.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e206c086863119740ee54367161aa09f1afbd7 GIT binary patch literal 13201 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 literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/3.png b/leetcode/3301-3400/3310.Remove-Methods-From-Project/3.png new file mode 100644 index 0000000000000000000000000000000000000000..b9056067b19e74c0839146962c5dc0f674d1ee65 GIT binary patch literal 10776 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 literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md b/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md index 4ae8edce8..08711fe6b 100755 --- a/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md @@ -1,28 +1,57 @@ # [3310.Remove Methods From Project][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 maintaining a project that has `n` methods numbered from `0` to `n - 1`. + +You are given two integers `n` and `k`, and a 2D integer array `invocations`, where `invocations[i] = [ai, bi]` indicates that method `ai` invokes method `bi`. + +There is a known bug in method `k`. Method `k`, along with any method invoked by it, either **directly** or **indirectly**, are considered **suspicious** and we aim to remove them. + +A group of methods can only be removed if no method **outside** the group invokes any methods **within** it. + +Return an array containing all the remaining methods after removing all the **suspicious** methods. You may return the answer in any order. If it is not possible to remove **all** the suspicious methods, **none** should be removed. + +**Example 1:** + +![1](./1.png) + +``` +Input: n = 4, k = 1, invocations = [[1,2],[0,1],[3,2]] + +Output: [0,1,2,3] -**Example 1:** +Explanation: +Method 2 and method 1 are suspicious, but they are directly invoked by methods 3 and 0, which are not suspicious. We return all elements without removing anything. ``` -Input: a = "11", b = "1" -Output: "100" + +**Example 2:** + +![2](./2.png) + +``` +Input: n = 5, k = 0, invocations = [[1,2],[0,2],[0,1],[3,4]] + +Output: [3,4] + +Explanation: + +Methods 0, 1, and 2 are suspicious and they are not directly invoked by any other method. We can remove them. ``` -## 题意 -> ... +**Example 3:** -## 题解 +![3](./3.png) -### 思路1 -> ... -Remove Methods From Project -```go ``` +Input: n = 3, k = 2, invocations = [[1,2],[0,1],[2,0]] + +Output: [] +Explanation: + +All methods are suspicious. We can remove them. +``` ## 结语 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go index d115ccf5e..2bd87966e 100644 --- a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go @@ -1,5 +1,71 @@ package Solution -func Solution(x bool) bool { - return x +type unionFind3310 struct { + father []int +} + +func (u *unionFind3310) findFather(x int) int { + if x != u.father[x] { + u.father[x] = u.findFather(u.father[x]) + } + return u.father[x] +} + +func (u *unionFind3310) union(x, y int) { + fx := u.findFather(x) + fy := u.findFather(y) + if fx < fy { + u.father[fy] = fx + } else { + u.father[fx] = fy + } +} + +func Solution(n int, k int, invocations [][]int) []int { + u := unionFind3310{father: make([]int, n)} + for i := range n { + u.father[i] = i + } + relations := make(map[int][]int) + removed := make([]bool, n) + for _, in := range invocations { + u.union(in[0], in[1]) + relations[in[0]] = append(relations[in[0]], in[1]) + } + // 然后通过dfs将所有的问题方法都标记出来 + // 这个组的数据是有问题的 + problemGroup := u.findFather(k) + // 将所有的数据开始做标记 + removed[k] = true + var dfs func(int) + used := map[int]bool{ + k: true, + } + dfs = func(cur int) { + removed[cur] = true + for _, rel := range relations[cur] { + if used[rel] { + continue + } + used[rel] = true + dfs(rel) + } + } + dfs(k) + var res, keep []int + + for i := range n { + f := u.findFather(i) + if f != problemGroup { + res = append(res, i) + continue + } + if !removed[i] { + for j := range n { + keep = append(keep, j) + } + return keep + } + } + return res } diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go index 14ff50eb4..f41189d58 100644 --- a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, k int + invocations [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, 1, [][]int{{1, 2}, {0, 1}, {3, 2}}, []int{0, 1, 2, 3}}, + {"TestCase2", 5, 0, [][]int{{1, 2}, {0, 2}, {0, 1}, {3, 4}}, []int{3, 4}}, + {"TestCase3", 3, 2, [][]int{{1, 2}, {0, 1}, {2, 0}}, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.k, c.invocations) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.k, c.invocations) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 210bb1ede7091c91bfe239c3321d87302f5f498f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 14 Jun 2025 15:38:53 +0800 Subject: [PATCH 309/450] Add solution and test-cases for problem 2566 --- .../README.md | 42 +++++++++++++++++++ .../Solution.go | 37 +++++++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/README.md diff --git a/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/README.md b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/README.md new file mode 100644 index 000000000..a6ae58698 --- /dev/null +++ b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/README.md @@ -0,0 +1,42 @@ +# [2566.Maximum Difference by Remapping a Digit][title] + +## Description + +You are given an integer `num`. You know that Bob will sneakily **remap** one of the `10` possible digits (`0` to `9`) to another digit. + +Return the difference between the maximum and minimum values Bob can make by remapping **exactly one** digit in `num`. + +**Notes**: + +- When Bob remaps a digit d1 to another digit d2, Bob replaces all occurrences of `d1` in `num` with `d2`. +- Bob can remap a digit to itself, in which case `num` does not change. +- Bob can remap different digits for obtaining minimum and maximum values respectively. +- The resulting number after remapping can contain leading zeroes. + +**Example 1:** + +``` +Input: num = 11891 +Output: 99009 +Explanation: +To achieve the maximum value, Bob can remap the digit 1 to the digit 9 to yield 99899. +To achieve the minimum value, Bob can remap the digit 1 to the digit 0, yielding 890. +The difference between these two numbers is 99009. +``` + +**Example 2:** + +``` +Input: num = 90 +Output: 99 +Explanation: +The maximum value that can be returned by the function is 99 (if 0 is replaced by 9) and the minimum value that can be returned by the function is 0 (if 9 is replaced by 0). +Thus, we return 99. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-difference-by-remapping-a-digit +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go index d115ccf5e..6138f4e0b 100755 --- a/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go +++ b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num int) int { + digits := make([]int, 0) + for num > 0 { + digits = append(digits, num%10) + num /= 10 + } + cp1 := make([]int, len(digits)) + copy(cp1, digits) + i := len(digits) - 1 + remap := -1 + for ; i >= 0; i-- { + if cp1[i] != 9 { + remap = cp1[i] + break + } + } + for ; i >= 0; i-- { + if cp1[i] == remap { + cp1[i] = 9 + } + } + + i = len(digits) - 1 + remap = digits[i] + for ; i >= 0; i-- { + if digits[i] == remap { + digits[i] = 0 + } + } + a, b := 0, 0 + for i := len(digits) - 1; i >= 0; i-- { + a = a*10 + cp1[i] + b = b*10 + digits[i] + } + return a - b } diff --git a/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution_test.go b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution_test.go index 14ff50eb4..b38731089 100755 --- a/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution_test.go +++ b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/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", 11891, 99009}, + {"TestCase2", 90, 99}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 81167d81d277632fe084b4d8d050e928a7508616 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 15 Jun 2025 17:11:19 +0800 Subject: [PATCH 310/450] Add solution and test-cases for problem 1432 --- .../README.md | 42 +++++++++++++++ .../Solution.go | 52 ++++++++++++++++++- .../Solution_test.go | 13 +++-- 3 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/README.md diff --git a/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/README.md b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/README.md new file mode 100644 index 000000000..6accc5a52 --- /dev/null +++ b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/README.md @@ -0,0 +1,42 @@ +# [1432.Max Difference You Can Get From Changing an Integer][title] + +## Description + +You are given an integer `num`. You will apply the following steps to num **two** separate times: + +- Pick a digit `x` `(0 <= x <= 9)`. +- Pick another digit `y` `(0 <= y <= 9)`. Note `y` can be equal to `x`. +- Replace all the occurrences of `x` in the decimal representation of `num` by `y`. + +Let `a` and `b` be the two results from applying the operation to `num` independently. + +Return the max difference between `a` and `b`. + +Note that neither `a` nor `b` may have any leading zeros, and **must not** be 0. + +**Example 1:** + +``` +Input: num = 555 +Output: 888 +Explanation: The first time pick x = 5 and y = 9 and store the new integer in a. +The second time pick x = 5 and y = 1 and store the new integer in b. +We have now a = 999 and b = 111 and max difference = 888 +``` + +**Example 2:** + +``` +Input: num = 9 +Output: 8 +Explanation: The first time pick x = 9 and y = 9 and store the new integer in a. +The second time pick x = 9 and y = 1 and store the new integer in b. +We have now a = 9 and b = 1 and max difference = 8 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/max-difference-you-can-get-from-changing-an-integer/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go index d115ccf5e..9e4579249 100755 --- a/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go +++ b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go @@ -1,5 +1,53 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num int) int { + digits := make([]int, 0) + for num > 0 { + digits = append(digits, num%10) + num /= 10 + } + cp := make([]int, len(digits)) + copy(cp, digits) + + i := len(digits) - 1 + remap := -1 + for ; i >= 0; i-- { + if cp[i] != 9 { + remap = cp[i] + break + } + } + for ; i >= 0; i-- { + if cp[i] == remap { + cp[i] = 9 + } + } + + i = len(digits) - 1 + target := 1 + if digits[i] == 1 { + target = 0 + } + + remap = -1 + for ; i >= 0; i-- { + if digits[i] == 0 { + continue + } + if digits[i] != 1 { + remap = digits[i] + break + } + } + for ; i >= 0; i-- { + if digits[i] == remap { + digits[i] = target + } + } + a, b := 0, 0 + for i := len(digits) - 1; i >= 0; i-- { + a = a*10 + cp[i] + b = b*10 + digits[i] + } + return a - b } diff --git a/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution_test.go b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution_test.go index 14ff50eb4..03cd71454 100755 --- a/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution_test.go +++ b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/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", 555, 888}, + {"TestCase2", 9, 8}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0a2a2267c34eb16f53f979b953a17588996d8420 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 16 Jun 2025 09:11:17 +0800 Subject: [PATCH 311/450] Add solution and test-cases for problem 2016 --- .../README.md | 36 ++++++++++++------- .../Solution.go | 21 +++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md index 262931a91..78cf5bae8 100755 --- a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md +++ b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md @@ -1,28 +1,38 @@ # [2016.Maximum Difference Between Increasing Elements][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 +Given a **0-indexed** integer array `nums` of size `n`, find the **maximum difference** between `nums[i]` and `nums[j]` (i.e., `nums[j] - nums[i]`), such that `0 <= i < j < n` and `nums[i] < nums[j]`. + +Return the **maximum difference**. If no such `i` and `j` exists, return `-1`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [7,1,5,4] +Output: 4 +Explanation: +The maximum difference occurs with i = 1 and j = 2, nums[j] - nums[i] = 5 - 1 = 4. +Note that with i = 1 and j = 0, the difference nums[j] - nums[i] = 7 - 1 = 6, but i > j, so it is not valid. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Difference Between Increasing Elements -```go ``` +Input: nums = [9,4,3,2] +Output: -1 +Explanation: +There is no i and j such that i < j and nums[i] < nums[j]. +``` + +**Example 3:** +``` +Input: nums = [1,5,2,10] +Output: 9 +Explanation: +The maximum difference occurs with i = 0 and j = 3, nums[j] - nums[i] = 10 - 1 = 9. +``` ## 结语 diff --git a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go index d115ccf5e..6bc0c338e 100644 --- a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go +++ b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + minNumbers := make([]int, len(nums)) + minNumbers[0] = nums[0] + for i := 1; i < len(nums); i++ { + minNumbers[i] = min(minNumbers[i-1], nums[i]) + } + ans := -1 + var diff, a int + for i := len(nums) - 1; i > 0; i-- { + a = minNumbers[i-1] + if a >= nums[i] { + continue + } + diff = nums[i] - a + if ans == -1 || ans < diff { + ans = diff + } + } + return ans } diff --git a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution_test.go b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution_test.go index 14ff50eb4..5b78c73c2 100644 --- a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution_test.go +++ b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution_test.go @@ -10,12 +10,12 @@ 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{7, 1, 5, 4}, 4}, + {"TestCase2", []int{9, 4, 3, 2}, -1}, + {"TestCase3", []int{1, 5, 2, 10}, 9}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ae5dfe601b8974b18e38bafa4f0fe3f11e4142e4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 17 Jun 2025 08:59:35 +0800 Subject: [PATCH 312/450] Add solution and test-cases for problem 3405 --- .../' | 37 ++++++++++++++ .../README.md | 49 ++++++++++++++----- .../Solution.go | 45 ++++++++++++++++- .../Solution_test.go | 22 ++++----- 4 files changed, 128 insertions(+), 25 deletions(-) create mode 100644 leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/' diff --git a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/' b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/' new file mode 100644 index 000000000..3d4e83665 --- /dev/null +++ b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/' @@ -0,0 +1,37 @@ +# [3405.Count the Number of Arrays with K Matching Adjacent Elements][title] + +## Description + +You are given three integers `n`, `m`, `k`. A **good array** arr of size n is defined as follows: + +Each element in arr is in the inclusive range [1, m]. +Exactly k indices i (where 1 <= i < n) satisfy the condition arr[i - 1] == arr[i]. +Return the number of good arrays that can be formed. + +Since the answer may be very large, return it modulo 109 + 7. + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Arrays with K Matching Adjacent Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-arrays-with-k-matching-adjacent-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md index 1e150cbc8..1ed4c27d2 100755 --- a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md +++ b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/README.md @@ -1,28 +1,53 @@ # [3405.Count the Number of Arrays with K Matching Adjacent Elements][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 three integers `n`, `m`, `k`. A **good array** `arr` of size `n` is defined as follows: + +- Each element in `arr` is in the **inclusive** range `[1, m]`. +- Exactly `k` indices `i` (where `1 <= i < n`) satisfy the condition `arr[i - 1] == arr[i]`. + +Return the number of **good arrays** that can be formed. + +Since the answer may be very large, return it **modulo** `10^9 + 7`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, m = 2, k = 1 + +Output: 4 + +Explanation: + +There are 4 good arrays. They are [1, 1, 2], [1, 2, 2], [2, 1, 1] and [2, 2, 1]. +Hence, the answer is 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: n = 4, m = 2, k = 2 + +Output: 6 + +Explanation: + +The good arrays are [1, 1, 1, 2], [1, 1, 2, 2], [1, 2, 2, 2], [2, 1, 1, 1], [2, 2, 1, 1] and [2, 2, 2, 1]. +Hence, the answer is 6. +``` + +**Example 3:** -### 思路1 -> ... -Count the Number of Arrays with K Matching Adjacent Elements -```go ``` +Input: n = 5, m = 2, k = 0 + +Output: 2 +Explanation: + +The good arrays are [1, 2, 1, 2, 1] and [2, 1, 2, 1, 2]. Hence, the answer is 2. +``` ## 结语 diff --git a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go index d115ccf5e..03eda8b24 100644 --- a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go +++ b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +const ( + MOD = 1e9 + 7 + MX = 100000 +) + +var ( + fact = make([]int64, MX) + invFact = make([]int64, MX) +) + +func qpow(x int64, n int) int64 { + res := int64(1) + for n > 0 { + if n&1 == 1 { + res = res * x % MOD + } + x = x * x % MOD + n >>= 1 + } + return res +} + +func initFact() { + if fact[0] != 0 { + return + } + fact[0] = 1 + for i := 1; i < MX; i++ { + fact[i] = fact[i-1] * int64(i) % MOD + } + invFact[MX-1] = qpow(fact[MX-1], MOD-2) + for i := MX - 1; i > 0; i-- { + invFact[i-1] = invFact[i] * int64(i) % MOD + } +} + +func comb(n, m int) int64 { + return fact[n] * invFact[m] % MOD * invFact[n-m] % MOD +} + +func Solution(n, m, k int) int { + initFact() + return int(comb(n-1, k) * int64(m) % MOD * qpow(int64(m-1), n-k-1) % MOD) } diff --git a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go index 14ff50eb4..96e9ba3c6 100644 --- a/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go +++ b/leetcode/3401-3500/3405.Count-the-Number-of-Arrays-with-K-Matching-Adjacent-Elements/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, m, k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 2, 1, 4}, + {"TestCase2", 4, 2, 2, 6}, + {"TestCase3", 5, 2, 0, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.m, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.m, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d4ad594c2fe5422ea43e02c1c997e214627d49bb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 18 Jun 2025 09:16:44 +0800 Subject: [PATCH 313/450] Add solution and test-cases for problem 3319 --- .../1.png | Bin 0 -> 26837 bytes .../2.png | Bin 0 -> 11997 bytes .../3.png | Bin 0 -> 9168 bytes .../README.md | 53 ++++++++++++---- .../Solution.go | 49 +++++++++++++- .../Solution_test.go | 60 +++++++++++++++--- 6 files changed, 137 insertions(+), 25 deletions(-) create mode 100644 leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/1.png create mode 100644 leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/2.png create mode 100644 leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/3.png diff --git a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/1.png b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5da539460f5d541adbdb864f06f5b027e0ea69fe GIT binary patch literal 26837 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 YNHH;6wpO|uDj$NN?KIy}V(1$6e+Gdb=Kufz literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/2.png b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/2.png new file mode 100644 index 0000000000000000000000000000000000000000..8f38eba6023b07e8fb1247d21cd71325726267a5 GIT binary patch literal 11997 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 [!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 -**Example 1:** +You are given the `root` of a **binary tree** and an integer `k`. + +Return an integer denoting the size of the `kth` **largest perfect binary subtree**, or `-1` if it doesn't exist. + +A **perfect binary tree** is a tree where all leaves are on the same level, and every parent has two children. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [5,3,6,5,2,5,7,1,8,null,null,6,8], k = 2 + +Output: 3 + +Explanation: + +The roots of the perfect binary subtrees are highlighted in black. Their sizes, in non-increasing order are [3, 3, 1, 1, 1, 1, 1, 1]. +The 2nd largest size is 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -K-th Largest Perfect Subtree Size in Binary Tree -```go ``` +Input: root = [1,2,3,4,5,6,7], k = 1 + +Output: 7 + +Explanation: +The sizes of the perfect binary subtrees in non-increasing order are [7, 3, 3, 1, 1, 1, 1]. The size of the largest perfect binary subtree is 7. +``` + +**Example 3:** + +![3](./3.png) + +``` +Input: root = [1,2,3,null,4], k = 3 + +Output: -1 + +Explanation: + +The sizes of the perfect binary subtrees in non-increasing order are [1, 1]. There are fewer than 3 perfect binary subtrees. +``` ## 结语 diff --git a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go index d115ccf5e..2b6668c23 100644 --- a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go +++ b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(root *TreeNode, k int) int { + var dfs func(*TreeNode) int + count := make(map[int]int) + dfs = func(cur *TreeNode) int { + if cur == nil { + return -1 + } + if cur.Left == nil && cur.Right == nil { + count[1]++ + // leaf + return 1 + } + left := dfs(cur.Left) + right := dfs(cur.Right) + + if left != -1 && left == right { + count[left+right+1]++ + return left + right + 1 + } + return -1 + } + dfs(root) + keys := make([]int, 0) + for i := range count { + keys = append(keys, i) + } + + sort.Slice(keys, func(i, j int) bool { + return keys[i] > keys[j] + }) + var cnt int + for _, n := range keys { + cnt = count[n] + if cnt >= k { + return n + } + k -= cnt + } + return -1 } diff --git a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go index 14ff50eb4..c64b4617e 100644 --- a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go +++ b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go @@ -10,30 +10,70 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 8}, + }, + Right: &TreeNode{Val: 2}, + }, + Right: &TreeNode{ + Val: 6, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{Val: 8}, + }, + Right: &TreeNode{Val: 7}, + }, + }, 2, 3}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 5}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{Val: 7}, + }, + }, 1, 7}, + {"TestCase3", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{Val: 3}, + }, 3, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 283009889d06c37c88fa2b1520f892ee9360b773 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 19 Jun 2025 09:20:19 +0800 Subject: [PATCH 314/450] Add solution and test-cases for problem 1311 --- .../1.png | Bin 0 -> 7147 bytes .../2.png | Bin 0 -> 6876 bytes .../README.md | 36 +++++++++------ .../Solution.go | 41 +++++++++++++++++- .../Solution_test.go | 23 +++++----- 5 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/1.png create mode 100644 leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/2.png diff --git a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/1.png b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c7c97b47f0ac7bad497ca188af66fe5a94fd2b GIT binary patch literal 7147 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

    ) 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 [!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 +There are `n` people, each person has a unique id between `0` and `n-1`. Given the arrays `watchedVideos` and `friends`, where `watchedVideos[i]` and `friends[i]` contain the list of watched videos and the list of friends respectively for the person with `id = i`. + +Level **1** of videos are all watched videos by your friends, level **2** of videos are all watched videos by the friends of your friends and so on. In general, the level `k` of videos are all watched videos by people with the shortest path **exactly** equal to `k` with you. Given your `id` and the `level` of videos, return the list of videos ordered by their frequencies (increasing). For videos with the same frequency order them alphabetically from least to greatest. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: watchedVideos = [["A","B"],["C"],["B","C"],["D"]], friends = [[1,2],[0,3],[0,3],[1,2]], id = 0, level = 1 +Output: ["B","C"] +Explanation: +You have id = 0 (green color in the figure) and your friends are (yellow color in the figure): +Person with id = 1 -> watchedVideos = ["C"] +Person with id = 2 -> watchedVideos = ["B","C"] +The frequencies of watchedVideos by your friends are: +B -> 1 +C -> 2 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Get Watched Videos by Your Friends -```go ``` - +Input: watchedVideos = [["A","B"],["C"],["B","C"],["D"]], friends = [[1,2],[0,3],[0,3],[1,2]], id = 0, level = 2 +Output: ["D"] +Explanation: +You have id = 0 (green color in the figure) and the only friend of your friends is the person with id = 3 (yellow color in the figure). +``` ## 结语 diff --git a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go index d115ccf5e..233cc66da 100644 --- a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go +++ b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(watchedVideos [][]string, friends [][]int, id int, level int) []string { + now := 0 + var ans []string + queue := []int{id} + visited := [100]bool{} + visited[id] = true + for ; now < level; now++ { + nq := make([]int, 0) + videos := map[string]int{} + next := make([]string, 0) + for _, u := range queue { + for _, f := range friends[u] { + if visited[f] { + continue + } + visited[f] = true + nq = append(nq, f) + for _, w := range watchedVideos[f] { + videos[w]++ + } + } + } + for v := range videos { + next = append(next, v) + } + sort.Slice(next, func(i, j int) bool { + a, b := videos[next[i]], videos[next[j]] + if a == b { + return next[i] < next[j] + } + return a < b + }) + ans = next + queue = nq + } + return ans + } diff --git a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go index 14ff50eb4..f9d274d79 100644 --- a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go +++ b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + watchedVideos [][]string + friends [][]int + id, level int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]string{{"A", "B"}, {"C"}, {"B", "C"}, {"D"}}, [][]int{{1, 2}, {0, 3}, {0, 3}, {1, 2}}, 0, 1, []string{"B", "C"}}, + {"TestCase2", [][]string{{"A", "B"}, {"C"}, {"B", "C"}, {"D"}}, [][]int{{1, 2}, {0, 3}, {0, 3}, {1, 2}}, 0, 2, []string{"D"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.watchedVideos, c.friends, c.id, c.level) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.watchedVideos, c.friends, c.id, c.level) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9bd9192decebf8e79d239224fc998f7556abb017 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 20 Jun 2025 09:27:09 +0800 Subject: [PATCH 315/450] Add solution and test-cases for problem 3443 --- .../README.md | 50 ++++++++++++++----- .../Solution.go | 31 +++++++++++- .../Solution_test.go | 20 ++++---- 3 files changed, 76 insertions(+), 25 deletions(-) diff --git a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md index ba4b87990..b877a87f9 100755 --- a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md +++ b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/README.md @@ -1,28 +1,52 @@ # [3443.Maximum Manhattan Distance After K Changes][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 a string `s` consisting of the characters `'N'`, `'S'`, `'E'`, and `'W'`, where `s[i]` indicates movements in an infinite grid: + +- `'N'` : Move north by 1 unit. +- `'S'` : Move south by 1 unit. +- `'E'` : Move east by 1 unit. +- `'W'` : Move west by 1 unit. + +Initially, you are at the origin `(0, 0)`. You can change **at most** `k` characters to any of the four directions. + +Find the **maximum Manhattan distance** from the origin that can be achieved **at any time** while performing the movements **in order**. + +The **Manhattan Distance** between two cells `(xi, yi)` and `(xj, yj)` is `|xi - xj| + |yi - yj|`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "NWSE", k = 1 + +Output: 3 -## 题意 -> ... +Explanation: -## 题解 +Change s[2] from 'S' to 'N'. The string s becomes "NWNE". -### 思路1 -> ... -Maximum Manhattan Distance After K Changes -```go +Movement Position (x, y) Manhattan Distance Maximum +s[0] == 'N' (0, 1) 0 + 1 = 1 1 +s[1] == 'W' (-1, 1) 1 + 1 = 2 2 +s[2] == 'N' (-1, 2) 1 + 2 = 3 3 +s[3] == 'E' (0, 2) 0 + 2 = 2 3 +The maximum Manhattan distance from the origin that can be achieved is 3. Hence, 3 is the output. ``` +**Example 2:** + +``` +Input: s = "NSWWEW", k = 3 + +Output: 6 + +Explanation: + +Change s[1] from 'S' to 'N', and s[4] from 'E' to 'W'. The string s becomes "NNWWWW". + +The maximum Manhattan distance from the origin that can be achieved is 6. Hence, 6 is the output. +``` ## 结语 diff --git a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go index d115ccf5e..5d79efbc6 100644 --- a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go +++ b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) int { + n1, s1, e1, w1 := 0, 0, 0, 0 + var ans int + for _, b := range s { + if b == 'N' { + n1++ + } + if b == 'S' { + s1++ + } + if b == 'W' { + w1++ + } + if b == 'E' { + e1++ + } + // 我们只需要将少的移动的多的方向,另外就是,南北,东西变化可以增加,但是南东这种变化没用 + minY := min(n1, s1) + maxY := max(n1, s1) + a := min(minY, k) + + minX := min(e1, w1) + maxX := max(e1, w1) + b := min(minX, k-a) + // n1 - (s1-a) + a + ans = max(ans, maxY-minY+a*2+maxX-minX+b*2) + + } + return ans } diff --git a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go index 14ff50eb4..0b9fcf309 100644 --- a/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go +++ b/leetcode/3401-3500/3443.Maximum-Manhattan-Distance-After-K-Changes/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "NWSE", 1, 3}, + {"TestCase2", "NSWWEW", 3, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f040fb453036f4d1571603973297afcec40ff2c8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 21 Jun 2025 08:56:36 +0800 Subject: [PATCH 316/450] Add solution and test-cases for problem 2410 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 18 ++++++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 45 insertions(+), 27 deletions(-) diff --git a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md index 0746f9499..a8e36bff8 100755 --- a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md +++ b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md @@ -1,28 +1,33 @@ # [2410.Maximum Matching of Players With Trainers][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 a **0-indexed** integer array `players`, where `players[i]` represents the **ability** of the `ith` player. You are also given a **0-indexed** integer array `trainers`, where `trainers[j]` represents the **training capacity** of the `jth` trainer. + +The `ith` player can **match** with the `jth` trainer if the player's ability is **less than or equal** to the trainer's training capacity. Additionally, the `ith` player can be matched with at most one trainer, and the `jth` trainer can be matched with at most one player. + +Return the **maximum** number of matchings between `players` and `trainers` that satisfy these conditions. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: players = [4,7,9], trainers = [8,2,5,8] +Output: 2 +Explanation: +One of the ways we can form two matchings is as follows: +- players[0] can be matched with trainers[0] since 4 <= 8. +- players[1] can be matched with trainers[3] since 7 <= 8. +It can be proven that 2 is the maximum number of matchings that can be formed. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Matching of Players With Trainers -```go ``` - +Input: players = [1,1,1], trainers = [10] +Output: 1 +Explanation: +The trainer can be matched with any of the 3 players. +Each player can only be matched with one trainer, so the maximum answer is 1. +``` ## 结语 diff --git a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go index d115ccf5e..035fc4450 100644 --- a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go +++ b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(players []int, trainers []int) int { + sort.Ints(players) + sort.Ints(trainers) + i, j := 0, 0 + ans := 0 + for i < len(players) && j < len(trainers) { + if trainers[j] >= players[i] { + i, j = i+1, j+1 + ans++ + continue + } + j++ + } + return ans } diff --git a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go index 14ff50eb4..687609bcf 100644 --- a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go +++ b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + players, trainers []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 7, 9}, []int{8, 2, 5, 8}, 2}, + {"TestCase2", []int{1, 1, 1}, []int{10}, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.players, c.trainers) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.players, c.trainers) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6755057caeae9ac8c55565c54ee406b7a8a1b98b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 22 Jun 2025 16:54:17 +0800 Subject: [PATCH 317/450] Add solution and test-cases for problem 2138 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 16 +++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 50 insertions(+), 26 deletions(-) diff --git a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md index 0a96d5acb..e584b2a5c 100755 --- a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md +++ b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md @@ -1,28 +1,39 @@ # [2138.Divide a String Into Groups of Size k][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 +A string `s` can be partitioned into groups of size `k` using the following procedure: + +- The first group consists of the first `k` characters of the string, the second group consists of the next k characters of the string, and so on. Each element can be a part of **exactly one** group. +- For the last group, if the string **does not** have `k` characters remaining, a character `fill` is used to complete the group. + +Note that the partition is done so that after removing the `fill` character from the last group (if it exists) and concatenating all the groups in order, the resultant string should be `s`. + +Given the string `s`, the size of each group `k` and the character `fill`, return a string array denoting the **composition of every group** `s` has been divided into, using the above procedure. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abcdefghi", k = 3, fill = "x" +Output: ["abc","def","ghi"] +Explanation: +The first 3 characters "abc" form the first group. +The next 3 characters "def" form the second group. +The last 3 characters "ghi" form the third group. +Since all groups can be completely filled by characters from the string, we do not need to use fill. +Thus, the groups formed are "abc", "def", and "ghi". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Divide a String Into Groups of Size k -```go ``` - +Input: s = "abcdefghij", k = 3, fill = "x" +Output: ["abc","def","ghi","jxx"] +Explanation: +Similar to the previous example, we are forming the first three groups "abc", "def", and "ghi". +For the last group, we can only use the character 'j' from the string. To complete this group, we add 'x' twice. +Thus, the 4 groups formed are "abc", "def", "ghi", and "jxx". +``` ## 结语 diff --git a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go index d115ccf5e..59315e771 100644 --- a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go +++ b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int, fill byte) []string { + l := len(s) + bs := []byte(s) + mod := l % k + if mod != 0 { + for i := 0; i < k-mod; i++ { + bs = append(bs, fill) + } + } + var ans []string + for i := 0; i < len(bs); i += k { + ans = append(ans, string(bs[i:i+k])) + } + return ans } diff --git a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution_test.go b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution_test.go index 14ff50eb4..3a7337193 100644 --- a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution_test.go +++ b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + fill byte + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcdefghi", 3, 'x', []string{"abc", "def", "ghi"}}, + {"TestCase2", "abcdefghij", 3, 'x', []string{"abc", "def", "ghi", "jxx"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k, c.fill) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.inputs, c.k, c.fill) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 47bd365d94a2cdbbd2017babd34621b76fcb9d84 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 23 Jun 2025 09:00:23 +0800 Subject: [PATCH 318/450] Add solution and test-cases for problem 2081 --- .../2081.Sum-of-k-Mirror-Numbers/README.md | 54 ++++++++++++++----- .../2081.Sum-of-k-Mirror-Numbers/Solution.go | 43 ++++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 92 insertions(+), 25 deletions(-) diff --git a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md index c3079388b..353dcaeee 100755 --- a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md +++ b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md @@ -1,28 +1,56 @@ # [2081.Sum of k-Mirror Numbers][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 +A **k-mirror number** is a **positive** integer **without leading zeros** that reads the same both forward and backward in base-10 **as well as** in base-k. + +- For example, `9` is a 2-mirror number. The representation of `9` in base-10 and base-2 are 9 and `1001` respectively, which read the same both forward and backward. +- On the contrary, `4` is not a 2-mirror number. The representation of `4` in base-2 is `100`, which does not read the same both forward and backward. + +Given the base `k` and the number `n`, return the **sum** of the `n` **smallest** k-mirror numbers. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: k = 2, n = 5 +Output: 25 +Explanation: +The 5 smallest 2-mirror numbers and their representations in base-2 are listed as follows: + base-10 base-2 + 1 1 + 3 11 + 5 101 + 7 111 + 9 1001 +Their sum = 1 + 3 + 5 + 7 + 9 = 25. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sum of k-Mirror Numbers -```go ``` +Input: k = 3, n = 7 +Output: 499 +Explanation: +The 7 smallest 3-mirror numbers are and their representations in base-3 are listed as follows: + base-10 base-3 + 1 1 + 2 2 + 4 11 + 8 22 + 121 11111 + 151 12121 + 212 21212 +Their sum = 1 + 2 + 4 + 8 + 121 + 151 + 212 = 499. +``` + +**Example 3:** +``` +Input: k = 7, n = 17 +Output: 20379000 +Explanation: The 17 smallest 7-mirror numbers are: +1, 2, 3, 4, 5, 6, 8, 121, 171, 242, 292, 16561, 65656, 2137312, 4602064, 6597956, 6958596 +``` ## 结语 diff --git a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go index d115ccf5e..5ce6f0ea3 100644 --- a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go +++ b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(k int, n int) int64 { + digit := make([]int, 100) + left, count, ans := 1, 0, int64(0) + for count < n { + right := left * 10 + for op := 0; op < 2; op++ { + // enumerate i' + for i := left; i < right && count < n; i++ { + combined := int64(i) + x := i + if op == 0 { + x = i / 10 + } + for x > 0 { + combined = combined*10 + int64(x%10) + x /= 10 + } + if isPalindrome(combined, k, digit) { + count++ + ans += combined + } + } + } + left = right + } + return ans +} + +func isPalindrome(x int64, k int, digit []int) bool { + length := -1 + for x > 0 { + length++ + digit[length] = int(x % int64(k)) + x /= int64(k) + } + for i, j := 0, length; i < j; i, j = i+1, j-1 { + if digit[i] != digit[j] { + return false + } + } + return true } diff --git a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go index 14ff50eb4..fa6a7875b 100644 --- a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go +++ b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + k, n int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 5, 25}, + {"TestCase2", 3, 7, 499}, + {"TestCase3", 7, 17, 20379000}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.k, c.n) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.k, c.n) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b069561f910ac646140eb6e51014fccb4b887093 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 24 Jun 2025 08:59:46 +0800 Subject: [PATCH 319/450] Add solution and test-cases for problem 2200 --- .../README.md | 34 ++++++++------ .../Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 72 insertions(+), 26 deletions(-) diff --git a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md index 145b4c2ad..6c7aa6afe 100755 --- a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md +++ b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md @@ -1,28 +1,34 @@ # [2200.Find All K-Distant Indices in an Array][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 a **0-indexed** integer array `nums` and two integers `key` and `k`. A **k-distant index** is an index `i` of `nums` for which there exists at least one index `j` such that `|i - j| <= k` and `nums[j] == key`. + +Return a list of all k-distant indices sorted in **increasing order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,4,9,1,3,9,5], key = 9, k = 1 +Output: [1,2,3,4,5,6] +Explanation: Here, nums[2] == key and nums[5] == key. +- For index 0, |0 - 2| > k and |0 - 5| > k, so there is no j where |0 - j| <= k and nums[j] == key. Thus, 0 is not a k-distant index. +- For index 1, |1 - 2| <= k and nums[2] == key, so 1 is a k-distant index. +- For index 2, |2 - 2| <= k and nums[2] == key, so 2 is a k-distant index. +- For index 3, |3 - 2| <= k and nums[2] == key, so 3 is a k-distant index. +- For index 4, |4 - 5| <= k and nums[5] == key, so 4 is a k-distant index. +- For index 5, |5 - 5| <= k and nums[5] == key, so 5 is a k-distant index. +- For index 6, |6 - 5| <= k and nums[5] == key, so 6 is a k-distant index. +Thus, we return [1,2,3,4,5,6] which is sorted in increasing order. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find All K-Distant Indices in an Array -```go ``` - +Input: nums = [2,2,2,2,2], key = 2, k = 2 +Output: [0,1,2,3,4] +Explanation: For all indices i in nums, there exists some index j such that |i - j| <= k and nums[j] == key, so every index is a k-distant index. +Hence, we return [0,1,2,3,4]. +``` ## 结语 diff --git a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go index d115ccf5e..e9f6f314b 100644 --- a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go +++ b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, key int, k int) []int { + l := len(nums) + used := make([]bool, l) + c := 0 + for i := 0; i < l; i++ { + if c > 0 { + used[i] = true + if nums[i] == key { + c = k + } else { + c-- + } + continue + } + if nums[i] == key { + c = k + used[i] = true + } + } + c = 0 + for i := l - 1; i >= 0; i-- { + if c > 0 { + used[i] = true + if nums[i] == key { + c = k + } else { + c-- + } + continue + } + if nums[i] == key { + c = k + used[i] = true + } + } + var ans []int + for i := range used { + if used[i] { + ans = append(ans, i) + } + } + return ans } diff --git a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go index 14ff50eb4..52c280ae3 100644 --- a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go +++ b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + key, k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 4, 9, 1, 3, 9, 5}, 9, 1, []int{1, 2, 3, 4, 5, 6}}, + {"TestCase2", []int{2, 2, 2, 2, 2}, 2, 2, []int{0, 1, 2, 3, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.key, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.nums, c.key, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7746864b9f7d384cd4fe75c6ddba6dcbd9944ae0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 25 Jun 2025 09:14:14 +0800 Subject: [PATCH 320/450] Add solution and test-cases for problem 2040 --- .../README.md | 44 ++++++++++----- .../Solution.go | 54 ++++++++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 93 insertions(+), 25 deletions(-) diff --git a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md index 08c6a8fb2..ca0f4e8b3 100755 --- a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md +++ b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md @@ -1,28 +1,46 @@ # [2040.Kth Smallest Product of Two Sorted Arrays][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 +Given two **sorted 0-indexed** integer arrays `nums1` and `nums2` as well as an integer `k`, return the `kth` **(1-based)** smallest product of `nums1[i] * nums2[j]` where `0 <= i < nums1.length` and `0 <= j < nums2.length`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [2,5], nums2 = [3,4], k = 2 +Output: 8 +Explanation: The 2 smallest products are: +- nums1[0] * nums2[0] = 2 * 3 = 6 +- nums1[0] * nums2[1] = 2 * 4 = 8 +The 2nd smallest product is 8. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Kth Smallest Product of Two Sorted Arrays -```go +``` +Input: nums1 = [-4,-2,0,3], nums2 = [2,4], k = 6 +Output: 0 +Explanation: The 6 smallest products are: +- nums1[0] * nums2[1] = (-4) * 4 = -16 +- nums1[0] * nums2[0] = (-4) * 2 = -8 +- nums1[1] * nums2[1] = (-2) * 4 = -8 +- nums1[1] * nums2[0] = (-2) * 2 = -4 +- nums1[2] * nums2[0] = 0 * 2 = 0 +- nums1[2] * nums2[1] = 0 * 4 = 0 +The 6th smallest product is 0. ``` +**Example 3:** + +``` +Input: nums1 = [-2,-1,0,1,2], nums2 = [-3,-1,2,4,5], k = 3 +Output: -6 +Explanation: The 3 smallest products are: +- nums1[0] * nums2[4] = (-2) * 5 = -10 +- nums1[0] * nums2[3] = (-2) * 4 = -8 +- nums1[4] * nums2[0] = 2 * (-3) = -6 +The 3rd smallest product is -6. +``` ## 结语 diff --git a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go index d115ccf5e..5c8c5421c 100644 --- a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go +++ b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go @@ -1,5 +1,55 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "sort" +) + +func Solution(nums1, nums2 []int, k int64) int64 { + // 保证nums1更短,减少遍历次数 + if len(nums1) > len(nums2) { + return Solution(nums2, nums1, k) + } + + left, right := int64(-1e10), int64(1e10) + for left < right { + mid := left + (right-left)/2 + count := checkNums(mid, nums1, nums2) + if count >= k { + right = mid + } else { + left = mid + 1 + } + } + return left +} + +func checkNums(mid int64, nums1, nums2 []int) int64 { + var ret int64 = 0 + for _, x := range nums1 { + if x == 0 { + if mid >= 0 { + ret += int64(len(nums2)) + } + // 如果mid<0,乘积都>=0,不计入 + } else if x > 0 { + // 计算上界:mid / x + yy := int64(math.Floor(float64(mid) / float64(x))) + // upper_bound + idx := sort.Search(len(nums2), func(i int) bool { + return int64(nums2[i]) > yy + }) + ret += int64(idx) + } else { + // x < 0 + // 计算下界:ceil(mid / x) + yy := int64(math.Ceil(float64(mid) / float64(x))) + // lower_bound + idx := sort.Search(len(nums2), func(i int) bool { + return int64(nums2[i]) >= yy + }) + ret += int64(len(nums2) - idx) + } + } + return ret } diff --git a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution_test.go b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution_test.go index 14ff50eb4..80c862416 100644 --- a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution_test.go +++ b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n1, n2 []int + k int64 + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 5}, []int{3, 4}, 2, 8}, + {"TestCase2", []int{-2, -1, 0, 1, 2}, []int{-3, -1, 2, 4, 5}, 3, -6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n1, c.n2, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n1, c.n2, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d2137d41ec9bb29fe3a089cf6c817db2dcdb9620 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 27 Jun 2025 09:28:43 +0800 Subject: [PATCH 321/450] Add solution and test-cases for problem 2014 --- .../1.png | Bin 0 -> 5286 bytes .../README.md | 43 +++++++++----- .../Solution.go | 53 +++++++++++++++++- .../Solution_test.go | 21 +++---- 4 files changed, 91 insertions(+), 26 deletions(-) create mode 100644 leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/1.png diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/1.png b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/1.png new file mode 100644 index 0000000000000000000000000000000000000000..a68e49478a01a9cf5a2b9a9ca40d036ba6a1b98c GIT binary patch literal 5286 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 literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md index 8a2489525..a60e5c3ac 100755 --- a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md @@ -1,28 +1,43 @@ # [2014.Longest Subsequence Repeated k Times][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 -**Example 1:** +You are given a string `s` of length `n`, and an integer `k`. You are tasked to find the **longest subsequence repeated** `k` times in string `s`. + +A **subsequence** is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters. + +A subsequence `seq` is **repeated** `k` times in the string `s` if `seq * k` is a subsequence of `s`, where `seq * k` represents a string constructed by concatenating `seq k` times. + +- For example, `"bba"` is repeated `2` times in the string `"bababcba"`, because the string `"bbabba"`, constructed by concatenating `"bba"` `2` times, is a subsequence of the string `"bababcba"`. + +Return the **longest subsequence repeated** `k` times in string `s`. If multiple such subsequences are found, return the **lexicographicall6 largest** one. If there is no such subsequence, return an **empty** string. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "letsleetcode", k = 2 +Output: "let" +Explanation: There are two longest subsequences repeated 2 times: "let" and "ete". +"let" is the lexicographically largest one. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Subsequence Repeated k Times -```go +``` +Input: s = "bb", k = 2 +Output: "b" +Explanation: The longest subsequence repeated 2 times is "b". ``` +**Example 3:** + +``` +Input: s = "ab", k = 2 +Output: "" +Explanation: There is no subsequence repeated 2 times. Empty string is returned. +``` ## 结语 diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go index d115ccf5e..651c40f0c 100644 --- a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) string { + count := [26]int{} + for _, b := range s { + count[b-'a']++ + } + var greaterK []string + for i := 25; i >= 0; i-- { + if count[i] >= k { + greaterK = append(greaterK, string('a'+byte(i))) + } + } + + var match func(string) bool + match = func(pattern string) bool { + i, c := 0, 0 + for j := 0; j < len(s); j++ { + if s[j] == pattern[i] { + i++ + if i == len(pattern) { + c++ + i = 0 + if c >= k { + return true + } + } + } + } + return false + } + + loop := make([]string, len(greaterK)) + copy(loop, greaterK) + // z, y, x, 我们应该需要判断 z ok (zz) ok , zzz(ok) / 以及 zx, zy ... + var ans string + for len(loop) > 0 { + cur := loop[0] + loop = loop[1:] + if len(cur) > len(ans) { + ans = cur + } + // 开始做组合 + for _, p := range greaterK { + pattern := cur + p + if match(pattern) { + // 这个匹配后,我们需要判断是否还可以继续与其他的z,y x这种组合 + loop = append(loop, pattern) + } + } + } + + return ans } diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go index 14ff50eb4..11c3f87af 100644 --- a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "letsleetcode", 2, "let"}, + {"TestCase2", "bb", 2, "b"}, + {"TestCase3", "ab", 2, ""}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 95ed7dc30d6037e44d5acb4a80bcd13ace0c6609 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 28 Jun 2025 17:49:28 +0800 Subject: [PATCH 322/450] Add solution and test-cases for problem 848 --- .../801-900/0848.Shifting-Letters/README.md | 33 +++++++++++-------- .../801-900/0848.Shifting-Letters/Solution.go | 11 +++++-- .../0848.Shifting-Letters/Solution_test.go | 16 ++++----- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/leetcode/801-900/0848.Shifting-Letters/README.md b/leetcode/801-900/0848.Shifting-Letters/README.md index 8f33b5713..8a9a71ed6 100644 --- a/leetcode/801-900/0848.Shifting-Letters/README.md +++ b/leetcode/801-900/0848.Shifting-Letters/README.md @@ -1,28 +1,33 @@ # [848.Shifting Letters][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 a string `s` of lowercase English letters and an integer array `shifts` of the same length. + +Call the `shift()` of a letter, the next letter in the alphabet, (wrapping around so that `'z'` becomes `'a'`). + +- For example, `shift('a') = 'b'`, `shift('t') = 'u'`, and `shift('z') = 'a'`. + +Now for each `shifts[i] = x`, we want to shift the first `i + 1` letters of `s`, x times. + +Return the final string after all such shifts to s are applied. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abc", shifts = [3,5,9] +Output: "rpl" +Explanation: We start with "abc". +After shifting the first 1 letters of s by 3, we have "dbc". +After shifting the first 2 letters of s by 5, we have "igc". +After shifting the first 3 letters of s by 9, we have "rpl", the answer. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Shifting Letters -```go ``` - +Input: s = "aaa", shifts = [1,2,3] +Output: "gfd" +``` ## 结语 diff --git a/leetcode/801-900/0848.Shifting-Letters/Solution.go b/leetcode/801-900/0848.Shifting-Letters/Solution.go index d115ccf5e..299e5b84f 100644 --- a/leetcode/801-900/0848.Shifting-Letters/Solution.go +++ b/leetcode/801-900/0848.Shifting-Letters/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, shifts []int) string { + ans := []byte(s) + sum := 0 + for i := len(s) - 1; i >= 0; i-- { + sum += shifts[i] + now := (int(ans[i]-'a') + sum) % 26 + ans[i] = byte(now) + 'a' + } + return string(ans) } diff --git a/leetcode/801-900/0848.Shifting-Letters/Solution_test.go b/leetcode/801-900/0848.Shifting-Letters/Solution_test.go index 14ff50eb4..539a3bb04 100644 --- a/leetcode/801-900/0848.Shifting-Letters/Solution_test.go +++ b/leetcode/801-900/0848.Shifting-Letters/Solution_test.go @@ -10,18 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + shifts []int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abc", []int{3, 5, 9}, "rpl"}, + {"TestCase2", "aaa", []int{1, 2, 3}, "gfd"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.shifts) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 433ecd6dd1b10231c129394546c9ba83836b4a21 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 29 Jun 2025 15:25:44 +0800 Subject: [PATCH 323/450] Add solution and test-cases for problem 966 --- .../0966.Vowel-Spellchecker/README.md | 45 +++++++++---- .../0966.Vowel-Spellchecker/Solution.go | 64 ++++++++++++++++++- .../0966.Vowel-Spellchecker/Solution_test.go | 21 +++--- 3 files changed, 103 insertions(+), 27 deletions(-) diff --git a/leetcode/901-1000/0966.Vowel-Spellchecker/README.md b/leetcode/901-1000/0966.Vowel-Spellchecker/README.md index c0b187ac5..74169cb3d 100644 --- a/leetcode/901-1000/0966.Vowel-Spellchecker/README.md +++ b/leetcode/901-1000/0966.Vowel-Spellchecker/README.md @@ -1,28 +1,45 @@ # [966.Vowel Spellchecker][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 +Given a `wordlist`, we want to implement a spellchecker that converts a query word into a correct word. + +For a given `quer` word, the spell checker handles two categories of spelling mistakes: + +- Capitalization: If the query matches a word in the wordlist (**case-insensitive**), then the query word is returned with the same case as the case in the wordlist. + + - Example: `wordlist = ["yellow"]`, `query = "YellOw"`: `correct = "yellow"` + - Example: `wordlist = ["Yellow"]`, `query = "yellow"`: `correct = "Yellow"` + - Example: `wordlist = ["yellow"]`, `query = "yellow"`: `correct = "yellow"` + +- Vowel Errors: If after replacing the vowels `('a', 'e', 'i', 'o', 'u')` of the query word with any vowel individually, it matches a word in the wordlist (**case-insensitive**), then the query word is returned with the same case as the match in the wordlist. + + - Example: `wordlist = ["YellOw"]`, `query = "yollow"`: `correct = "YellOw"` + - Example: `wordlist = ["YellOw"]`, `query = "yeellow"`: `correct = ""` (no match) + - Example: `wordlist = ["YellOw"]`, `query = "yllw"`: `correct = ""` (no match) + +In addition, the spell checker operates under the following precedence rules: + +- When the query exactly matches a word in the wordlist (**case-sensitive**), you should return the same word back. +- When the query matches a word up to capitlization, you should return the first such match in the wordlist. +- When the query matches a word up to vowel errors, you should return the first such match in the wordlist. +- If the query has no matches in the wordlist, you should return the empty string. + +Given some `queries`, return a list of words `answer`, where `answer[i]` is the correct word for `query = queries[i]`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: wordlist = ["KiTe","kite","hare","Hare"], queries = ["kite","Kite","KiTe","Hare","HARE","Hear","hear","keti","keet","keto"] +Output: ["kite","KiTe","KiTe","Hare","hare","","","KiTe","","KiTe"] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Vowel Spellchecker -```go ``` - +Input: wordlist = ["yellow"], queries = ["YellOw"] +Output: ["yellow"] +``` ## 结语 diff --git a/leetcode/901-1000/0966.Vowel-Spellchecker/Solution.go b/leetcode/901-1000/0966.Vowel-Spellchecker/Solution.go index d115ccf5e..823331568 100644 --- a/leetcode/901-1000/0966.Vowel-Spellchecker/Solution.go +++ b/leetcode/901-1000/0966.Vowel-Spellchecker/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "strings" +) + +func isVowel(b byte) bool { + return b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' || + b == 'A' || b == 'E' || b == 'I' || b == 'O' || b == 'U' +} + +// babee = b1b2 +func toVowel(word string) string { + buf := strings.Builder{} + c := 0 + for _, b := range []byte(word) { + if !isVowel(b) { + buf.WriteByte(b) + continue + } + buf.WriteString(fmt.Sprintf("%d", c)) + c = 0 + } + if c > 0 { + buf.WriteString(fmt.Sprintf("%d", c)) + } + + return buf.String() +} + +func Solution(wordlist []string, queries []string) []string { + m := make(map[string]struct{}) + lower := make(map[string]string) + matched := make(map[string]string) + for _, word := range wordlist { + m[word] = struct{}{} + l := strings.ToLower(word) + if _, ok := lower[l]; !ok { + lower[l] = word + } + match := toVowel(l) + if _, ok := matched[match]; !ok { + matched[match] = word + } + } + ans := make([]string, len(queries)) + for i, q := range queries { + if _, ok := m[q]; ok { + ans[i] = q + continue + } + lq := strings.ToLower(q) + + if v, ok := lower[lq]; ok { + ans[i] = v + continue + } + if v, ok := matched[toVowel(lq)]; ok { + ans[i] = v + continue + } + } + return ans } diff --git a/leetcode/901-1000/0966.Vowel-Spellchecker/Solution_test.go b/leetcode/901-1000/0966.Vowel-Spellchecker/Solution_test.go index 14ff50eb4..498767501 100644 --- a/leetcode/901-1000/0966.Vowel-Spellchecker/Solution_test.go +++ b/leetcode/901-1000/0966.Vowel-Spellchecker/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + wordlist, queries []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"KiTe", "kite", "hare", "Hare"}, []string{"kite", "Kite", "KiTe", "Hare", "HARE", "Hear", "hear", "keti", "keet", "keto"}, []string{"kite", "KiTe", "KiTe", "Hare", "hare", "", "", "KiTe", "", "KiTe"}}, + {"TestCase2", []string{"yellow"}, []string{"YellOw"}, []string{"yellow"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.wordlist, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.wordlist, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 50ce32578db490622378bb154ab35621a30e2f16 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 1 Jul 2025 08:55:27 +0800 Subject: [PATCH 324/450] Add solution and test-cases for problem 3330 --- .../README.md | 42 +++++++++++++------ .../Solution.go | 21 +++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 56 insertions(+), 21 deletions(-) diff --git a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md index 21f9634dc..e7c64bef1 100755 --- a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md +++ b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md @@ -1,28 +1,46 @@ # [3330.Find the Original Typed String I][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 +Alice is attempting to type a specific string on her computer. However, she tends to be clumsy and **may** press a key for too long, resulting in a character being typed **multiple** times. + +Although Alice tried to focus on her typing, she is aware that she may still have done this **at most** once. + +You are given a string `word`, which represents the **final** output displayed on Alice's screen. + +Return the total number of possible original strings that Alice might have intended to type. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word = "abbcccc" + +Output: 5 + +Explanation: + +The possible strings are: "abbcccc", "abbccc", "abbcc", "abbc", and "abcccc". ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: word = "abcd" + +Output: 1 -### 思路1 -> ... -Find the Original Typed String I -```go +Explanation: + +The only possible string is "abcd". ``` +**Example 3:** + +``` +Input: word = "aaaa" + +Output: 4 +``` ## 结语 diff --git a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go index d115ccf5e..bb7bb584e 100644 --- a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go +++ b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(word string) int { + ans := 1 + c := 0 + pre := byte(' ') + for _, b := range []byte(word) { + if b == pre { + c++ + continue + } + if c > 1 { + ans += c - 1 + } + c = 1 + pre = b + } + if c > 1 { + ans += c - 1 + } + return ans } diff --git a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go index 14ff50eb4..42026b422 100644 --- a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go +++ b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abbcccc", 5}, + {"TestCase2", "abcd", 1}, + {"TestCase3", "aaaa", 4}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 027d10d4262c2bda49d41a1e68cbe384aa68a25a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 2 Jul 2025 08:57:09 +0800 Subject: [PATCH 325/450] Add solution and test-cases for problem 3333 --- .../README.md | 41 ++++++++++----- .../Solution.go | 52 ++++++++++++++++++- .../Solution_test.go | 21 ++++---- 3 files changed, 90 insertions(+), 24 deletions(-) diff --git a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md index bf77b439d..bb4c72aab 100755 --- a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md +++ b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md @@ -1,28 +1,45 @@ # [3333.Find the Original Typed String II][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 +Alice is attempting to type a specific string on her computer. However, she tends to be clumsy and **may** press a key for too long, resulting in a character being typed **multiple** times. + +You are given a string `word`, which represents the **final** output displayed on Alice's screen. You are also given a **positive** integer `k`. + +Return the total number of possible original strings that Alice might have intended to type, if she was trying to type a string of size **at least** `k`. + +Since the answer may be very large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word = "aabbccdd", k = 7 + +Output: 5 + +Explanation: + +The possible strings are: "aabbccdd", "aabbccd", "aabbcdd", "aabccdd", and "abbccdd". +``` + +**Example 2:** + ``` +Input: word = "aabbccdd", k = 8 -## 题意 -> ... +Output: 1 -## 题解 +Explanation: -### 思路1 -> ... -Find the Original Typed String II -```go +The only possible string is "aabbccdd". ``` +**Example 3:** + +``` +Input: word = "aaabbb", k = 3 + +Output: 8 +``` ## 结语 diff --git a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go index d115ccf5e..e3a7c995d 100644 --- a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go +++ b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go @@ -1,5 +1,53 @@ package Solution -func Solution(x bool) bool { - return x +const mod = 1000000007 + +func Solution(word string, k int) int { + n := len(word) + cnt := 1 + var freq []int + + for i := 1; i < n; i++ { + if word[i] == word[i-1] { + cnt++ + } else { + freq = append(freq, cnt) + cnt = 1 + } + } + freq = append(freq, cnt) + + ans := 1 + for _, o := range freq { + ans = ans * o % mod + } + + if len(freq) >= k { + return ans + } + + f := make([]int, k) + g := make([]int, k) + f[0] = 1 + for i := range g { + g[i] = 1 + } + + for i := 0; i < len(freq); i++ { + f_new := make([]int, k) + for j := 1; j < k; j++ { + f_new[j] = g[j-1] + if j-freq[i]-1 >= 0 { + f_new[j] = (f_new[j] - g[j-freq[i]-1] + mod) % mod + } + } + g_new := make([]int, k) + g_new[0] = f_new[0] + for j := 1; j < k; j++ { + g_new[j] = (g_new[j-1] + f_new[j]) % mod + } + f, g = f_new, g_new + } + + return (ans - g[k-1] + mod) % mod } diff --git a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go index 14ff50eb4..b56c58ed9 100644 --- a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go +++ b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aabbccdd", 7, 5}, + {"TestCase2", "aabbccdd", 8, 1}, + {"TestCase3", "aaabbb", 3, 8}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7d9cae57ccb5491645550c608cb85374eec5a5b1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 3 Jul 2025 09:01:01 +0800 Subject: [PATCH 326/450] Add solution and test-cases for problem 3304 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 12 +++++- .../Solution_test.go | 13 +++--- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md index be2a86e6e..8f5c4ac7c 100755 --- a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md +++ b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md @@ -1,28 +1,43 @@ # [3304.Find the K-th Character in String Game I][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 +Alice and Bob are playing a game. Initially, Alice has a string `word = "a"`. + +You are given a **positive** integer `k`. + +Now Bob will ask Alice to perform the following operation **forever**: + +- Generate a new string by **changing** each character in `word` to its **next** character in the English alphabet, and **append** it to the original `word`. + +For example, performing the operation on `"c"` generates `"cd"` and performing the operation on `"zb"` generates `"zbac"`. + +Return the value of the `kth` character in `word`, after enough operations have been done for `word` to have **at least** `k` characters. + +**Note** that the character `'z'` can be changed to `'a'` in the operation. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: k = 5 + +Output: "b" + +Explanation: -## 题意 -> ... +Initially, word = "a". We need to do the operation three times: -## 题解 +Generated string is "b", word becomes "ab". +Generated string is "bc", word becomes "abbc". +Generated string is "bccd", word becomes "abbcbccd". +``` + +**Example 2:** -### 思路1 -> ... -Find the K-th Character in String Game I -```go ``` +Input: k = 10 +Output: "c" +``` ## 结语 diff --git a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go index d115ccf5e..d5aff5e5b 100644 --- a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go +++ b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(k int) byte { + str := "a" + for len(str) < k { + tmp := []byte(str) + for i := range tmp { + tmp[i] = (tmp[i]-'a'+1)%26 + 'a' + } + str += string(tmp) + } + return str[k-1] } diff --git a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go index 14ff50eb4..2ef09f12a 100644 --- a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go +++ b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect byte }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, 'b'}, + {"TestCase2", 10, 'c'}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 309a77f18e65080f2fa59d401944236c5a992cb6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 4 Jul 2025 09:00:34 +0800 Subject: [PATCH 327/450] Add solution and test-cases for problem 3307 --- .../README.md | 49 ++++++++++++++----- .../Solution.go | 17 ++++++- .../Solution_test.go | 22 ++++----- 3 files changed, 62 insertions(+), 26 deletions(-) diff --git a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md index 338708360..fc26da463 100755 --- a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md +++ b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md @@ -1,28 +1,51 @@ # [3307.Find the K-th Character in String Game II][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 +Alice and Bob are playing a game. Initially, Alice has a string `word = "a"`. + +You are given a **positive** integer k. You are also given an integer array `operations`, where `operations[i]` represents the **type** of the `ith` operation. + +Now Bob will ask Alice to perform **all** operations in sequence: + +- If `operations[i] == 0`, **append** a copy of `word` to itself. +- If `operations[i] == 1`, generate a new string by **changing** each character in `word` to its **next** character in the English alphabet, and **append** it to the original `word`. For example, performing the operation on `"c"` generates `"cd"` and performing the operation on `"zb"` generates `"zbac"`. + +Return the value of the `kth` character in `word` after performing all the operations. + +**Note** that the character `'z'` can be changed to `'a'` in the second type of operation. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: k = 5, operations = [0,0,0] + +Output: "a" -## 题意 -> ... +Explanation: -## 题解 +Initially, word == "a". Alice performs the three operations as follows: -### 思路1 -> ... -Find the K-th Character in String Game II -```go +Appends "a" to "a", word becomes "aa". +Appends "aa" to "aa", word becomes "aaaa". +Appends "aaaa" to "aaaa", word becomes "aaaaaaaa". ``` +**Example 2:** + +``` +Input: k = 10, operations = [0,1,0,1] + +Output: "b" + +Explanation: + +Initially, word == "a". Alice performs the four operations as follows: + +Appends "a" to "a", word becomes "aa". +Appends "bb" to "aa", word becomes "aabb". +Appends "aabb" to "aabb", word becomes "aabbaabb". +Appends "bbccbbcc" to "aabbaabb", word becomes "aabbaabbbbccbbcc". +``` ## 结语 diff --git a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go index d115ccf5e..a81c445fd 100644 --- a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go +++ b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +import "math/bits" + +func Solution(k int64, operations []int) byte { + ans := 0 + for k != 1 { + t := bits.Len64(uint64(k)) - 1 + if (1 << t) == k { + t-- + } + k -= (1 << t) + if operations[t] != 0 { + ans++ + } + } + return byte('a' + (ans % 26)) } diff --git a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go index 14ff50eb4..b82bc1986 100644 --- a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go +++ b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + k int64 + operations []int + expect byte }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, []int{0, 0, 0}, 'a'}, + {"TestCase2", 10, []int{0, 1, 0, 1}, 'b'}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.k, c.operations) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.k, c.operations) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b01aa68430bd5f54bc37177e2f2144e27c206a41 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 5 Jul 2025 09:16:41 +0800 Subject: [PATCH 328/450] Add solution and test-cases for problem 1306 --- .../1301-1400/1306.Jump-Game-III/README.md | 36 ++++++++++++------- .../1301-1400/1306.Jump-Game-III/Solution.go | 25 +++++++++++-- .../1306.Jump-Game-III/Solution_test.go | 19 +++++----- 3 files changed, 56 insertions(+), 24 deletions(-) diff --git a/leetcode/1301-1400/1306.Jump-Game-III/README.md b/leetcode/1301-1400/1306.Jump-Game-III/README.md index 190382a89..850a1c2b0 100644 --- a/leetcode/1301-1400/1306.Jump-Game-III/README.md +++ b/leetcode/1301-1400/1306.Jump-Game-III/README.md @@ -1,28 +1,38 @@ # [1306.Jump Game III][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 +Given an array of non-negative integers `arr`, you are initially positioned at `start` index of the array. When you are at index `i`, you can jump to `i + arr[i]` or `i - arr[i]`, check if you can reach **any** index with value 0. + +Notice that you can not jump outside of the array at any time. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [4,2,3,0,3,1,2], start = 5 +Output: true +Explanation: +All possible ways to reach at index 3 with value 0 are: +index 5 -> index 4 -> index 1 -> index 3 +index 5 -> index 6 -> index 4 -> index 1 -> index 3 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Jump Game III -```go +``` +Input: arr = [4,2,3,0,3,1,2], start = 0 +Output: true +Explanation: +One possible way to reach at index 3 with value 0 is: +index 0 -> index 4 -> index 1 -> index 3 ``` +**Example 3:** + +``` +Input: arr = [3,0,2,1,2], start = 2 +Output: false +Explanation: There is no way to reach at index 1 with value 0. +``` ## 结语 diff --git a/leetcode/1301-1400/1306.Jump-Game-III/Solution.go b/leetcode/1301-1400/1306.Jump-Game-III/Solution.go index d115ccf5e..f2fd91a59 100644 --- a/leetcode/1301-1400/1306.Jump-Game-III/Solution.go +++ b/leetcode/1301-1400/1306.Jump-Game-III/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, start int) bool { + l := len(arr) + used := make([]bool, l) + used[start] = true + queue := []int{start} + for len(queue) > 0 { + nq := make([]int, 0) + for _, q := range queue { + if arr[q] == 0 { + return true + } + if left := q - arr[q]; left >= 0 && !used[left] { + nq = append(nq, left) + used[left] = true + } + if right := q + arr[q]; right < l && !used[right] { + nq = append(nq, right) + used[right] = true + } + } + queue = nq + } + return false } diff --git a/leetcode/1301-1400/1306.Jump-Game-III/Solution_test.go b/leetcode/1301-1400/1306.Jump-Game-III/Solution_test.go index 14ff50eb4..555e5a309 100644 --- a/leetcode/1301-1400/1306.Jump-Game-III/Solution_test.go +++ b/leetcode/1301-1400/1306.Jump-Game-III/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int + start int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 2, 3, 0, 3, 1, 2}, 5, true}, + {"TestCase2", []int{4, 2, 3, 0, 3, 1, 2}, 0, true}, + {"TestCase3", []int{3, 0, 2, 1, 2}, 2, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.start) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.start) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5838e8567f7b2d5eeb54eda52099841d58ea34ac Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 6 Jul 2025 16:58:16 +0800 Subject: [PATCH 329/450] Add solution and test-cases for problem 1865 --- .../README.md | 40 +++++++------ .../Solution.go | 57 ++++++++++++++++++- .../Solution_test.go | 43 ++++++++++---- 3 files changed, 111 insertions(+), 29 deletions(-) diff --git a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md index 17f3b3006..c0a9548e1 100755 --- a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md +++ b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md @@ -1,28 +1,36 @@ # [1865.Finding Pairs With a Certain Sum][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 two integer arrays `nums1` and `nums2`. You are tasked to implement a data structure that supports queries of two types: -**Example 1:** +1. **Add** a positive integer to an element of a given index in the array `nums2`. +2. **Count** the number of pairs `(i, j)` such that `nums1[i] + nums2[j]` equals a given value (`0 <= i < nums1.length` and `0 <= j < nums2.length`). -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `FindSumPairs` class: -## 题意 -> ... +- `FindSumPairs(int[] nums1, int[] nums2)` Initializes the `FindSumPairs` object with two integer arrays `nums1` and `nums2`. +- `void add(int index, int val)` Adds `val` to `nums2[index]`, i.e., apply `nums2[index] += val`. +- `int count(int tot)` Returns the number of pairs `(i, j)` such that `nums1[i] + nums2[j] == tot`. -## 题解 +**Example 1:** -### 思路1 -> ... -Finding Pairs With a Certain Sum -```go ``` - +Input +["FindSumPairs", "count", "add", "count", "count", "add", "add", "count"] +[[[1, 1, 2, 2, 2, 3], [1, 4, 5, 2, 5, 4]], [7], [3, 2], [8], [4], [0, 1], [1, 1], [7]] +Output +[null, 8, null, 2, 1, null, null, 11] + +Explanation +FindSumPairs findSumPairs = new FindSumPairs([1, 1, 2, 2, 2, 3], [1, 4, 5, 2, 5, 4]); +findSumPairs.count(7); // return 8; pairs (2,2), (3,2), (4,2), (2,4), (3,4), (4,4) make 2 + 5 and pairs (5,1), (5,5) make 3 + 4 +findSumPairs.add(3, 2); // now nums2 = [1,4,5,4,5,4] +findSumPairs.count(8); // return 2; pairs (5,2), (5,4) make 3 + 5 +findSumPairs.count(4); // return 1; pair (5,0) makes 3 + 1 +findSumPairs.add(0, 1); // now nums2 = [2,4,5,4,5,4] +findSumPairs.add(1, 1); // now nums2 = [2,5,5,4,5,4] +findSumPairs.count(7); // return 11; pairs (2,1), (2,2), (2,4), (3,1), (3,2), (3,4), (4,1), (4,2), (4,4) make 2 + 5 and pairs (5,3), (5,5) make 3 + 4 +``` ## 结语 diff --git a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go index d115ccf5e..173e612fb 100644 --- a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go +++ b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go @@ -1,5 +1,58 @@ package Solution -func Solution(x bool) bool { - return x +type FindSumPairs struct { + c1, c2 map[int]int + n2 []int +} + +func Constructor(nums1 []int, nums2 []int) FindSumPairs { + f := FindSumPairs{ + c1: map[int]int{}, c2: map[int]int{}, n2: nums2, + } + for _, n := range nums1 { + f.c1[n]++ + } + for _, n := range nums2 { + f.c2[n]++ + } + return f +} + +func (this *FindSumPairs) Add(index int, val int) { + source := this.n2[index] + this.n2[index] += val + this.c2[source]-- + if this.c2[source] == 0 { + delete(this.c2, source) + } + this.c2[this.n2[index]]++ +} + +func (this *FindSumPairs) Count(tot int) int { + ans := 0 + for k, c := range this.c1 { + if c1, ok := this.c2[tot-k]; ok { + ans += c * c1 + } + } + return ans +} + +type op struct { + name byte + a, b int +} + +func Solution(nums1, nums2 []int, ops []op) []int { + var ans []int + c := Constructor(nums1, nums2) + for _, o := range ops { + if o.name == 'a' { + c.Add(o.a, o.b) + continue + } + ans = append(ans, c.Count(o.a)) + } + return ans + } diff --git a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution_test.go b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution_test.go index 14ff50eb4..6eceeec53 100644 --- a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution_test.go +++ b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution_test.go @@ -9,31 +9,52 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums1, nums2 []int + ops []op + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 2, 2, 2, 3}, []int{1, 4, 5, 2, 5, 4}, []op{ + { + name: 'c', a: 7, + }, + { + name: 'a', a: 3, b: 2, + }, + { + name: 'c', a: 8, + }, + { + name: 'c', a: 4, + }, + { + name: 'a', a: 0, b: 1, + }, + { + name: 'a', a: 1, b: 1, + }, + { + name: 'c', a: 7, + }, + }, []int{8, 2, 1, 11}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums1, c.nums2, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.nums1, c.nums2, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b3d60cc2f8befabed843b61a70548bdaa96a6dbd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 7 Jul 2025 09:28:50 +0800 Subject: [PATCH 330/450] 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() { } From d6c290eb2cd7a86035c9c69eb0f2b4d76d7a40f4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 8 Jul 2025 09:17:48 +0800 Subject: [PATCH 331/450] Add solution and test-cases for problem 1860 --- .../1860.Incremental-Memory-Leak/README.md | 36 +++++++++++-------- .../1860.Incremental-Memory-Leak/Solution.go | 13 +++++-- .../Solution_test.go | 21 ++++++----- 3 files changed, 43 insertions(+), 27 deletions(-) diff --git a/leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md b/leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md index 23e6e0294..9ae2bf43e 100755 --- a/leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md +++ b/leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md @@ -1,28 +1,36 @@ # [1860.Incremental Memory Leak][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 two integers `memory1` and `mmeory2` representing the available memory in bits on two memory sticks. There is currently a faulty program running that consumes an increasing amount of memory every second. + +At the `ith` second (starting from 1), `i` bits of memory are allocated to the stick with **more available memory** (or from the first memory stick if both have the same available memory). If neither stick has at least `i` bits of available memory, the program **crashes**. + +Return an array containing `[crashTime, memory1crash, memory2crash]`, where crashTime is the time (in seconds) when the program crashed and `memory1crash` and `memory2crash` are the available bits of memory in the first and second sticks respectively. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: memory1 = 2, memory2 = 2 +Output: [3,1,0] +Explanation: The memory is allocated as follows: +- At the 1st second, 1 bit of memory is allocated to stick 1. The first stick now has 1 bit of available memory. +- At the 2nd second, 2 bits of memory are allocated to stick 2. The second stick now has 0 bits of available memory. +- At the 3rd second, the program crashes. The sticks have 1 and 0 bits available respectively. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Incremental Memory Leak -```go ``` - +Input: memory1 = 8, memory2 = 11 +Output: [6,0,4] +Explanation: The memory is allocated as follows: +- At the 1st second, 1 bit of memory is allocated to stick 2. The second stick now has 10 bit of available memory. +- At the 2nd second, 2 bits of memory are allocated to stick 2. The second stick now has 8 bits of available memory. +- At the 3rd second, 3 bits of memory are allocated to stick 1. The first stick now has 5 bits of available memory. +- At the 4th second, 4 bits of memory are allocated to stick 2. The second stick now has 4 bits of available memory. +- At the 5th second, 5 bits of memory are allocated to stick 1. The first stick now has 0 bits of available memory. +- At the 6th second, the program crashes. The sticks have 0 and 4 bits available respectively. +``` ## 结语 diff --git a/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go index d115ccf5e..643d2127b 100644 --- a/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go +++ b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(memory1 int, memory2 int) []int { + ans := []int{1, memory1, memory2} + for ans[0] <= ans[1] || ans[0] <= ans[2] { + if ans[1] >= ans[2] { + ans[1] -= ans[0] + } else { + ans[2] -= ans[0] + } + ans[0]++ + } + return ans } diff --git a/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go index 14ff50eb4..96d9b6d98 100644 --- a/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go +++ b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + memory1, memory2 int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 2, []int{3, 1, 0}}, + {"TestCase2", 8, 11, []int{6, 0, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.memory1, c.memory2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.memory1, c.memory2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 89de3c652199f6295f6fca9a49b014588feefc2d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 9 Jul 2025 09:05:06 +0800 Subject: [PATCH 332/450] Add solution and test-cases for problem 3439 --- .../1.png | Bin 0 -> 9942 bytes .../2.png | Bin 0 -> 13568 bytes .../README.md | 55 +++++++++++++----- .../Solution.go | 25 +++++++- .../Solution_test.go | 23 ++++---- 5 files changed, 77 insertions(+), 26 deletions(-) create mode 100644 leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/1.png create mode 100644 leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/2.png diff --git a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/1.png b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/1.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf27c6b37cb9b7d2abc215a3cee06c1c6e7c376 GIT binary patch literal 9942 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 literal 0 HcmV?d00001 diff --git a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/2.png b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c533bdde39fb6305de6291c63230454338390ac6 GIT binary patch literal 13568 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 Zq^ [!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 integer `eventTime` denoting the duration of an event, where the event occurs from time `t = 0` to time `t = eventTime`. + +You are also given two integer arrays `startTime` and `endTime`, each of length `n`. These represent the start and end time of `n` **non-overlapping** meetings, where the `ith` meeting occurs during the time `[startTime[i], endTime[i]]`. + +You can reschedule **at most** `k` meetings by moving their start time while maintaining the **same duration**, to **maximize** the **longest** continuous period of free time during the event. + +The **relative** order of all the meetings should stay the same and they should remain non-overlapping. + +Return the **maximum** amount of free time possible after rearranging the meetings. + +**Note** that the meetings can **not** be rescheduled to a time outside the event. + +**Example 1:** + +![1](./1.png) + +``` +Input: eventTime = 5, k = 1, startTime = [1,3], endTime = [2,5] -**Example 1:** +Output: 2 +Explanation: + +Reschedule the meeting at [1, 2] to [2, 3], leaving no meetings during the time [0, 2]. ``` -Input: a = "11", b = "1" -Output: "100" + +**Example 2:** + +![2](./2.png) + ``` +Input: eventTime = 10, k = 1, startTime = [0,2,9], endTime = [1,4,10] + +Output: 6 -## 题意 -> ... +Explanation: -## 题解 +Reschedule the meeting at [2, 4] to [1, 3], leaving no meetings during the time [3, 9]. +``` + +**Example 3:** -### 思路1 -> ... -Reschedule Meetings for Maximum Free Time I -```go ``` +Input: eventTime = 5, k = 2, startTime = [0,1,2,3,4], endTime = [1,2,3,4,5] + +Output: 0 +Explanation: + +There is no time during the event not occupied by meetings +``` ## 结语 diff --git a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go index d115ccf5e..a4c2deeaf 100644 --- a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go +++ b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(eventTime int, k int, startTime []int, endTime []int) int { + n := len(startTime) + res := 0 + sum := make([]int, n+1) + for i := 0; i < n; i++ { + sum[i+1] = sum[i] + endTime[i] - startTime[i] + } + for i := k - 1; i < n; i++ { + var right int + if i == n-1 { + right = eventTime + } else { + right = startTime[i+1] + } + var left int + if i == k-1 { + left = 0 + } else { + left = endTime[i-k] + } + res = max(res, right-left-(sum[i+1]-sum[i-k+1])) + } + return res } diff --git a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go index 14ff50eb4..74ef19c3c 100644 --- a/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go +++ b/leetcode/3401-3500/3439.Reschedule-Meetings-for-Maximum-Free-Time-I/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + eventTime, k int + startTime, endTime []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, 1, []int{1, 3}, []int{2, 5}, 2}, + {"TestCase2", 10, 1, []int{0, 2, 9}, []int{1, 4, 10}, 6}, + {"TestCase3", 5, 2, []int{0, 1, 2, 3, 4}, []int{1, 2, 3, 4, 5}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.eventTime, c.k, c.startTime, c.endTime) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.eventTime, c.k, c.startTime, c.endTime) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 060d7756eb7cfe36d0c63e702297348735cdd4f7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 10 Jul 2025 09:06:05 +0800 Subject: [PATCH 333/450] Add solution and test-cases for problem 3440 --- .../1.png | Bin 0 -> 9942 bytes .../2.png | Bin 0 -> 13600 bytes .../3.png | Bin 0 -> 14209 bytes .../README.md | 69 ++++++++++++++---- .../Solution.go | 43 ++++++++++- .../Solution_test.go | 23 +++--- 6 files changed, 109 insertions(+), 26 deletions(-) create mode 100644 leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/1.png create mode 100644 leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/2.png create mode 100644 leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/3.png diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/1.png b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/1.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf27c6b37cb9b7d2abc215a3cee06c1c6e7c376 GIT binary patch literal 9942 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 literal 0 HcmV?d00001 diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/2.png b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c09fe34af53026bc06ffd6f6dd77ca5ad6880e6 GIT binary patch literal 13600 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 literal 0 HcmV?d00001 diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/3.png b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/3.png new file mode 100644 index 0000000000000000000000000000000000000000..c973d379f3e837b491e70c53dec31819d48771cf GIT binary patch literal 14209 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 [!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 integer `eventTime` denoting the duration of an event. You are also given two integer arrays `startTime` and `endTime`, each of length `n`. + +These represent the start and end times of `n` **non-overlapping** meetings that occur during the event between time `t = 0` and time `t = eventTime`, where the `ith` meeting occurs during the time `[startTime[i], endTime[i]]`. + +You can reschedule **at most** one meeting by moving its start time while maintaining the **same duration**, such that the meetings remain non-overlapping, to **maximize** the **longest** continuous period of free time during the event. + +Return the **maximum** amount of free time possible after rearranging the meetings. + +**Note** that the meetings can **not** be rescheduled to a time outside the event and they should remain non-overlapping. + +**Note**: In this version, it is **valid** for the relative ordering of the meetings to change after rescheduling one meeting. + +**Example 1:** + +![1](./1.png) + +``` +Input: eventTime = 5, startTime = [1,3], endTime = [2,5] + +Output: 2 + +Explanation: + +Reschedule the meeting at [1, 2] to [2, 3], leaving no meetings during the time [0, 2]. +``` -**Example 1:** +**Example 2:** + +![2](./2.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: eventTime = 10, startTime = [0,7,9], endTime = [1,8,10] + +Output: 7 + +Explanation: + +Reschedule the meeting at [0, 1] to [8, 9], leaving no meetings during the time [0, 7]. +``` + +**Example 3:** + +![3](./3.png) + ``` +Input: eventTime = 10, startTime = [0,3,7,9], endTime = [1,4,8,10] + +Output: 6 -## 题意 -> ... +Explanation: + +Reschedule the meeting at [3, 4] to [8, 9], leaving no meetings during the time [1, 7]. +``` -## 题解 +**Example 4:** -### 思路1 -> ... -Reschedule Meetings for Maximum Free Time II -```go ``` +Input: eventTime = 5, startTime = [0,1,2,3,4], endTime = [1,2,3,4,5] +Output: 0 + +Explanation: + +There is no time during the event not occupied by meetings. +``` ## 结语 diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go index d115ccf5e..f56eb3953 100644 --- a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go +++ b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(eventTime int, startTime []int, endTime []int) int { + n := len(startTime) + q := make([]bool, n) + t1, t2 := 0, 0 + for i := 0; i < n; i++ { + if endTime[i]-startTime[i] <= t1 { + q[i] = true + } + if i == 0 { + t1 = max(t1, startTime[i]) + } else { + t1 = max(t1, startTime[i]-endTime[i-1]) + } + + if endTime[n-i-1]-startTime[n-i-1] <= t2 { + q[n-i-1] = true + } + if i == 0 { + t2 = max(t2, eventTime-endTime[n-1]) + } else { + t2 = max(t2, startTime[n-i]-endTime[n-i-1]) + } + } + + res := 0 + for i := 0; i < n; i++ { + left := 0 + if i != 0 { + left = endTime[i-1] + } + right := eventTime + if i != n-1 { + right = startTime[i+1] + } + if q[i] { + res = max(res, right-left) + } else { + res = max(res, right-left-(endTime[i]-startTime[i])) + } + } + return res } diff --git a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go index 14ff50eb4..3f6987388 100644 --- a/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go +++ b/leetcode/3401-3500/3440.Reschedule-Meetings-for-Maximum-Free-Time-II/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + eventTime int + startTime, endTime []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, []int{1, 3}, []int{2, 5}, 2}, + {"TestCase2", 10, []int{0, 7, 9}, []int{1, 8, 10}, 7}, + {"TestCase3", 10, []int{0, 3, 7, 9}, []int{1, 4, 8, 10}, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.eventTime, c.startTime, c.endTime) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.eventTime, c.startTime, c.endTime) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9881f25db991e514e840a2117bd83f00eaacf1bb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 11 Jul 2025 09:29:46 +0800 Subject: [PATCH 334/450] Add solution and test-cases for problem 868 --- leetcode/801-900/0868.Binary-Gap/README.md | 36 ++++++++++++------- leetcode/801-900/0868.Binary-Gap/Solution.go | 20 +++++++++-- .../801-900/0868.Binary-Gap/Solution_test.go | 14 ++++---- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0868.Binary-Gap/README.md b/leetcode/801-900/0868.Binary-Gap/README.md index 1d8485fd2..358382a1f 100644 --- a/leetcode/801-900/0868.Binary-Gap/README.md +++ b/leetcode/801-900/0868.Binary-Gap/README.md @@ -1,28 +1,38 @@ # [868.Binary Gap][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 +Given a positive integer `n`, find and return the **longest distance** between any two **adjacent** `1`'s in the binary representation of `n`. If there are no two adjacent `1`'s, return `0`. + +Two `1`'s are **adjacent** if there are only `0`'s separating them (possibly no `0`'s). The **distance** between two `1`'s is the absolute difference between their bit positions. For example, the two `1`'s in `"1001"` have a distance of 3. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 22 +Output: 2 +Explanation: 22 in binary is "10110". +The first adjacent pair of 1's is "10110" with a distance of 2. +The second adjacent pair of 1's is "10110" with a distance of 1. +The answer is the largest of these two distances, which is 2. +Note that "10110" is not a valid pair since there is a 1 separating the two 1's underlined. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Binary Gap -```go +``` +Input: n = 8 +Output: 0 +Explanation: 8 in binary is "1000". +There are not any adjacent pairs of 1's in the binary representation of 8, so we return 0. ``` +**Example 3:** + +``` +Input: n = 5 +Output: 2 +Explanation: 5 in binary is "101". +``` ## 结语 diff --git a/leetcode/801-900/0868.Binary-Gap/Solution.go b/leetcode/801-900/0868.Binary-Gap/Solution.go index d115ccf5e..881c59a0c 100644 --- a/leetcode/801-900/0868.Binary-Gap/Solution.go +++ b/leetcode/801-900/0868.Binary-Gap/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + ans, count := 0, 0 + first := true + for ; n > 0; n >>= 1 { + if n&1 == 0 { + if !first { + count++ + } + continue + } + if first { + first = false + } else { + ans = max(ans, count) + } + count = 1 + } + return ans } diff --git a/leetcode/801-900/0868.Binary-Gap/Solution_test.go b/leetcode/801-900/0868.Binary-Gap/Solution_test.go index 14ff50eb4..8a5be7f04 100644 --- a/leetcode/801-900/0868.Binary-Gap/Solution_test.go +++ b/leetcode/801-900/0868.Binary-Gap/Solution_test.go @@ -10,12 +10,12 @@ 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", 22, 2}, + {"TestCase2", 8, 0}, + {"TestCase3", 5, 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d823d1dd988d916b137ec1a689a5974a6d095a87 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 13 Jul 2025 22:00:17 +0800 Subject: [PATCH 335/450] Add solution and test-cases for problem 593 --- leetcode/501-600/0593.Valid-Square/README.md | 30 +++++---- .../501-600/0593.Valid-Square/Solution.go | 61 ++++++++++++++++++- .../0593.Valid-Square/Solution_test.go | 22 +++---- 3 files changed, 87 insertions(+), 26 deletions(-) diff --git a/leetcode/501-600/0593.Valid-Square/README.md b/leetcode/501-600/0593.Valid-Square/README.md index 074e9a2f4..be4a6027a 100644 --- a/leetcode/501-600/0593.Valid-Square/README.md +++ b/leetcode/501-600/0593.Valid-Square/README.md @@ -1,28 +1,32 @@ # [593.Valid Square][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 +Given the coordinates of four points in 2D space `p1`, `p2`, `p3` and `p4`, return true if the four points construct a square. + +The coordinate of a point pi is represented as `[xi, yi]`. The input is **not** given in any order. + +A **valid square** has four equal sides with positive length and four equal angles (90-degree angles). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1] +Output: true ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Valid Square -```go ``` +Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12] +Output: false +``` + +**Example 3:** +``` +Input: p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1] +Output: true +``` ## 结语 diff --git a/leetcode/501-600/0593.Valid-Square/Solution.go b/leetcode/501-600/0593.Valid-Square/Solution.go index d115ccf5e..c94bdcf2d 100644 --- a/leetcode/501-600/0593.Valid-Square/Solution.go +++ b/leetcode/501-600/0593.Valid-Square/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { - return x +func isVertical(x1, y1, x2, y2 []int) bool { + // 0 + a := y1[0] - x1[0] + // -2 + b := y1[1] - x1[1] + // -2 + c := y2[0] - x2[0] + // 0 + d := y2[1] - x2[1] + return a*c+b*d == 0 +} + +func distance(a, b []int) int { + x := a[0] - b[0] + y := a[1] - b[1] + return x*x + y*y +} +func edgesEqual(x1, y1, x2, y2 []int) bool { + x1x2 := distance(x1, x2) + x1y2 := distance(x1, y2) + + if x1x2 != x1y2 { + return false + } + y1x2 := distance(y1, x2) + y1y2 := distance(y1, y2) + if y1x2 != y1y2 { + return false + } + if y1x2 != x1y2 { + return false + } + return distance(x1, y1) == distance(x2, y2) +} + +func Solution(p1 []int, p2 []int, p3 []int, p4 []int) bool { + ps := [][]int{p1, p2, p3, p4} + for i := range 3 { + for j := i + 1; j < 4; j++ { + if ps[i][0] == ps[j][0] && ps[i][1] == ps[j][1] { + return false + } + } + } + groups := [][][]int{ + {p1, p2, p3, p4}, + {p1, p3, p2, p4}, + {p1, p4, p2, p3}, + } + for _, g := range groups { + if !isVertical(g[0], g[1], g[2], g[3]) { + continue + } + if !edgesEqual(g[0], g[1], g[2], g[3]) { + continue + } + return true + } + return false } diff --git a/leetcode/501-600/0593.Valid-Square/Solution_test.go b/leetcode/501-600/0593.Valid-Square/Solution_test.go index 14ff50eb4..32d4b9601 100644 --- a/leetcode/501-600/0593.Valid-Square/Solution_test.go +++ b/leetcode/501-600/0593.Valid-Square/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + p1, p2, p3, p4 []int + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 0}, []int{1, 1}, []int{1, 0}, []int{0, 1}, true}, + {"TestCase2", []int{0, 0}, []int{1, 1}, []int{1, 0}, []int{0, 12}, false}, + {"TestCase3", []int{1, 0}, []int{-1, 0}, []int{0, 1}, []int{0, -1}, true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.p1, c.p2, c.p3, c.p4) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.p1, c.p2, c.p3, c.p4) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 91950bf163563a7153ddca45f24865ca6a17a108 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 15 Jul 2025 08:58:45 +0800 Subject: [PATCH 336/450] Add solution and test-cases for problem 3136 --- leetcode/3101-3200/3136.Valid-Word/README.md | 54 ++++++++++++++----- .../3101-3200/3136.Valid-Word/Solution.go | 27 +++++++++- .../3136.Valid-Word/Solution_test.go | 12 ++--- 3 files changed, 73 insertions(+), 20 deletions(-) diff --git a/leetcode/3101-3200/3136.Valid-Word/README.md b/leetcode/3101-3200/3136.Valid-Word/README.md index 8b87e732b..a79e323bf 100755 --- a/leetcode/3101-3200/3136.Valid-Word/README.md +++ b/leetcode/3101-3200/3136.Valid-Word/README.md @@ -1,28 +1,58 @@ # [3136.Valid Word][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 +A word is considered **valid** if: + +- It contains a **minimum** of 3 characters. +- It contains only digits (0-9), and English letters (uppercase and lowercase). +- It includes **at least** one **vowel**. +- It includes **at least** one **consonant**. + +You are given a string `word`. + +Return `true` if `word` is valid, otherwise, return `false`. + +**Notes**: + +- `'a'`, `'e'`, `'i'`, `'o'`, `'u'`, and their uppercases are **vowels**. +- A **consonant** is an English letter that is not a vowel. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word = "234Adas" + +Output: true + +Explanation: + +This word satisfies the conditions. ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: word = "b3" + +Output: false + +Explanation: -### 思路1 -> ... -Valid Word -```go +The length of this word is fewer than 3, and does not have a vowel. ``` +**Example 3:** + +``` +Input: word = "a3$e" + +Output: false + +Explanation: + +This word contains a '$' character and does not have a consonant. +``` ## 结语 diff --git a/leetcode/3101-3200/3136.Valid-Word/Solution.go b/leetcode/3101-3200/3136.Valid-Word/Solution.go index d115ccf5e..83f2ae3a9 100644 --- a/leetcode/3101-3200/3136.Valid-Word/Solution.go +++ b/leetcode/3101-3200/3136.Valid-Word/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func isVowel(b byte) bool { + return b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' || + b == 'A' || b == 'E' || b == 'I' || b == 'O' || b == 'U' +} + +func Solution(word string) bool { + if len(word) < 3 { + return false + } + a, c := false, false + for _, b := range []byte(word) { + if b >= '0' && b <= '9' { + continue + } + if (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') { + if isVowel(b) { + a = true + } else { + c = true + } + continue + } + return false + } + return a && c } diff --git a/leetcode/3101-3200/3136.Valid-Word/Solution_test.go b/leetcode/3101-3200/3136.Valid-Word/Solution_test.go index 14ff50eb4..207a6f713 100644 --- a/leetcode/3101-3200/3136.Valid-Word/Solution_test.go +++ b/leetcode/3101-3200/3136.Valid-Word/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "234Adas", true}, + {"TestCase2", "b3", false}, + {"TestCase3", "a3$e", false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8ab9820a407af41059fbcc96a17d8fe0b7a063c7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 16 Jul 2025 09:14:39 +0800 Subject: [PATCH 337/450] Add solution and test-cases for problem 3201 --- .../README.md | 46 ++++++++++++++----- .../Solution.go | 23 +++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 62 insertions(+), 21 deletions(-) diff --git a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md index 5dd320804..068539db4 100755 --- a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md +++ b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md @@ -1,28 +1,50 @@ # [3201.Find the Maximum Length of Valid Subsequence I][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 integer array `nums`. +A `subsequence` `sub` of `nums` with length `x` is called **valid** if it satisfies: + +- `(sub[0] + sub[1]) % 2 == (sub[1] + sub[2]) % 2 == ... == (sub[x - 2] + sub[x - 1]) % 2`. + +Return the length of the **longest valid** subsequence of `nums`. + +A **subsequence** is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4] + +Output: 4 + +Explanation: + +The longest valid subsequence is [1, 2, 3, 4]. +``` + +**Example 2:** + ``` +Input: nums = [1,2,1,1,2,1,2] + +Output: 6 + +Explanation: -## 题意 -> ... +The longest valid subsequence is [1, 2, 1, 2, 1, 2]. +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Find the Maximum Length of Valid Subsequence I -```go ``` +Input: nums = [1,3] + +Output: 2 +Explanation: + +The longest valid subsequence is [1, 3]. +``` ## 结语 diff --git a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go index d115ccf5e..652ff6956 100644 --- a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go +++ b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + // 要么一连串偶数(奇数),可以保证%2都是0 + a, b := 0, 0 + for _, n := range nums { + if n&1 == 0 { + a++ + continue + } + b++ + } + ans := max(a, b) + // 开始找一个奇数一个偶数, 保证了结果一定是奇数 + evenLen, oddLen := 0, 0 + for _, n := range nums { + if n&1 == 0 { + evenLen = oddLen + 1 + continue + } + oddLen = evenLen + 1 + } + return max(ans, oddLen, evenLen) } diff --git a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go index 14ff50eb4..e57cfa564 100644 --- a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go +++ b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go @@ -10,12 +10,12 @@ 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, 3, 4}, 4}, + {"TestCase2", []int{1, 2, 1, 1, 2, 1, 2}, 6}, + {"TestCase3", []int{1, 3}, 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a9c4c736acebed27edb3d4b1c6ec9c52b84485c8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 17 Jul 2025 22:18:44 +0800 Subject: [PATCH 338/450] Add solution and test-cases for proble 3202 --- .../README.md | 34 +++++++----- .../Solution.go | 53 ++++++++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 82 insertions(+), 25 deletions(-) diff --git a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md index f32bfa427..4838e7d3f 100755 --- a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md +++ b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md @@ -1,28 +1,36 @@ # [3202.Find the Maximum Length of Valid Subsequence II][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 integer array `nums` and a **positive** integer `k`. +A `subsequence` `sub` of `nums` with length `x` is called **valid** if it satisfies: + +- `(sub[0] + sub[1]) % k == (sub[1] + sub[2]) % k == ... == (sub[x - 2] + sub[x - 1]) % k`. + +Return the length of the **longest valid** subsequence of `nums`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,2,3,4,5], k = 2 + +Output: 5 -## 题意 -> ... +Explanation: -## 题解 +The longest valid subsequence is [1, 2, 3, 4, 5]. +``` + +**Example 2:** -### 思路1 -> ... -Find the Maximum Length of Valid Subsequence II -```go ``` +Input: nums = [1,4,2,3,1,4], k = 3 + +Output: 4 +Explanation: + +The longest valid subsequence is [1, 4, 1, 4]. +``` ## 结语 diff --git a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go index d115ccf5e..7181437e4 100644 --- a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go +++ b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func longestAlternatingSubsequnece(l1, l2 []int) int { + a, b := 0, 0 + ai, bi := 0, 0 + for ai < len(l1) && bi < len(l2) { + if l1[ai] < l2[bi] { + ai++ + a = b + 1 + continue + } + b = a + 1 + bi++ + } + return max(a, b) + 1 +} +func Solution(nums []int, k int) int { + group := make([][]int, k) + for i := range nums { + nums[i] %= k + group[nums[i]] = append(group[nums[i]], i) + } + // 1,0,1,0,1 + ans, l := 0, len(nums) + sums := make(map[int]struct{}) + for i := 0; i < l; i++ { + for j := i + 1; j < l; j++ { + sums[nums[i]+nums[j]] = struct{}{} + } + } + + for sum := range sums { + used := map[int]struct{}{} + for i := 0; i < l; i++ { + if _, ok := used[nums[i]]; ok { + continue + } + used[nums[i]] = struct{}{} + target := (k + sum - nums[i]) % k + used[target] = struct{}{} + + ll := len(group[target]) + if ll == 0 { + continue + } + if nums[i] == target { + ans = max(ans, ll) + continue + } + ans = max(ans, longestAlternatingSubsequnece(group[nums[i]], group[target])) + } + } + return ans } diff --git a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go index 14ff50eb4..a0ecc531f 100644 --- a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go +++ b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4, 5}, 2, 5}, + {"TestCase2", []int{1, 4, 2, 3, 1, 4}, 3, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d48e827c5639d6a8babb3202a70ccb7f36c4ce6a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 18 Jul 2025 09:23:31 +0800 Subject: [PATCH 339/450] Add solution and test-cases for problem 2163 --- .../README.md | 43 ++++++++---- .../Solution.go | 66 ++++++++++++++++++- .../Solution_test.go | 13 ++-- 3 files changed, 100 insertions(+), 22 deletions(-) diff --git a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md index 2493b3f9f..9c4eaa098 100755 --- a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md +++ b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md @@ -1,28 +1,43 @@ # [2163.Minimum Difference in Sums After Removal of Elements][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 a **0-indexed** integer array `nums` consisting of `3 * n` elements. + +You are allowed to remove any **subsequence** of elements of size **exactly** `n` from `nums`. The remaining `2 * n` elements will be divided into two **equal** parts: + +- The first `n` elements belonging to the first part and their sum is `sumfirst`. +- The next `n` elements belonging to the second part and their sum is `sumsecond`. + +The **difference in sums** of the two parts is denoted as `sumfirst - sumsecond`. + +- For example, if `sumfirst = 3` and `sumsecond = 2`, their difference is `1`. +- Similarly, if `sumfirst = 2` and `sumsecond = 3`, their difference is `-1`. + +Return the **minimum difference** possible between the sums of the two parts after the removal of `n` elements. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,1,2] +Output: -1 +Explanation: Here, nums has 3 elements, so n = 1. +Thus we have to remove 1 element from nums and divide the array into two equal parts. +- If we remove nums[0] = 3, the array will be [1,2]. The difference in sums of the two parts will be 1 - 2 = -1. +- If we remove nums[1] = 1, the array will be [3,2]. The difference in sums of the two parts will be 3 - 2 = 1. +- If we remove nums[2] = 2, the array will be [3,1]. The difference in sums of the two parts will be 3 - 1 = 2. +The minimum difference between sums of the two parts is min(-1,1,2) = -1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Difference in Sums After Removal of Elements -```go ``` - +Input: nums = [7,9,5,8,1,3] +Output: 1 +Explanation: Here n = 2. So we must remove 2 elements and divide the remaining array into two parts containing two elements each. +If we remove nums[2] = 5 and nums[3] = 8, the resultant array will be [7,9,1,3]. The difference in sums will be (7+9) - (1+3) = 12. +To obtain the minimum difference, we should remove nums[1] = 9 and nums[4] = 1. The resultant array becomes [7,5,8,3]. The difference in sums of the two parts is (7+5) - (8+3) = 1. +It can be shown that it is not possible to obtain a difference smaller than 1. +``` ## 结语 diff --git a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go index d115ccf5e..f1664a04a 100644 --- a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go +++ b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go @@ -1,5 +1,69 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +func Solution(nums []int) int64 { + n3 := len(nums) + n := n3 / 3 + part1 := make([]int64, n+1) + var sum int64 = 0 + ql := &MaxHeap{} + heap.Init(ql) + for i := 0; i < n; i++ { + sum += int64(nums[i]) + heap.Push(ql, nums[i]) + } + part1[0] = sum + for i := n; i < n*2; i++ { + sum += int64(nums[i]) + heap.Push(ql, nums[i]) + sum -= int64(heap.Pop(ql).(int)) + part1[i-(n-1)] = sum + } + + var part2 int64 = 0 + qr := &IntMinHeap{} + heap.Init(qr) + for i := n*3 - 1; i >= n*2; i-- { + part2 += int64(nums[i]) + heap.Push(qr, nums[i]) + } + ans := part1[n] - part2 + for i := n*2 - 1; i >= n; i-- { + part2 += int64(nums[i]) + heap.Push(qr, nums[i]) + part2 -= int64(heap.Pop(qr).(int)) + if part1[i-n]-part2 < ans { + ans = part1[i-n] - part2 + } + } + return ans +} + +type MaxHeap []int + +func (h MaxHeap) Len() int { return len(h) } +func (h MaxHeap) Less(i, j int) bool { return h[i] > h[j] } +func (h MaxHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } +func (h *MaxHeap) Push(x interface{}) { *h = append(*h, x.(int)) } +func (h *MaxHeap) Pop() interface{} { + old := *h + n := len(old) + x := old[n-1] + *h = old[0 : n-1] + return x +} + +type IntMinHeap []int + +func (h IntMinHeap) Len() int { return len(h) } +func (h IntMinHeap) Less(i, j int) bool { return h[i] < h[j] } +func (h IntMinHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } +func (h *IntMinHeap) Push(x interface{}) { *h = append(*h, x.(int)) } +func (h *IntMinHeap) Pop() interface{} { + old := *h + n := len(old) + x := old[n-1] + *h = old[0 : n-1] return x } diff --git a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution_test.go b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution_test.go index 14ff50eb4..59b5aaf63 100644 --- a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution_test.go +++ b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 1, 2}, -1}, + {"TestCase2", []int{7, 9, 5, 8, 1, 3}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7b3cf846426f5ad86dbdc9d1466fedc08530f0c5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 19 Jul 2025 09:20:47 +0800 Subject: [PATCH 340/450] Add solution and test-cases for problem 3034 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 26 +++++++++++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/README.md b/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/README.md index be2c4fb2f..16fb4a856 100755 --- a/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/README.md +++ b/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/README.md @@ -1,28 +1,33 @@ # [3034.Number of Subarrays That Match a Pattern I][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 a **0-indexed** integer array `nums` of size `n`, and a **0-indexed** integer array `pattern` of size `m` consisting of integers `-1`, `0`, and `1`. + +A `subarray nums[i..j]` of size `m + 1` is said to match the `pattern` if the following conditions hold for each element `pattern[k]`: + +- `nums[i + k + 1] > nums[i + k] if pattern[k] == 1`. +- `nums[i + k + 1] == nums[i + k] if pattern[k] == 0`. +- `nums[i + k + 1] < nums[i + k] if pattern[k] == -1`. + +Return the **count** of subarrays in nums that match the `pattern`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4,5,6], pattern = [1,1] +Output: 4 +Explanation: The pattern [1,1] indicates that we are looking for strictly increasing subarrays of size 3. In the array nums, the subarrays [1,2,3], [2,3,4], [3,4,5], and [4,5,6] match this pattern. +Hence, there are 4 subarrays in nums that match the pattern. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Subarrays That Match a Pattern I -```go ``` - +Input: nums = [1,4,4,1,3,5,5,3], pattern = [1,0,-1] +Output: 2 +Explanation: Here, the pattern [1,0,-1] indicates that we are looking for a sequence where the first number is smaller than the second, the second is equal to the third, and the third is greater than the fourth. In the array nums, the subarrays [1,4,4,1], and [3,5,5,3] match this pattern. +Hence, there are 2 subarrays in nums that match the pattern. +``` ## 结语 diff --git a/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution.go b/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution.go index d115ccf5e..da2373c2d 100644 --- a/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution.go +++ b/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, pattern []int) int { + var ans int + m := len(pattern) + n := len(nums) + k := 0 + for i := 0; i < n-m; i++ { + k = 0 + for ; k < m; k++ { + if pattern[k] == 1 && nums[i+k+1] > nums[i+k] { + continue + } + if pattern[k] == 0 && nums[i+k+1] == nums[i+k] { + continue + } + if pattern[k] == -1 && nums[i+k+1] < nums[i+k] { + continue + } + break + } + if k == m { + ans++ + } + } + return ans } diff --git a/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution_test.go b/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution_test.go index 14ff50eb4..fac219f09 100644 --- a/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution_test.go +++ b/leetcode/3001-3100/3034.Number-of-Subarrays-That-Match-a-Pattern-I/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs, pattern []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4, 5, 6}, []int{1, 1}, 4}, + {"TestCase2", []int{1, 4, 4, 1, 3, 5, 5, 3}, []int{1, 0, -1}, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.pattern) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.pattern) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6d08c41c32b844a299a8411d3b4fe5db4f324351 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Jul 2025 21:15:01 +0800 Subject: [PATCH 341/450] Add solution and test-cases for problem 1948 --- .../1.jpg | Bin 0 -> 25417 bytes .../2.jpg | Bin 0 -> 31044 bytes .../3.jpg | Bin 0 -> 11408 bytes .../README.md | 61 +++++++--- .../Solution.go | 107 +++++++++++++++++- .../Solution_test.go | 27 +++-- 6 files changed, 173 insertions(+), 22 deletions(-) create mode 100644 leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/1.jpg create mode 100644 leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/2.jpg create mode 100644 leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/3.jpg diff --git a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/1.jpg b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1cceaf4ef551173345306b1333462e5a6fabaae GIT binary patch literal 25417 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 T*tXvB|1r-0({O+N_uRh$%!e^! literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/2.jpg b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c93b547ce47fb533cbbd14ff0d61354e20e0087 GIT binary patch literal 31044 zcmcG#1yEeiw=Oz3fnZ61;10ndxRc-zAh?GF2{PE=4uJpx!Vm^`cLo9sHh2ggAPmmn zgS)$2e&>Hqy>s4qukO87_x4mxb$*m@5VHFgX({Xik5B-`~P+Qmet4l;w-ZDO)t>*Xm z@=L1(*yumP|3miwBOD9oaedIyaGyM0RweI_xdaYgENy_}z!ZievN5&!`XjwBV^e8>_*Ycq}?C4<@@D$^5+9Vhx02#oU zItekRyetU`Kwcj0KXomy76QVy!a2>-?XlJ5K2;+vk2rupmZveHb2zQTY(If-+#&(! zn)pBaT=99>J~ggUungdP6pgBJdw7`cZ-H@{?EF?i7l6N-)A_Be9Ztxlp;9ja==if3 zKG;O-war((+HV|8pSa1RE@SPO<3lVhn{1uCTgbo6Ab|Bd4bt*R%g$GV8)zwaggzNM z6dXIKeMw_{mlL}svNk8fr6A^WnhZaZmNllyvve=nzETp4O*HbX(m&m&1ILe(+5DH zF=3b6Sf&AN2O5%{+z+-st!Vi0^kaar-&dtP6(Wq5Il_%+q2sfH0ymPFlTH^HI6>7rnqkdoK*K}_`7bl^KG|nVu=7;xc ziydy~(q6Iw)uxr0YJ-^p8)&Us|LPQ)q-3VgT0uyOC$H3-rYTC1_`@4XVc}!+>V(lP`f7!MnehDh z-4S460UR+P4bvW*l%sdkY&@JI`nwWbXn3yN(@zzewnUAP{3d;NZKxl;s%`CS^nI~d zMorHt^5DvkDRy=Fa|t>lJ?^()Mn=H5Z~xQo6V+4{(P_%0g2AqiJz+x6wNf@a=PO{J zzubyETh%E?of_5tPxB)`4I+33>pZvPf&2kavw_ZAX-H+~`%Z#kvJ0A99=d)>?COm$ zWec&-GMOur8DlS+xdA#D>&)gDlTV(Pinf2K8} zw}QIKrTJ&}GR*~d*4GusAfU~5`-7fz9y@k$Jimcg*f?BGYQ`Gcxl&C|l)qMabu`yHc}2h@Hq8ehO28|L+Xi#)PXd&7k84YRGBZjEIr{qHAz3W8^^mK z1(1@(AdJ>+{=T4 zP;DWyDel0;-5u5z+->VT_lYZR8UhKnn0a1c)_U`Hw)9|G+q_qQ)$L48#mZp8^qv7% z($v@2s?8JfR$i9nR(sEz@4RJ?k7XV9kOvBIb5f^xTkeVt@lHK;&iwlKe7Z_jF%@eQ zLK%Jx9RbQJ+iuZ50AiZ3Yf;dUWWURk*SkTCX;p-N6#KqaN#QDb#D{ zBQ2EN-x!cPS9(OFQ1n%J*?wzf3L?Akq`2&>%M(dY@1@YrRpKc@yiu|!BHmWx{XV?b*odXf$Y!UMa9yYrbC#I+52a(lk z|CU5Uk3-Fhz0)}%`}L{`vY&~2k_NTx8xZi47T>yJq?Vo9!m;wN+RTd#x=+V^qRC*1 z>KG6;ZDr!uPLnN?aqNK6+)$zpyD}Abz6m9&!pN-sob}ZjxH)|zhU<)h)@r;kx#DD6IZ@2307I?IDV2vQW}CDIJVi-N=N1gg_oMvq{DmZ_^$+X z9OkrK5B&zztOT(K3mv7~)PYp6$S!({?uQY!*sZ+4{mGQcZxJ&!ec zE#Nr*&L<3-c#A#%>ElKP$!;o!w-@*Bc~j|I1-StM1FWUA6_kM>@FIr?oV^clEk% z&_Q)WO205%fRf5q0Sq&zA@`u0Zi(eJ zs711HZFwvX+{P|SZU=Gnfk}Pq~xmElG6t1 zdN%oIy{Lvq=iH|t+3j092Jt^AZ8Gy%&@(J55%Pa*{4@hBhYFsg95-)%^z#AW zUBvS8(#u%X+d}Ji+$1Feu%rYuQ^Hw)(oMf`+Z?~|5+Ir!ytw(LV3YIcinBz7V1634 zno1>&So;o4dZ01X^s!%1^(#NWZ^al#)e?=|Ui2YKarCE1&-vEjn*;%8WPFX>*Bz|q zYK-4+gm)pr4}g_d%u>P$1IRK z))cnRaA^}Rg`lDO4ug^3^3AyCdh$03ot==wC-zK)P?y4PA!?DX+*Y)iACrye;l*Ga zBPpJxGunWL8D(_FE4>Mw_u4~dCKB|;kKT2VbH2;42W+|$&;d|&k}g<1HW?yqZUt2$ z{3)|(y0WeW9NNsA>J4+25nbbQ=AzCm;GD_(yS)=Y<%UBVmgCS>|JO_-KF0l{*88B(&hX%vp0p)wgl0}x+mxLVhZo0o#2hW zW|#zyEj#Dn?IkKaeBe;&hl2;v?F4~qn`V;%=!|vTX6n@XFaRq#M13p#iH_2aV^h6$ zsneCI_Arz%VbU#R6#{hQg30T!*#5V)heX-9w&^>{$kk*x%<)-Ul9;2$nM0TMHr14U z&#a#~rOuk3u@VE+j-hy+db4BTf&iWl7Km$jD|}*AJX9C5M#maoer*nxm0hpjc(q4G ziR%*kW5aU;TomDc6M(ej2Zr?uHd`ec1?HOfYG{>+V4q0d9!)4YecID}w}2sQOC1jO zMysG;U8rCFW|zgh8$?Mf z!gPoIta)W&3w+txWsK8^iSujBwqbhHvcZHM`IO`eZ5?&MeA9nfY4NWJHR<9Y6WI36 zZV!72CcQ^J^xGcOM<@hNWSG}zV(ns^_y-)9@G1iTlI!=s=Q%2c; z>q5nWsfmsKNIGQ$cN?0eRc!OyQ5ULei8agk_UxSOtPVd%o=0%|(IVv1l;ZGw7eD7t zS^8>e7N>0ar()+!3J#+N?Wr^*o zm(jFVl|6H)KZ(M}s6C~*WO+Z@jcO^!UDzVePbZ{Tf^jlfPX*NZ(}Y0Eu}Fo{-NI=7 zqq~zEHAdP4;F&>lJI)^o1mlm0y@Y2*lbGuYiBXQy8Z zk>IL}x+oK^XwtXV%%250AsmH%eiWXpjW%O4(&EHHZJX_>vmF-j$S`zVaP^ZYj}=qC z*IlYnu>!w7-mhl>Y45KXk7Z;OTp@iL7D!0^ghCkU@ztG>DyWH}XKluIrI=HG?>_I@ z)4M(ZXvrX!&KJ8oHgx0|`zDEGR8hoDg&YF&EO9KME6Fce8I+#Y`Di30BpdszUej(2 z$GoYd(Yud^Gkxmg*lqzrF@szy3$je@KLW^`*Uw+B$}B?L3TSXYj?&C;T(k9u^d`$) z1oo4!;sjf5e!KwmYK)wKHrC76O2Z5?f!35+EmYs(sM_8jyT4oO6wVQrI^|Y14UOM{ z+M8i|70L5HUHf0cCUNDswIz~eq z@G)(iI^Y4IzW4U8G>_lgVgsFo712tNRY^~+q|;0QY@(samnxBoP5NKVu5^V=0inw93b%vB9x{9^qg!Ww%^1^mrOx?`hA zRw<2B+$tQB|0h_CP?CtA$=x|?lc)Jw+rxFQ@@0TR#EakDid;^RSo+3$I)@i~>$abZ zzSKxTQVY^FXes*q{Ej+h^?bssY|;^xjTUhAfTmBBBq{=%ygn@?Df>RA!KeLlcEDh+ zuNS}#roOmUd^&kM>~9v0gxvPsyD4?TGT&#AcU;wS{b;?zzR7g&6nogE>+N8>J-Nk0S={_Az~>2DF#_ zTRtCUHKpEf<3*rI^?7!vGUTFE`|Zp@L)u?+`>rio2~AyDDYqYQtfX!`>5nOwL}<%^ zfpMELnGN%X<5WBXDs0lY&=PdJz7vwS3swoYDO049<`>=J+ig;=J+K1@%E7XiXWL+V z$~5>pv++qd+|JPO{PLu!I6|m*D8JgM61*F&c6xtsM|?)>o2fGnuVjV}zK+|`uGiRz zGNd)5;iT#(cuJ#A18-cyV@F%p7~B`59pHZ&KI1E?vAS%$Rt7l0SZ|S`V-ZiJneX;!S7iJH|BwjPHO2R z`shgId2QWjr-=C8;1YKKTe@zU7Mt+*(@SiHNq|1p!M&7lgGl> zHpAvT)c3ct428)d0Fk$5JnmrPiM?2IxP)oX5vEIjV^)q!_6-!*UQ+02^y-t=p` z#t7M4)3JR?tU8z)5YEsrD?pq6@igH=3?5^BTzgnvXgS~SS6CLGN~Fb{6hbw3__w|W zT|4j=c$AB>FG2_nzQ}V%@o@E;xa0@>TS3T=M{l3i--Dej-+G*GE1S;(T zCs^(nC>Fuo8kk$(Y6JMq5;OxA*syz`;L(#~a-0{LJ?f8B;$>zdHdt3&4t$5?xddC?MMbo z9v*w|EBo!}V#c-Msm90*zy?8{C7CD`dALdWwUUor*1MQbmm=Zgd=G#yy+omRqzR+? z+5rO z{97BEwYNjuq%IPv=Ui|Tr_;Y0G4}kq%4Iy2rPpDCI$ipT5c{!i6lBNLU^(uSg*g=V zdicbDk7M|2(-{X3Sylj^DWh4>s=NZ1!DEn3qpue~!&hOkm$F*-Cm%MwY125RE3@5= z$;BJjdn!~=8u~fKdPlFyz--^X6~FCDU{d_4ct~#UqTh6%Tk8kW+YX559n*sJPZufp z0+9rQ&D;fUJ1Lg$nbyRUzu-gUGzx_MPRWc&;RG^~CJ!kh`963GO0@ zxG`0LQ!|&ur8-!7?gq-z?<9w6O=`Eyi`e)Nd^nm>CG>bnxuk*e8krYhj79`e{l`sn^YUNk?O=%wQ$#)&(a* zjA5lFqiDRzR*{D7`?z&VOSj0_2$otslUegM>Zgfbp~b_ z6LWX{G`ZcBSBV3b!fte&^GCGH&jjoZ^{lrI+O|FydL&i-zO~Wg0tb`(_eE+y=57B} zeGxZ}Q{wX&qwu+C$~^L?JvRo}65o)GghI(_HAWf>5Lp-JItJ$!MWxn&^M;0Nnl`%v zPu1BG_*KBM&4<@Jr)}dGCKU_gHDVi0mTJ+4MDa?}P9X6v9Y)H+EnLK%bQ!HsvDy)S zcz`6^k#l8fik6Otzd0Q(Qy_KxkzNSkTeXzxM1aWX9O%laJi=rnG6r!daRWG~ zhE4`wPL68L*={tH%;ox1bN+Di2Ibr?ot$EV@@SrQP!Ono)ZB0C$LtOQggx#TFX}$M zbj-?{u&P1SfWyJqr;kvHD8{;GDrjGY8KS~rH%l$2CA0w&zxyC*$1-?-=t$(1ASj$N z+j|*=t-}0eV`bg#aWj)Rm!i#pip%by&iaFT8-}i^*!K(NQg5SjC$GzrRAf}VvVXd`eVmONCkzm%B2htmUVpG%`@_z>19(e3LIqK#p`kH7U-rCqEEWA+x$HSF zH?{*ymJHnQRZ-Bt7Taq1j6;@;yJ1O-!!7x2bR=arc>Anf@#nn%n8alAhM!0a=| zOenTJN76-9(X+scxaJ6qgMA|UA0EO3bzXe^6%;(-J6JX`rD<|5WSoEYr6-2JhuBtP zv@@#_Q^(IGozaS4>gIuk0#Hh=48{f}x-xI%%3rSalD1&qsj%g4WwD#z+(*;}-%|8; zqgnJ*yD4s3TYl(;)eX6<68m>*f9NWRCvMuVj~Z|7oUT;9DxE#)cX#If+UVa{{QUv& zl+G8L5EmQUBBLB|K0A_EG{Rr4-FG*fSY6%SwK2rpd#Rx%8j;u7P&LH;p`Uj}d}BAShL-L*(x(?~%eE3g^c} zc;!0e1u`@(#N;zD`M*LqTLQxSwe=h z&Fbgj_=!*Vm?G&@zwCNBN1GDU)TBr;B+tWVVf25U-e%KR)y_HbD>>8~a+r|@Si8O9 zA^{gw&od>{Jx>DnhIr#;>wLHt4%wUE8mjEF9mwyk;c{)9N-mT}oYQ#&TBBl3& zV6XQyU)FqkbH*koY{6(+Ah&rvRsl!%!h7qU)Qsa?Zsk+20}->+ifN%icYTw){a=hP zhss{Q6D|@J6*`_69?)0gyyYo^rDQCj`a#s8ezucB@yl?{Z!2OMNmsm{YEs`>r z`zs>S>?u>^)sWL0b#4%|B#x)s7vPs&Y`K7G)=6jaFEQH+?e8{^(zAGugqRIS$b5aQ zfwSi-oa}P=3y6i@xISiy5>Pi`&O1wMs?l}0qbP++y%_YG*VKb3*`FUWHFi2{G1Usm} zxFn4BTIJwR`^T3WbDOL?P1|jH3MyI{nlPj~bxc`#`j^FUGPxVgPPEqZrS0rZ-sm?* zBQct9UTAKNl;=FZEr2FfJM!lU-?GkA*r+5{rU#1x#C|v2(UNHg^JbiMt79e#w7heza>x4G}^PqY<4D`U=V^8gU&@cwwukLF!2q)O-b~rITnFek?;VhmSCH6tVIck zWxh6DhgN#u3BBeo-m|3C1Hkya#XVodFH8p91hN^eF>Z_a8U?-btu9%DmtG4kzfjEr zf1t>}f(o`zxnC#8D;N@`r0AjhTpb!e>WE`fF5Cb<6!;fE^y||;r)v9f>0jQYf@gaU z9>cbmuXDfKIA?e2+bgfABqPKMA`I%2Q<0_YWp5qf1{vAK1i_y!_z4ttM z8x1rEA0>>Cg=u?Cm89dOZi_``AQxlG6;o7^-?OzhK}u8_8LujCCSes8 z1N_QVJmYuMc%Oh7>N=UeF8A}Dj@|eKVc;j>-1cWBg_vhGS?uzou-Mm&WQH@y6U~k) zYrzK0`mOMEl(>&=WE{e>z6|L8=`oZS?NVz)Jh{xF#FehvZ=KVZQyg;-sp1| zlY!b7+|cAVsm3S==Tff4=nEECd|gE1-wNxwUzilCtEPBhT_fvwHbji5;g ztK>ZdO*?$kr>j9N*ZBM5r^LkA>Ty*WMgdNv#kDabh8w(!<;b6J`;5*kZEf!WE`_|x znS$fSj^EZ3zOU!g4cM*P(LtsZn40bdwPNcOEd96&wVb21_w6zt0P)zx1>=q^+fy;B znuWT>qE%#3o#X?MBFb4qAp7FPi=%qO`6FNi{r#^f1D_7q%CXG^3GpSUQhye|8(uc* zQ4m!Y1;-iF?d0@L<m>dQu4 z?OX!d)}HJXmDoAM#6JMMG+hx(l9LQD^)3VZeSY)cZC(CZA!p6Po46FCEV&QXHZ`-; z5o=w1%gaN%_}^%v)k?5Loh*R{+;V+;zH50+5?K%dkpD)s5C3+4_Z|8bRn@Ybn4zkCnSGe+e`B3U8 zY$7GFy;E*)K1NL<=xVBY43L1x0wCyLPqnjI=ABv$_Jf!j#^29!+6_em8Z>YNNMova zAaKR3AxO^g^1+srWKvS%?`BK*TB~HzqU)3z=TU%6ZaJxEfJlCNcT&@yWUthuR!0!6 z1w)s~0m1UT0e03$_Y`$#HSWq;)5}T8p1%~&0ee(9P5D=W9l-;3OHoO;qK+8f(cJ}+8L0}ySa zI-sNFn!yKviqgv1(k@VKyB##`BVB*e%Gp&aH76u8U66jLIEQR4tXIb!yK%8maT0sO z+1q*ic82CYK580R_IocI1Of_W7Z;CnpPtV7i!%X(mYVe%oCygNKK+3lirpG-j5zPi z-MA$*ug>s0i>TKctMHp4Z0B1hZQyELb+3`erUd8ROy1C3hIXTQ$<{1?;`<+u-e)Wy z-Wm$5%$yYx(bzwln%O^$Xb6#1^^v_+W^rCs?)Bqwo)yD8@~$>l zMTq5G(|AyDzj}cNzQra9&r1Pg32wB*M4j2%YX{8|V!2>C8u8AL^(!Gfm_;fS5x_UZ zxSVLXZ-Ipw6T}?w;$Vd$O<9UrRIDr3%C!_v6>fZOyYtH4qNF%A_h|5W*Yx?VT!aNN zot3FX-TLUqoTQxq_$bmghk8)QK;lzm=*mW8ur#7@Uh6d6&ZDT!pH9}X&bK#%*oc%& z+;VL;cS8(21W2M2 z(PWUZ6kMZ~!b?m4Oc4aN=~(&nMgPhvF8W?S5;fL5%%MmpCMrom1VfFu&95)~G~5Is zO@+&_?!O0zm-LTWxD;69stJ8?!qH* zq|Z3shpftIQguzbC6kp0Kp*VrrAv~>rx6OjRK%wBNa_|%SZ}Ry{O%Mu5XUP|#Kznm zh}GPBr>%!d+Om>q7u?-`0H`GxCXG}EdDKsY=y`a!zgJNoxujT)zL)>7Tl~vJCtFhI zP{=(A`KP*k(Afg2e4(BX%43{ic&spplBbjA)8~6&t%P%wm=f85_cj)YQf^*!mePW0 znm6QOZiD7l?O1gVzCp{-%H+nzUFSSD<;^xPyF7&<0V zS$hak402*RLUM<4Vil36B2+;%JLb8Dj;H<+tY!M1SHe3 z6GAhB;tREt*a^v?t95-}42mAu1x-)J>^FK3brb(Gw&h{FyUk+3$fd zmZAu6TAnFsx{Y`^ zYy}R%cHZS3R#*6Te*{Ln1J{kl(rO+0AJ916lXIF}3(5Ta({)yJcYhdXv`JXj_1%cS zu*z0|Ki!W2S8zO`^;*y?mzR#V)d1O%o#gfOvtmVtbh8+&@#lepOJnp7&^Tt zPq59*T-2`Rc9yY9*n0qElw`PF;6-P%EFiduSegav5rM-k?F3?jOZv8t+2SoDBZh%} zCDJ|G&~{!Wb$JrL@540t3Y7{4owxuaY62a(WrUtN#ecjG%Dtw`*aoKzy7iV-cy3H7 zT<|;q%rNk~(!}`5o7x@#^ah1dL5mxALv@yCftu&vWi`YVHZKr&vfW%hm0Dn3^BuOr za3!_CJ|G8j<>joYe1MtcGffM;@}D$y%Z5^IoMvqyA&YOwJ^vcpQK;a^NdFMKlf*bN z3!iP@wV`?dJde1GC;KZ4D&Za%hU;sYlv);l$<~W&_;MX+v)=UT8~X1$&-kg+e4!jv zwoz~8`=g`nq8~xs*5%~`cIhVH=Qroqq_E_bPQ^utE-O4Np&D8n?~q;Fhve>MH?O1j z?I48XXT*juBJw)#J87KC^No{o8?Rd}bxON*U1Pp<$0o3g!v_(XdjZJ@KsPyo-FI*Cl4faJi4R@i^m z)c?lFWFk^5KBq_ttT%68c*ZHENE@TME5LW>&>qyntnd4;zvI1IC`Q;1FKh+D*V@cC z1exwRYPCO~NM!<%3B}vB+>)^;&0dfEkjS0~fNQd8P!`LV)%Keag*(*;!1bBx5Xp;b z^RM!xz1z3hdoN3{WDZX5*JrD*+u3du=>-Vtf~JQ>?%9ZLSh;iR0{`n4 zJOZ2Mc$c@vl;7H=*&5D6+IEgOLmB<%S0^Ds7MB;ad9x7PBk6w6GoUG-2WV{K0q{qa z2a*KNGo)goT^bv~*i%sLDS#;7XX@4FvNws;)y}QT8yMYo{oh-$k-S1K^8#LGmK+`$5a|HtLl5N6bj%NVRa0BpNu*&hHw*%!hSu@hG^v;1f&j^+0~p!Ortpc#Hgtn%~62e%Ym zyv&fX{F|#^^dO+^2CBb(woJnx5{i^*yq90Qyz2(Mb>l@2s__4R-sjY_f zHg!eYQ(-~_hy$D0#@77F3f-~OlZmO@SQmw6K{ZY3{jIR1ouxDH``X3WF!`7VKnO=0 zm_}^uJ7gj5ruO-m1khxAoQ1nOBiYUNbclqsAn@tq+H&EW9^Jj|7p%EcDwvVKytmWT z0CEY%osv;bw>B;(LNKUS;$sOq_vmqwL4$876g3kqU+O`MS^l_kI)cX(7vNDlF*@u^ zk?rKl$CT2DqDR-EoE2ln^L*Cb8E-t(tgP54N@>}<p zs`0t~oc%Xb@8l?|P3m+6qh=z!vkFdVxaFTo^YewgUFto)H=i2sIh8y;nrU15RL`+% z^8z-_lYEU_^T48hKViB<^Jk(KJNB8)%@;p-CPEbGvz!A!KT*S}UNvMrd>u0@VoBL{ z4V+*|3ZEjS;atmU(hvu7%yzP|AOxS`Wb2*;p6Q7m6v#N&k*9#5Y7x8$;Lw{baIExC zb$deT2SCwzt}Pw8R4$rE9?HZ?f2SLhTumWB$b(b|^QZ2Z>WoEVME{VV3L(x4-s(Rj zuK%FN;h8M9c~o9A6vL=O{@%dcL`X_VRwwZ`r7WVB9TPkA4ETu8rP;-$8Z&y`m5*19 zJIHn?)SVGhB(?Q7<&>e;J$B3+ouqXDbun6tS0;ZT+3}Ps#nJbdKj#g4D-9@(x_{`kC@b3 z;GVSi-Rge+#F2{-EQYosOfEKm-vR+4!#>zKUDhMZE{az4=MD~nUh$G-1hE!E#>`jf zScT$)XJ~FF#k$ej;{J{Fud)!gSrDNNN*`BenY^t`?TvL2Jj2PJoxGngEbT?0Ih@_q zo0Y+RZZbhRr5nqCe(_$H2~dFB=!|%++xCh27w+RO4u3V&_~OFDp>Web?(&|6KtCw|6Oz4j7)ZS3dl;p}TJG z824Li3i=5-BCc%qBKLUVaC#@VeM|c1EOTKL<)vCtjj83B{JtL_xu-gb zjeX4RXfc03f67t2&l6Pof~&1Dyw|dU|LlUT@lOA`1#QGedgbtMAcyvRQJGmobe@5u zz;90w^o-Sxsj9}@$rHDPskq`>R%FTy^R^rHl=N#q+DMw-Kw_GMeDe1my=D~`QYynv z@9I8^?oh>|^f_=_MD6WEU)pmN`CO|+Q!H1vWD}LC-~vs%eP6jLTnN}Br4ucU%@Q1+ zn}Q_BMBdPF?*HjYHB;S^hD|(gdm@#r!r&hf?ALf$YDPWR^L1xWpb!zD3NzvyIO?UZ#`m6s(Ws!SZJw=D`V-2g42L_|bx4)o){+;|)P8f$KA zy6Z=N_R*Udn{u)iky$PR^IlEX?OsaQ$FD~RVlI3~UM+~&IJIROgAURZ32Gh4vQYJN z;_yPKL%eX)9LZwrhmxiHVG@TJC{lWL52d-~>+8GgekK_dPRo0{S$BA2tB8OAohkzQ zQV_fL+m$~S$BRYEcJzRy!$wrh37c&#y!E5(y~0-^!TL% zAZi2A8eL1HED?vcS$pJ|6v04TBA>D-YSyyT?nHVG$%ro2FFaIwV_aS_-kM-)&rwmq zQ`WMjFj=VrZNNU6V1gnfleKkye&8_lep$tIT7+X%rSPmA;tI4d+O6;pY)ceYR=3eO z7BywZ6qdve#oFEA(u2Dl5-Ii>qtx?uV)DJb6BN^N2Y1-3=k@A4{xWPO&cA2?XEQLn ziVE$YxVX@|O7-FMldn+Zm4qd}IIdSNwDqGM8#G0TVbXas1pfWkYgjt0a3?j1MteS_ z@T8+Vd8;afY$Tv%GUP^|PWfooHxF$mBLtt}VEqZskEzdo{}+%)dW%_!8gAaPoAy(= zai47uP3`SQNCVe^5>$0YB8&Z_kGp$?GqWI{hoI*+D)?1_JlaR`=A2oX%5yf^gQt5dhOut*V0>wLOdWHhiW@*0RoL*A-voDS>TeGneGlEm!^RA6 z;9##WT=*DmZx9E7eY7{-xUOI^xGQ{H{IXelo}1kGF*hx@vm%PhBZrB_0wYrB!v>*w z`HiC^&W+k~dTM&lbF-f06M+rqaNVfKW`^h=vEnyc`(cB6Flhheo-oRQ6Sg58Ud%Ek z#_GkmC}C=DW($m5t!ufgpj}c*FOWpDdUQ2)WP24wcMVU^zlxOqs!Lmt>0Y(EeE{rn z!{J=#eXb5vj6GfA_uI4fo4(!~<=tU_P1J%17odpI%OP>T% zupRQLmn?)m0GzxDT)YgzY{AjlM_%HDGUrLtIx_i)OP*$rq6Uv+hlZ$G#)ZHtopc$x zo9z@sK6nOqBKt|VU!=Nt&6SKwHNHc=V%5Vnzqk6%V;6Ipn*(+y9)!TvU6~D~A*JsQmtE_b1*y zJZfdBZA>*W;>{zD(2*R-UfSH&wgI`&dla$iKYdmGGUgR)u8c1A z5Y_vut%wPgKM^GmwKoL&-nJ%2BmiR>lXI^}-rf7x5-|`{8=)dl+G2_&Bw(Z&p@Fs) z-xC{44%W02ZyBMc-SK8bR~^grnJ~i~_fuSG@Gw&Yh2I{jh1si1N@KC?znOt~{JDmm zWy#Wd`$&2*OP!T<3jH5PC1tgvfTy7gVdYLj<5H#p)9}Beprb9H?AW{5Roy&D!*Srj zNCDhIs=>;~gy^e8vU|$%@dH2{wWsAhp5ef;Hc)fmtD6X&<35>a)+j%uB4Yt9a0Im?;h9BN~#(*62 zcZ7xZ!l_$?1a4!G&^dEAC&#f0eMw1;nN2Rl_D)~PUFvUB;m|5Z=U$%y;v`}W^Z>9( z3%DL*djO2bp=qeKahI)#41UO1o89&;OtN5%uA{6b{r720fH|&# zDpl`bb7IlIV%H}!|BEb+L_RR%X}rCahj~o4Iu`Sg2gR{W?fRhM|<5q zSX??aM~DXlLht_v$R_C;7&*NA%?o&A|9gPljUghJ0`CSlqtNW5v;W6Ra2R zTyfB_6aIZG1}LxPvNI8?e3m|OtDXV`ZTWQ0**YK{1>bSxR+kGBR{A|98i;sLGXQC2 z5l)2~vsg|^NSF>z#;ti)K+QmPS8bsa*ANDm^!;EYT{T-6~N#`DJtp3H-Z48CfL}IkkO+ zQsFVb2(|TV$<2lJOv-d!zE)u-k|7t!j;eT3y1BNTCX+U%cITy8>LaKZd=(k?o-I2Y ztE^nR+ut9^v6NGg1utlk)1)f=Q4RJBH5QW;%1Nfh`GJ}3+97D-;w#e#l57u(wIK`d$t)lqZrAmTfk_rjTkO^8rpb|QB!j02qP1`$6qdo? z|B3?!hR2tfOi#?e-S}P5W0xA+q2yU3yROhDBcq%0SllbgFhGb4k|WagV<~Q;ab(-< zsMTKhky6=5O505geE0J{XoQZEsF5B%GLO2qhYyCbqm}+vN(A z5RNjAO*(ZQOz5^%wNzo1Wkd_HGShkiLG|jHiOB@zJY?If|4;3R;Ds4`i=MKYlW;$? z+oFRz_@v~^Fg?b6M;3tgr3=~HggbiVyWs}sub(cnNPK=GW59P8imey+skubOd~gwA zrWdat9TD)S3&wicZ&{z235oxU)>_@? z2ss#)$OPp;QWpzkL}C;Ejg|%28=>~{{@SKzvCg3z0Ic+(J*=BW7QS?p1D;l??#Io! zs$M>E7a6<}BYv-_WXJS1tN1EJg)U_Ud+~qH*)Ss`jlJ8mOsJm$9QC~(R=QB~V%pu6 z?q2v;)d2n7lz8|S*`=VR(e@mDjZJ;oJa4mZe3wOue^!Gtu=RJpsM{k~v24hGZ_w7G z0YoVhIL0y1q}nCVL$H24)s18C0Tm23c3Dq!=KU*Ph9co59r&mmyTL_9A8P$TwSwGs}=`BRa1~r^_{I4L~<6@aU0|k5#T+ zA7>AeUCmROwd))Ji-3(M3nw0WiWj4;WE>=;k}cg!@4~`p*FUuY%Y6Tgop^mUD&Yai z$nu(7$b?s*Z#N8bu>6Y4G@T=OKa0#5sl6B=f)}YBjdmbDJFT`WNP4Cm_rXKYD|gWu zVm)XO9B}}Cd8I8|)v$6&Z)HRks~{Ar!Bj2^fxFC&Nhjk7DDQa^K2g-c!+wJFQu3TN&rz| zXqnwzqEnaLQ9YH1a64>TP|{<}RmaG5Cu{)Do=`EM@f_v@aO~`DU+24WOTH@R3nE9U z*&;i(mhouZqKTil1Jl25_;n)H9^>NMnh)9B-a?Dsj2x=TW_kQP9q=6i zRE)#QF;wsxi_0)|_G59_3YS8xwo9KeG$p$C1MO`Gr#OHZ5Qwt8hpQKf&U>|^z80lZ zBN)=-m{e|}N-axZzIQ7ZCv*w2(+V5$UjJbjto6avKflPe0lF*?B-r>3&_Uf4(k=Me z?Z`Xo=)3WMK_-GU$*pkw%53M%;y>-*7fxGP!mT_pedv&~DaZQx-1o^$@mtxqU;*4l z4PceL_)P(`Q95bJDxCbv?C6XIt*hy;Wd+h}jAMi?Egh_uRsidTd;?JY-e?9fhVbFF-b{doa?>NUcPz%BR=bGfK*k6OL>fjj_#s zbOb)DHS_2PlDxGs5BfG5EQx1nke}E$vj|w%#_3sf+He!mf;bj?$roZU1}7+Wo*fuP zby3xVF?Dno_=)V`x91n2AJ;Gy&oT(_BcZoOFHH)*v|v2;(7uZo5oOAhQNNaEo7{}9 zI&@{rqiY8a?~OGv-OIp|Qf4_Wq7nW5EGIwM){0Iooo5I$#`v^t!t7#SNDAj zt9pYM!)m&fh{e!}YdxnOXFv$wsWs7u(5AJx2`clTX+sq`=iXK-vpko&(9|*N^@9a& z=fcXt;j3&f7af|m_CQnER$jM@En~RiWfd^gJSCq0x;>Jz9X#plhQ7!5{!+`L(fUoC z4u89G^qdKaafuUYYe)!@YN5>GP1#)Z=+un`rIN#}PnT=Nvnt3g`O95b^6pEkmy&D! z(92OpRrl8`J&b3oN8X2B-Tw*U_;0~A8bRxVNar!}@JR%OJ*NKQ__YZ*gsOw%K2@AB z){;DdTH}}Rs}aZ9r-`He`rr(3@^Kbw`<>FWfm*as(Ro5_ymR~zZ0EOrI9QFVq*o}LQA+r#GE!UEh?~W;zg)oX9AdKv%9z z6DnhFp6fDowoxZe(@H55gK;Ohi(#afkja2*=J=i2H`z3?fW&Z-P?xG4%dKq z1BVm)OU@tD9H#ba9aWjC=a3`4*T$;9Y&s3oRer4>nj^ebc?R8Loq(u>uTB$J?H=x0 zt?&dIW>QB7gup5ISL0`*Yyy@J9=B_v2>S7?U3f+2S)oT@tN&*f((^P(K>` zf$t?D@wWY$tx}v5S8iEV!;&JfT*QZVQoPPVD8M&IsV-}iU}Rgx=N$ZT*5))qn68|S z!}WC5+Q5@Ax}f=xBO+?9w0_acbM5_8@b@szq&m@^cwk<)4ZV1|K1Nnwm+G3RDF#zn zKyhc*h%9h+89DpwCFco=yFG4hRBWWn@g`3CXp02@y`}%D=wkJ)exAK+QD(I|N)-oO z$l!=`ay{7ZQ&L^%AY@i!rV|o0It1A?FDi&bD~AYDG%mcu^|6<=7Ej?y(<}E71gCqQY#KD?Qh{`l!=0?f_-%X#H>t1*T zZ*7mfgKaZ%xNK>F5R3_+|Lz}}K2pd;_8G2CS`WL75Wr}6pL1Njx$1qoV(Ma_HI`1^ zoAkMSZmTas?^eX-X6S2(ZVA>g`zJ4T-NOi#+cfvq?Yg@mg8Dcl-UD8Q7t1big)Hfi zzC*!F`nhRegpL=fJv1ezJ`y*PHe9r^N%sko1j9m4<N;wePWGfP3C?=G`?Md^mlJ*06uRm}HAd|(l-5T86;n{rm{e#i z1SM`vMzQEfodm=+Dm4qlW~kKkwB~QsG^BZjt1!WC=9!OWWE-46{jw;%yV{+39?j~f&gPbL+wct57tVZ7cZw`d3njC8RRd?!m}iRF6)OEHxALGd$KU2C zUr|xbm&X$^;MN;PQlVlHqv`4u9&m70{h}k(u39(ep2APluh~wZRu??H^gh#xGc{P& zqp<8fn{*xP7cQ<>>gK0PC(z3KBih2JqHn+;gP)+)=QE(*o&XQ*d&y0*P%ea_(*+7zB#QaaKZlth*(-2kDR22MGjo6gyHpB+lnPWCbU=^!vt> z`;w3-QoqEep()j`4LX#YR)Oxe1xG}0ahhr73da0&HIaM>#hE7dCuHf%h(2D;Cy1f1 zSQfrPz3gV!Q?N&lDrjl(4O+;x_S~>k13Y6|9%;;sha4lkkdY3fe3`EN4nDAkH_>m2 z1Mxjgv+ z3p+n*k9<7M>v(1xaw`|`s;m)sCM~`mwx6-hzT;Zw}M z-OQhxqU{pX%Z`=GzR|u2PnLCcKM6WgD+UvxqbCcoc)UR4NzY|z_!)C8pRmAWqvirw z$6LKJz5&N?1brHp<#pSuVcE!@vjKMqA8}>DwN+olL2&I#$AZ z8CLLB_u@Bz1s=Zv$3LqF%I%XCPRkd>c$K{#iPg8hLg$&-X+<>$wz{-jYM)(}tojIp zx`O`Q_p6W0Q?ChxYqP?;2P_FXxt(ki=9f;*-(9QD*i%6fv0+YOI%AFS^|2&{ z8r#aV2Ciipk6YdK+P3@Q0JG0Wd!MF65KO}uy4ueqrtSP%B)lF>W>K$)FraW;#Gf1d z_#TIbRwe5B1OfTlr?t0k>N*t(>$XzSFl-ja_jDHi+u?4|w?{rRU0LQ3`(&M6ZtX2o zw}Gy#X{vI!Q=j&EglIcw2 zr+FvpxXN)tGKz_U%lSxi&n!JH-hEdDY?V-*da+0;X>fq~pAH+XD38?V`suC{$Kr3PG+S7%-CG-Np~!=vQca1)dtXZVo|WT_o5W|hWR8=Paf@@zht2xUKo0LkwkV^&xiY|+WDo40w1^MT|$JT%gZIjy{69>d$3+PV&?ExOQp52>`f5^1Mw{- ze_n$qL;TKN(57}I1lHc!{S&*j_W8*n;-pJ^9U0SMl~=i$wXd3)nqYG! z6%Fy?W5Ui;wV?CwwCTyA^A}30Qjh1FPHZglobuaUJwHY9Rb;`ICijo26BAYrICC63 zb$e-tJ$J|UfrZp7M1v5+5=(UsU;6l812~RZl^AVAmeET3_lhi)lRtlmrAT^#Cq(>dU?AZQ0jeg=xq3NJvyEyR^fv=+7W=KJ9Q<=E1i3@);A;9 zE2pZ!ThF+(2IelI{Mvb`xj;lh5T8l4O|CUr1<@f$VOw5A4FtxFBLPpf;k9tmd@)J}*c7FrO}G7g^IJ#!PwcA7YDmjv9ybIzUL z+!W}0(edjv=Dts5ZCaYJfi*lZ{Ru=)3?cX7n1i8%`s#CFgtfZTA%|K&)l!mR4|N!) zH?;^6UfDh1Di7-wkf+4Yb=vF<4e$5DWuJzAQ^x;4Gi5A?gnyQ@E#tfbm#86rMJchley%sD$Q(Ml!h=R)?G_S$Juc>63EC1HsIxfK-kNe#)M zOY89?za9`!->rE}Nki7YN%#8z*RQI%2x*1mO}qZcJ4Z*fd%dx;g-~;Q_bU%pw@i1u zk?*$h#}`~%t}*B==9q2$bQ_iw`SHybrO98!RsQqJ|(!82odC)EqG#yVBFKE_@Ir|)Z?@fIk=E@Bxl#s|JWFrcceWml=yegYDwK7Wqaij5AV2m%W+61&lMraF;pU&M zDu;-FxGO63#pVrST%)0r;h@3DtH5eupD4|kuu-DP@$C)!ry#qL(}KwYLml+G6s>o( zGaKi*E3peS#XIUeZ}Va^KN1J)C5_zoH@>r8h@2_@Am&4!%vl9nkXCG^ep*>t^)mC_ zk*)3!j(j(6sdU==MT~gpJ@kFGdbu4_odp%IY~G=n<*Xc^N(xq#in+cn<7%B;faLL3 znj^XZPID5xi^)7D63BO2yHxSa1Mv)ROgt=>LM@!2$2f78H!9iO+(h0mglv#2ez)c8 z+Kr!8(f6{VJ!Uj6#WP(f{7k~$bmCy~_q{UU05S0CC!H*oL`{uRZZw+E~1I(Mr|TK5x# zWl9Kw;5&2yVo&d-l0zVTWQunA7B)tj`3r-7e#Ck{N(QKDC0M&-)-sVc{N zRJ96g8{_ePqG*9M{Kw}N_318NFE-tKHkR}Iv=9rX$l+;w{-}|m+0B)loB*D7`fp)` zrj+12Kki&UEi+2VmPNRgI3>wf+tQFL6^V#rs0`bFj7VwDs+gNuIHVzhDXp@9G2)EpqAqX=RkS8HOdT4W%=GwC|hXIMnh!+`={fj?TLl&M?h!=Uh#DzVp#@ zC7?o_n+J7@M}}OV%F#R(^zP@g`2|l4x6$dtuSecK{b?3<&z(kvI)FGz(%pt{PWEZC z>?D=k-r>tIL6Z0h4b!?p`%gclN7?IG9cjRSyk2#(onK#E6kqj@ODHY29rgAr*`$4+ zDji=A2_^0Rs}E2WyOo5Ss_^Cae* zKZ4SRR38jx;~s3gj*PXWnygL3*XuyREv}88)ui!1mb1Uh)BoeIICA^?Y#-RGcB*uZ zM?oXP_G<1cQR2mRfmq*3hn~YcRC@{XJaDB6C=;n?y`I_t?HCp6iuI?J=VaKtm!!WN z@rJ)HbyWpsuEsCW$f*7u+e7-{dPLF%o2YW(-JDii5p&`@9;x=W- z56Qa(6l~9DMsi+D=P&SJ#>IoH^Y_nx330?rBz1S^OFC|I= zP@{Z?H?Wx#BGgU%6=&rI9G*?o5@%se!v%k9-5;`0{7-j#v1-*`>BZsFxFAQHg0=f3|m3$L^^kC*A-%MR@lnpAmeTJ?Lzcd}3 zep=2IIDD9k^s@W`!^dr-kk!Gh!_yLIueX7_Y_V8hAdjIK&iw+9sh|9V?43T~YQrLA ztR1k~hs*Z$Met+4&O%@L0nP&TjZmX|m{1c{JQTr9n4N0$Ivh{tc z*gh76NqkPmIHHa8T#}%^+XUzSv6WKlm_5wwt|nJZF^2t%Jracm$DnX_>~^n&HJy)x zCyqlE-8`4;k7mqAt_9v*N_m^W6jSwb#*0pUc(F%7BBy_L1pJ3@=C0yo$yS!PD0}b? z)Fu~pqQ6clofDIO%5xopR5yfQ!cW4C4EC)|bhD(1*H1f%e*--B*R(RfwF@7YXr$Tu zJ&kWE<=WG5|F9aPiJkupYkl z9=qc+!PQcVrNr+p8d~bT>~@o0@*Zxmf{7c2#YlH+ym0v_TE8_8o%Ipf$GSpF#oliV z9qu&vn5<#hWFJ|nd>AFm8yWyjs&lR-x9vxqL|tN*PwlB=Yg*P#$W7Xk*=d(in%Agu zT_be)tgnx=(z9~~3NWMPDkktq(jqTZZ);$!l1e(yqG+5(qg0RaOAb2wGK14Dg_v0# zHO_b21$4%-c!^`^(tY*?F){zL-G<6I$4kdGd?i|^MJc1nc)B|vfLBa`n((lHhXV~rEskWRS7 zThnR%P}8GDkx|(x|77A-t%B%E4&PnJV7)`ZD~?(Erh@S7hlgm13CU}hJu2(_igIFkO8km@s@JP^!UNj zjwNtwp}SC)X{YeuMtctT20dKVdkNW(%qw=sIbXRTv&wWbtg5>m!^Vv8aS*enMF5Y@ z>*A<9xO$)7a$>U%JN=xv1=;1Ku@cAMV-c2W7q!{9aXR!kz4(5^yDobu)*+>^GY&-QEQet4mJJ_F`@t-e zbn2MF-j5BTpbPIf!(6|Jd4|!XnmuxAD(Y%2Iq76QMrWPz(rbN=)mm)qX&u!+fMP`_ z_xZxC_r$_PkdGy|lBzB=RohcWuZC9_Dw_Mvy8rB17;BodjiPG(S@t7Hfo+>#{V~nh z_rPq^d{Qxjn>{IaMUQ9&u}5sshG4MLL11^G0O^;VxDJs5iKpourTqINYHbdnLPgty zH`$@u^;@c$NP`P{U83mu$K?{hD#P?j#$LDQ>x&FSPPoE|Akgk z42W7nK1a`<`;4P1tNH?oB|8I(#@^uFq$(9IyWeX51~dunZ~q1$@5!j603;-LosI4@KYpj~(@4NVk#le*=dbST-){C8waa!;H8xV(ebbVM* zs_Cznx=6&w+Or^;5=RC7vbwhy&bO8RQRMeycZPowNwgKOK>s@rba>7btj-Z!mf2^% z>Ib|38!(D}B0+_7@@(7r;O?Qdbe*N2r&t44E_Q1K_$}e~C+)?^ep-`vh?`fP(Of&v z|HJt4pX5y2e-D3&HM`K}`J%_>Y=EM#n%d>J-_AqSjPs^FNIrCpc#*Zs=1_9-?brCo z5(qALP^>UMQ{bME?MD$hsHH-6vozYbR1H7t-vZ{`S-0S6R2kSJTBULA;K9@{OmwMC61~}rpoX`5eQ@EeosQ%o_9;!Cd1i_D8$t^D~ zdg5%zAVueSsw%Xvr4fE9jk!|u45l2balT=07^6-2b-aCV;>XJVrK1h`r$d*S$4|Go z1pf0NP=w;&wwVhscyCaOGq5%Qp;%JUW!k*S)~}G%e8aOa5eW%KZcQj`b)P%UOuGCA zRASd97+N^jx4kz140b=!i-R3Equ*}rd|S&O@VABe3)3+e8*BU(gnSWG8{?t(gr!TdjPSkn$h@NH|h@cYO=-H zO|jO5jZrU`0GYNng_esZ#uYMk32R?AA40-=N5#^4a_}c51I+ z_MO$^lis}$eUxfsv!X$sq;2OB#PF{|4X{u>1y`8TVq#;;-qem4)yUvwln_a^^iUBG3q=m3|}k8(@t+ zezkcF7lOTF4m^GEae65-OWxa@jaF8xX7p0-cm4I63>m&r+An#{o3SJBQPpSd-?|4b z1Nx^g@!Yl)YB4!3A-dorVY*>CaPnT=$p-JhK4!pmGpE*~jU zP|`=V*e%EDZ31djQX?rQUso=2$(>Vr%=YAio!?MbkDl(iS$sQ@lhsm`z#x>%2_TSt zX51(?CN8aY&}WqKPDg=D8-L6QM5w>XoO_tH#gHe@_v}CfFB~FrOcS4QRWNyZGl4bA zJ0x)ik0(0Ll;|ih?Y)dp`!+W4SYiB#^t5MTo+A1b|53-TFfGu$t>~>Fm2XG@zAqo8 z@Ll1AXA+5b<~i6QC+G!i9A|=c*Z?z_8rHAnXzd^C+{Cx^8f+Jnv9dl?p(&}-6ai8! z8SBq~uN9wfbd{47HvwrTJxtXs7X=s|(=#c&tQh_x?3cL4oN$Y)6^mxcS=l=OqwXyl zY&ch_BH5k%bup1vdm|`RAQ#aba~MJ)?tfIm7ya2FZPmOwLoBH*OU06vKVILH-g;{P zR4RGfAyaIYq9GeadP``BeBuN)P#&Bjv&oH+ZxY=WM6>RVygE-LL{}{u>qzx&{84$!Uz=_x^>cEL@Sq~YwX38tau>u?Ra`;loc*pY1U((8&N_Om1gJE>#IhhoFbdhe zW4PxMCY8A4z9W|{)YhoaX1~XEbXPZJz;6JddGqV6$Fla9!Bnxk2HT<1xMAZ^!(;rB>s@{oZ-mNblHqC=7?h*gNs9HphEBYA0)z~rdG^lcZ*Nq`muq<{i+_7N-vGw8gDop|-VH|A-c@VZTv<$^!- zp;ZbDX;-G%?x`|FPyp@Ty#v5OJ2tehoWd}2Xod?$6<2;sCpc55kWobXnBkSkXNB=W z2T_HMxT#{1+TFsz#2PX)$w>Ch$X;2qgq^c30Go`tir( z;9>KO5B2L?E(Xg%$TJ^RrM2RWQmuw~S;o%RT9x9Xc3Je6yI3Yvz=X4kRcgx+41 z3yx{=z_(=Dx}_ufzO75NunAG*ZBA>BqbHOQ`V^EpF=3}gsOw>5 z(8*q%3qim9h{OAU!2+P@B!%gVir1}-f#>_qQ%Xl&yn=$lGgyvfz9lingo%H>b`u8-@tExKn&d@*-GMH6`OZ!4I)PM`P+K7hDqns z%JoO&fhmmn$-e>et7Hl=GuVz0Mg3Z}<;k#Ko+TpX7*$4!-wotL;jC*elo~j%X?Z`)loZ@b@k2Z z-qHRO01mb9MgarWxAS-(@?AA_O80!NBL%~#O{sO6;agh=Z4*xt-lBMsvIr;4&qF7% zwD%i7*-5P5Yvrgf1mc=i?aSnf1y?7%y{XQUJ*!j!L8R0|PF2LDsyjVVJT`|6LOKwlhlcHGJ%1w?Tmw$QII`YUQsU)5s)U?v~ z{phaP$0^SN`iOkB4r4VIrGk zCLvLZ8~QK#qJOE66v`a5=@XTbA5tQRt#nY5CFY3NOQja41XGR-8y8$qUkZEEkNJ?Yu2$q0XTiS);JlHV|bRi{vmgT;iC7&@&!%%7Rr1M$5;(~F*>o#ITyN?v% z@)HDi$^!QZ@X%FB^pP2IeNNj1!4`4QL$G6%O#SUPUmLq*fKsN&+2sUsZ6Ugv75{@;f|gi+w&13et}}F zMVrbc-e{rlf+P%5xt+2=gFAgW9 zF;eBlCCHzDZ(YFtIlGpsS8dDD)R35EL{Gi3rE(7nW8&s-hAE7Fr_R^*u1I0%f(xGY zvZ*-=E+?~}hS-4f7L!yWdZIUK2?ffd8onkS|3nhwq!YbFRh|Jq0{L22OT;-Zw`)TO zl&^6wx1k{~J?`eidf&fT#Zr~hHw$U`ApU7CGD98tyrfnb8cBJo*`;~t>S-?o9mAP2 zI8#7@-}ozBqs2H}p&?U2(DEFlqq8;BRI(kqqao$}CEb#-LP^Z$s;;LmMBdo?DQbLw zL2!Zgbm1e&${15QH!q#%u8ilHd&{~X}MBBuX(1M%rj#L$R@5(5t1(kMs`A))jDBV9wINVjwhNP~2P z^yRPuvgG+cKGfF5F7taMQ}GOY#dww9zFpfB^4*NC=m^pn39fV5I3Bb zP8{M<#q(H7T1NSmTZM{Cux>m(gKK5$;=x@zH2+uof9vKiE#-gr`d``^z&)J15mDk$ z0u%u!FA|a1|A>MCr(gK;1>VMwBQ)X6$%UK6`Mqf!+YahloL!vLhu{j@mgQfoX0069 zv}OTY5@oUx{#~a-wdY!V`tDdY4SaPO=!zm)kmi|G#P=AQAMqQPr; z-_bYY=OvH?qZrgr=7@fo7cU>Cou-8)^gDB*4}l2_3W>*g=hQviLmQ^|J)f7#dDL}Q z?y0@7n3T;C@Ho$inFB?*);y2f#T*r7MJeF)>W1Jqw3Jz%CVC5mZhjyJoq^Ve0$0&t z+3mcY6EtCfJQQD?(jmvs0F;Kd!2be5i?WWI)&lg5hZOCGB_d~Ej21=EaTtNO+as-hQHwS<4wIPL$b zBB#At9oFXP!_!XF!;gO!J3KLin_Y+`C|-2=#2JwElrK+ly5Jk$)?Ul zk_&h&ZK|4h0uwx0EDmdM5YlrkgnFZ=My%SjOf*TGMb0t|m8oV}jH$qU3B3_7{jQ3v z$8^4heNmf`Z`v7%Fy-%d8IGHsd9t4JR!wK~4{iqZ7Eo(XB0DW@x>NB06mtw037;ng z0^luqAtPBtSSlIhxG@3u>m{xLJh*uPf|q#j-iUtD9G!JActmoOZcEXguAqj6@vDB9 z!fUr6!naVJL6fjX6Bj_6bILOqx|n*SX_lxIkm@*lCNAF|NMZ(11=>m3FOeYa6@KYy>kaT~h7DgS$R{NpABL}M z$~$lz?75-7zuUQBLJQ?pS~8f6yEn{>HYxYn*IQ&zJ*eWq%vhf9#(0_Ra&o>Xbnz`r z_!ZK4H~GRSP2|145x(MjRqjdR_H;V2zT6(CD$*A{;I*)f1ihOk2R896pMV+P$IgCVkFtDXZJ+P2YUf`~)#~v!c(Ro6@GA8pz{*P!~~CaBafYn@{$rETGLrVgJssHj)aYvT4+)^*c4 zf^cJXP9@whq1px-go^3Kvr_5iAf|Uoi&7{Z_nTo4<>L$59KMpF`Uo0IE}{NlqW9JA z?gC~(xMV(wNibN2(=yfMRP2)H?{{CBvMo1b*FY-Y-9gW>(pK@8|WG0;CT8<*8dj-OB*MHKm%W=6eBS5#U>1Y zmG*>pu;*f$vgFJlYhv6M%$J6$r>4d&IWXVW?)a@t!rEHNla z-yd=0m6?WWqMvuBP%n$)dzPC$2KF$9+_^uRwj-o%4YzfOuZc~7*Q{6^v1K%LFstd^ ztVLO~sOJMUBz!?HD=_hsT#l2<6qyLM4owA+vJxcrCD9IqbkxIlVBlw=u`l}LYaEq~ zUZ?tSbw0O{8%riGNV(c~Dm4ZFqJj?er!SkQP;$jt19!J^=6)&Q8=bXE&gF?37vBm} z#c(8<*QPeFDYkC+T8NH4*^1S!C!9ezTCZ~MfRxo(*LX(06_P6BzZR@A3ffvM+^#)UJRoeSRQ)D@YR=<`_ zjeo3%6HfJd(|l1Xo@dEdAIR&NVaX#zkcr&y8c%Q$z5v1d1McbazpT^q z>2sjxQ!gTw{k0!ngko%{4|zk{;v9Rl*YnOaG8M`EA}SYbm^$j4CiTTkN<(18dTLJS z)r%I3LKo`EHyzBtFixbWR%&x1)r>ch_HsS3$ZDex#)CKiPb2!HC90EmVBWaJnx6L4 zLq^pcknW*5uuxJDq=B{I;@2ZsT=wi(ocg;cvpL_(j+Cwg2lcgiYv+3S>p@jyrrl&x z7f(^b(asF|4;BY62Y>)T9!4-IZ1^*`mWrFuCK*8$%JG&;A?XCkuPCIC@I#D~9fNi;Z>2Na$sR#Fe$%tGBY$a3y;NBz)tkq9QH111`RxDW3)zPyW#zOyNR ztImQ#6Rha&^>&Ce^@@l(c{GM-*lHPxL@>jNStyjYeVKLyl!!Dt-A#t)PE5Mp|+ytYcR%6fHT(yaZUU>bMh&MKlb`F}q8T*IlI5``Ohtsgw0DWboYg2|K zWCswWC4#My94OU5EWXH&lVywJWv4phDtVRqy1>g|kxC3DoA6d~)vnsd?%kyx?iDI> zK@Lw;+5plgy>8%1&F0{5$LCmhtq(~?GO0U4tO@4QJr%$`8ytV^S@<#tS^m6~rsq2$ z@$=+A>pz|MYdfZBqJPz{jeOShS_8C7b)P09pVI}4kabKh2COk^`mzD;+`07Rpd^m7 z*3nY5B)Lu)S?AG7C9MhLln=sLz6G2%es-m?|GBj5Ixk*2R1kp__RT$GW?xl5TzGfE zdi{^FDK4^(G=C-j@MKrWzBal18uC5{1rPSBwRVgl&eeM30fhqayklnBlr>!CtDL%+ zCi88U7)g<{;<^V1i!0J$t!82j5HGwxD>uJnKdguV3rWo<(etjO-TO(whQq!I^h4M>~}Pr?e| z<>QoYmsj1jwWHbTt9g>J~7}sr}F=<_CG%uV0|W?uh`e-%k$30yY#thECD1=5FSW z1z-O*y#+uxaxQYH=3-{UhU!Js=Dgj(w)9c z8~Z6t+gbclodzO+Ajrf-72TM_>>qA2>d409n?Co<=J54#QC>$8qDD?&&{SR(0U-pt z{&)(rCj$8%WJZ%S>r2L$8s_obj4XY0mm+i|Pmd96fhZnG)E>LKGEtXRBgSwu z=D9Zmgezo%j$FjEALO}quN1^6EldoSu$NrQ4V%H^#N?vmXJ1Qv%sKh?sEg&A-Shn) z0^|^53(#Cf{`2M$@U8Dpr+P^4kB`SavDwKCuon$W<0FZj+=v`-9DsV@$%Vs)Lgi{o zfW`gMn1Mdm#tdiKfk4aC6}aFs&W|@8-XjDH)mTPw`@=<3*VbkFS@W;E%P)>km#YSz zM&WRL+mv=@X>%7KuW=4@jXVstu8?cjR-q=5e;z}QHeGS2plRZBy7}PWz47ZQ^W#r- z-Aw*)LJ_%(@`$x=6XLVfw`HxcC;KuWGVXF98y=oWp2@rZy@tSO`$>`&(>|!)yb738 z-T=rO=6Pb``#P~?L5A43em#RoUQ^#Pb~*XVgYy-KZmhJ=eB9z{*QWzW>@6U2d6A*7 zEx2zm^Ql&wpwd zZ{OGfjS!pTmH)Z*fNX;!2-AI~#QODJtCV74qe(B*FzZIYY0;~nc}oq6;ju+?6rqTe zqq^QO2TXZD@;F@WQ1s_Qf$)EGT_bXP%j_}BYLT2fy zHdyNpvj$J;>yf(&O3Q0dcgc@2qi+-Jn<`@nG(SL1gaGhvT@r_HtYdTvv@K$OMGQZR z5iX`(T2{9+dCC zPJo|pAQlM1q}Mqu*jli=UDq#EkL@?!28`x<8RTtl7jB72H$9{e(6gO9Aoiapl~>#Z zYhP`x-U0?~%OA_zzG#<75(W0AISIwWZvi7D>zM@-+A})_jjYX4&yz89^Z0@|j!z?d zjqUQtd5}Z^9)CcoK5j?Mh05tA*WsW9%5nALxp$n8Nkpb0TMZt2?6R*`9(h`FydDz0 z>eTe))yA7lCN}|fvWolSDE9(wzr>`xxU7JelOzJ|aML@>%+!C-XmdI$BLA?pUR5=j zg$2ID`7-Z3GYoWof4WA|0kURq-upm|*GOAm@CZq72&=OnOT*|=T|@zTjAaYGn_Lh=eyv9S?|0U`fg--zZ~P}EMz>?676+b z#G5S0*&6=CM|)JA1?z;bzwnF)0pdwZ^9cVr_S}2+#WygUc+B0}7D|Q{^`uB9kA(es z$0NNQ^m;AN_2}!5APs}m3D#v;rqY9DwsDwo&2(uq5nP+uR&`ngX})2ilMa7F(C?1b zy{A-c+|ne1SE_x2s3{T;@jrU*JX|bg z@p$kAdEWnMr)9f`R3S0=SU_NREE#lW3Nz(rkA3Tn8-haX7uAP9f7#s3=r?vCkVoR(1FUJqF{0nZt)yjo0)U}E7ibmFn^2rbelj9{N*vr`7%;f$rQ9NW6# zUjV&n2}1&|;=2ZeyZ(oKue3<8XFJ6})T7_Us5`>0qBUSyR{44&#Rkub{{{q-m>H|u zpw4{T@Mc0L*CW+QEvcx!`4fprG#lOQ>-hr&jsVm?+xt zE<(FJ9$rHAbKF3JRnxC{LJ^*gGsSd0(8irXk%oC9q~d+k0>r2=I=(l#rZ6xuXbrSf zOf29-Fm1u@97Un$fax)gpX}C>|F=MT)1E4U_q&*A^qdHZ3O@r{fCR&fqxdTyhhm zKpnCfAxo!#qD4xQ6o)*XNhTE+NXd4q=`c%Hi@H=Uj1h>@KUu6$YCm?_k7ggRlDl?N zK&}jE5%dFjvAr+$b@k0a={9j+gyw9&y}@f$3bmFps8L~80uqU?BSi)wYCTjGp&l1k zU#qg9>1=d!?j){E(c;dRstKj34lclZX^V+-Ik~K1Jat*MjCwy0BQFrTKPXq`39*0) z8=`<8l;yBHGgsGnC~j_y5MT}rz(;3Ox|X2y8p_@*hYhhmuS-vB*5Af$XYbc z^g%Mc0`?q3wsJV|%u^9<;}xT0FFOB8R(I)mWn7@vU@IEmkBa8E=M9Qe5S)se?i8ex zaYK`2KZvoae1|N0P}dLxyy9tNdx#0nuW|L6Mbomn(N#Bo%gG;`yz*W~wT2mGwG{%|%PdIZKZhQw zX^?4xv>cRhts|Qpo(TT*v91)q)hE~h%%)VrW4jPl@jNeB1vR<&Q3x}%}^4A?e!R5ZK! z!gido@C@3ktf#St`^kW1Z;S@aX;!yDS>dUI-d1#*(UH<}nSQ7w7q!uST4 z^C#ko_Cj3Vp$zU_%=7-xwzHYD{{BPyrwrH3pE!XTb|CPi(8 z6aPwGpaW7iMIHoPlaf*Dt;dC%mEyu$2q`2zEnowJ<8OwT-`bRZv@%3-j(qO)C zRlRz2W`cGjuv@_I``OPK@*UjXX^B6pQ!Vxs#m4zy!4p8ewfG64F3-a+pb~5Csuv1^ zzwUIhW)xA6IaJ2DBg3-o&cn#swf#}1ay4tiF9UZbF5M$wq2E`h#pX3dIQ+(HCJm08 zW0bVW<-hr=S%swn4T|@ye^{j@8NWk0reqv=symb_K%nKA@Kj98Nxn^L%#JJIHDcDR zN9@Dr!=zaYo*Y^7cb1760D?fJ<;t*E#^5Zb^si~3qu)+mt~kcZka}rzcRJ<|MRq~c zbtwF17xqmRMq=fM+|zwptwLgErfZ&nNULQau}wAX66~m~ZM%O>5er4TpuabnAdMeX zFeMSYl0@@H=#E7g8*3PZk-z7NQ=6!NoE3fAmC!r$t8ifY0dh7mN^VcleI&iTfarPW z)N-WpP9)sig#q#&aHh={NDxkIZBR06@aqw*=cQ1aINh&kL7^O2+8(7jOP}7@Wo-Gv zE`ppTmJ4`8D`P07S>mgm{29mVPe&hjr{(?_saE+9-9;^|X()g9s+~5#WfN;!vZMGFPiYH41Mo>M%Lp@F+_+^u5 zqJ((K zt#PRR9^@Q2>Gr+4UGzb)Q&PsIW9&W4k+w|EZ zwWRA#NGzj}r*9AZZLvqsg<@6P%u6^Q`{Fz!UvfRQDoX@!SxqRG>?5sod-Ga2g;^6p zQ<{Tx#}feZ^(~s0jak~=0;sN*|A5(V0iO!xcEpbZHrPJ*IW1bYR`j{$cSCHYF$t?# zS0h_1D85ZvJ#&eIy4}Zl-IigXWI%Wx9RW{$*zW zQ|-Td!?#42ZNFx|1=tQ9#+xYD1k8M^`0RY0uGsq&MvNz*@$d1BF7x2wpknC3E#Taz z_~N68;*!PZcSLvW$l(cI=KtY=bZ>3}iuLH?cjWa~?fO`M_o{8nY=6@U|90wl3lN~K z7J}{+T{3pw0;a33@(h0dbKm>__+-7mTeh!5g+E4bc+b1`GZb$D54DYs|BJ|=U3-Y+ z*00%9nQLAw8MM7ys*AQaE<##E)~GGsj+RVD%6Tv`kv3@q#iFr)0VFUm<7r8;$u~?( znASB(=B6r*g`ToW1tzZkjJNO-b>e}Y920?#N1ehh#Vt#S0CgIrD1cn$n35TP~xHFCWM+0hhEz*|bIt zdRBulEBCLr9(ilVUahW2@+-GIWb3RJ;pHNcnITI7{FvDQMnHc#lk@ht>q@nI=oCOb zcdA_1SQ>3>rQ5yG{YFV{4FtQT%C`VKzPck2%fon0%M=gsf;waoVVmQ@j)A7Io=OO5 z=y7&_oHWiRI8|pCbeH5lW?=gO^Hi0*yjPn)1ynziYWUc3C|~U-F-pUOl;nr*6By<+;g$w-8e%ed@(Cwr8ULW zCdUq>lLO+-b^)&U-LULo;U!esnwoe)?og!!t4F>Etg~DeNeubtn`ZxcWZ>TT^f@rb}qVL zVZ=RrLPKJ;{rAAsf$xxJHXbY)So_mz93?-b0aqaGnsCM{&50uOoXwUqG5n+1gm|v` zh(|Sij9vBYl}?KCVy1xo0+tn_<;m|xH`}B4n(b>gx0(l_!DSO#C&X4{L7bcxMN{37 zW;68FclhxQ*M$5+mals;(@02^Lyhsa$Ek>SMm=c*VPu!32X3YVeo}s|Yr?vWI8xAR% zWUzb}MF%>SfH%hAsbIow2kWudb?;xm=uKhFjqPco8g=E^r*Y zmWHavyO5t;itcNrkvHmIj;beQ`9+=x320Ri#1c&2PN^gSBh4;MJF5EGMAB>Ok&@Gk730rmBD{VszB)>sC(yScvhr->8rEaM< zFcaRjaNIIlbPKRh9tjLkUtTwmf9CrKqF*Eji|M&ZE^b)bls?)|xaalFiP$@Cn;V8HHD$eCq@~R!Fat$hpul9ua!v+LqMlwZJ zH_dFIqkZ9w68SdeUdgGD9q9dZy|uU+NjfGkw32|JngGW>*r)AUWE5#Vlbarrk zQq^krrunx63hv_9xgWV>Sm%edbUk9sH_#eVvF^k4)gMP5nO3k3*IgS~a z4`j%47UAGI5jgemOlrh=aqZjXq{&SP@kFy!?dDDV8k3c)9m#9nDvjE_vYuLl>HW{_ zdNMyNPSi^T%FV19^T*2VQnflrkfnm#l|YLb+Pjk{E@fq;k%dBoq$x6!d6OVYJyo^C zt*r_l@T=jJ7U>HYQv7XT#jmwUev* zU$jgHMja=(Q%W};JN>eK-Jr2mX@<@#WZwDEejrIibe1&QJG|aXvVo`Z-02JJ_%^ed z+wL%`!PC>pKV!Gs*o(V8<~RHMw!5Pi-0z{4dDmSW!77i-B==+0$kvb7<;O@ZM*RaS zEK`$q&jig<--aY)g90xHrO|wkuihpW(@H84xnYw#bDJX|!4GFnJ0<9eCq7_OXKzrd zLlRsng0U2>%AwMh>c53Ry0A0CRRIlSWe9O2m9H@k5<45_*g$GAKPd5G#(+n8xXI>h z6~&iWb2WM2af-=zsS^63dO6nN6E0)rn83B?Vqu#C2uVaI}%UMkF;umsRM=NSD!P=wgg4u3ckE8j|+zmi% zxkyn}U+%B-RCr5sg2V3b#|m{*OznhaGxB6dMj+MveoDB(3e_yaY66w78A>w6JM-_G zj2m`arXiHKZ+xX)_s_jE1fV{AvV_vO}>0xd8rdZ4HO0pZhRVupYffVph_i6W*&b%f#YLsBUbBRANUFVNw$4DF2ZPw_ za^aSSw}8zF8M>JTHW|Fh?pweZ)J0(~VkV@ya8%dhy2#gUXpiZ-Dx326r%8DS;nDiY z{hdiQnNRH7E{FsMk8!!bP?v1!42@(Cv((8X9-+_s`J+@$dU9$u+Q0Ezr`!OW3PORT66OZ&vXP#(L{ z97ab-Hs@Sx=rN^5W|kmwTscB8ps54!AJA;b-MBZhrFFLNkA?1=04@ZFXImANVrbRk zKJkLDBbiq``329}GQ3N;sco3wxwz_9viR&IfE+K$EFLEChTZ}e3b4VmOvTlW&M9m% zuRacBV8}2qwh@ujZdm&pHU)XMcPR_kZ}>|1ev&>PfBxcGox}B^q}u23CVt9gN!`~S zRz(Aa?-iWhdOcvbQ_EOy7-)W3(b@%boXO$|pJ73%{W6YCiyfQf!fPNc734I@sbvlI zErbEdhc*Lhdj3tqHr^PC=_IWe#`Cg$g&9UZb$ecAwj|V+YM+(~KV@MZQCf~)QOo>M zAcVi+US>}<8tBZ)~0GdY^OQwH_kCZz9v6-z~M>rzvXJ=L-B# z&s8|ZXnD2E0_gu+NTeZGARYDzdp3{eI#&Dx%nW>b%x*X_IHxDwPHs+l+Q z4D6cc2+kz^}Ku)XK^mkv@`f2%b&u>-`ibh zU_>ivK8!HvZ3rm%Atxu0dDlv`MpnkYG0PfS;S74Ic877d0AdLELJbixcT>$Y?}YK| sbc [!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 +Due to a bug, there are many duplicate folders in a file system. You are given a 2D array `paths`, where `paths[i]` is an array representing an absolute path to the `ith` folder in the file system. + +- For example, `["one", "two", "three"]` represents the path `"/one/two/three"`. + +Two folders (not necessarily on the same level) are **identical** if they contain the **same non-empty** set of identical subfolders and underlying subfolder structure. The folders **do not** need to be at the root level to be identical. If two or more folders are **identical**, then **mark** the folders as well as all their subfolders. + +- For example, folders `"/a"` and `"/b"` in the file structure below are identical. They (as well as their subfolders) should **all** be marked: + +- `/a` +- `/a/x` +- `/a/x/y` +- `/a/z` +- `/b` +- `/b/x` +- `/b/x/y` +- `/b/z` + +- However, if the file structure also included the path `"/b/w"`, then the folders `"/a"` and `"/b"` would not be identical. Note that `"/a/x"` and `"/b/x"` would still be considered identical even with the added folder. + +Once all the identical folders and their subfolders have been marked, the file system will **delete** all of them. The file system only runs the deletion once, so any folders that become identical after the initial deletion are not deleted. -**Example 1:** +Return the 2D array `ans` containing the paths of the **remaining** folders after deleting all the marked folders. The paths may be returned in **any** order. + +**Example 1:** + +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: paths = [["a"],["c"],["d"],["a","b"],["c","b"],["d","a"]] +Output: [["d"],["d","a"]] +Explanation: The file structure is as shown. +Folders "/a" and "/c" (and their subfolders) are marked for deletion because they both contain an empty +folder named "b". ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Delete Duplicate Folders in System -```go ``` +Input: paths = [["a"],["c"],["a","b"],["c","b"],["a","b","x"],["a","b","x","y"],["w"],["w","y"]] +Output: [["c"],["c","b"],["a"],["a","b"]] +Explanation: The file structure is as shown. +Folders "/a/b/x" and "/w" (and their subfolders) are marked for deletion because they both contain an empty folder named "y". +Note that folders "/a" and "/c" are identical after the deletion, but they are not deleted because they were not marked beforehand. +``` + +**Example 3:** +![3](./3.jpg) + +``` +Input: paths = [["a","b"],["c","d"],["c"],["a"]] +Output: [["c"],["c","d"],["a"],["a","b"]] +Explanation: All folders are unique in the file system. +Note that the returned array can be in a different order as the order does not matter. +``` ## 结语 diff --git a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go index d115ccf5e..8b89fb2ea 100644 --- a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go +++ b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go @@ -1,5 +1,108 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "sort" + "strings" +) + +type Tree struct { + Value string + ValueIndex map[string]int + Children []*Tree + Del bool +} + +func Solution(paths [][]string) [][]string { + sort.Slice(paths, func(i, j int) bool { + a, b := len(paths[i]), len(paths[j]) + l := min(a, b) + for k := range l { + if paths[i][k] != paths[j][k] { + return paths[i][k] < paths[j][k] + } + } + return a < b + }) + // 将所有的子目录序列化成一个字符串。之前有过这样的题,搞成字符串 + root := &Tree{Value: "/", Children: []*Tree{}, ValueIndex: map[string]int{}} + var buildTree func([]string) + buildTree = func(p []string) { + walker := root + for _, sub := range p { + index, ok := walker.ValueIndex[sub] + if ok { + walker = walker.Children[index] + continue + } + tree := &Tree{ + Value: sub, Children: []*Tree{}, ValueIndex: map[string]int{}, + } + walker.Children = append(walker.Children, tree) + walker.ValueIndex[sub] = len(walker.Children) - 1 + walker = tree + } + } + for _, path := range paths { + buildTree(path) + } + + var buildNodeFlag func(*Tree) string + + pathToNode := map[string][]*Tree{} + buildNodeFlag = func(node *Tree) string { + if node == nil { + return "#" + } + if len(node.Children) == 0 { + return node.Value + "#" + } + sb := strings.Builder{} + for i, c := range node.Children { + tmp := buildNodeFlag(c) + fmt.Sprintf("%d", i) + sb.WriteString(tmp) + } + s := sb.String() + pathToNode[s] = append(pathToNode[s], node) + return node.Value + s + } + buildNodeFlag(root) + for path, nodes := range pathToNode { + if len(path) == 0 { + continue + } + if len(nodes) > 1 { + // 有重复的 + for _, n := range nodes { + n.Del = true + } + } + } + var filterPath func([]string) []string + filterPath = func(cur []string) []string { + walker := root + i := 0 + for ; i < len(cur); i++ { + index := walker.ValueIndex[cur[i]] + if walker.Children[index].Del { + break + } + walker = walker.Children[index] + } + return cur[:i] + } + in := map[string]struct{}{} + var ans [][]string + for _, path := range paths { + res := filterPath(path) + if len(res) > 0 { + key := strings.Join(res, "/") + if _, ok := in[key]; ok { + continue + } + ans = append(ans, res) + in[key] = struct{}{} + } + } + return ans } diff --git a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go index 14ff50eb4..364e8e454 100644 --- a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go +++ b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go @@ -10,12 +10,25 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]string + expect [][]string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]string{ + {"a"}, {"c"}, {"d"}, {"a", "b"}, + {"c", "b"}, {"d", "a"}, + }, [][]string{{"d"}, {"d", "a"}}}, + {"TestCase2", [][]string{ + {"a"}, {"c"}, {"a", "b"}, {"c", "b"}, {"a", "b", "x"}, + {"a", "b", "x", "y"}, {"w"}, {"w", "y"}, + }, [][]string{ + {"a"}, {"a", "b"}, + {"c"}, {"c", "b"}, + }}, + {"TestCase3", [][]string{ + {"a", "b"}, {"c", "d"}, {"c"}, {"a"}, + }, [][]string{ + {"a"}, {"a", "b"}, {"c"}, {"c", "d"}, + }}, } // 开始测试 @@ -30,10 +43,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 553abd6f9effb9af72203d31b95c4eb51b35988f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 21 Jul 2025 09:14:23 +0800 Subject: [PATCH 342/450] Add solution and test-cases for problem 1807 --- .../README.md | 46 +++++++++++++------ .../Solution.go | 33 ++++++++++++- .../Solution_test.go | 30 +++++++----- 3 files changed, 83 insertions(+), 26 deletions(-) diff --git a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md index a85c563e0..fafaa8251 100755 --- a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md +++ b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md @@ -1,28 +1,48 @@ # [1807.Evaluate the Bracket Pairs of a String][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 a string `s` that contains some bracket pairs, with each pair containing a **non-empty** key. + +- For example, in the string `"(name)is(age)yearsold"`, there are **two** bracket pairs that contain the keys `"name"` and `"age"`. + +You know the values of a wide range of keys. This is represented by a 2D string array `knowledge` where each `knowledge[i] = [keyi, valuei]` indicates that key `keyi` has a value of `valuei`. + +You are tasked to evaluate **all** of the bracket pairs. When you evaluate a bracket pair that contains some key `key1`, you will: + +- Replace `keyi` and the bracket pair with the key's corresponding `valuei`. +- If you do not know the value of the key, you will replace `keyi` and the bracket pair with a question mark `"?"` (without the quotation marks). + +Each key will appear at most once in your `knowledge`. There will not be any nested brackets in `s`. + +Return the resulting string after evaluating **all** of the bracket pairs. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "(name)is(age)yearsold", knowledge = [["name","bob"],["age","two"]] +Output: "bobistwoyearsold" +Explanation: +The key "name" has a value of "bob", so replace "(name)" with "bob". +The key "age" has a value of "two", so replace "(age)" with "two". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Evaluate the Bracket Pairs of a String -```go +``` +Input: s = "hi(name)", knowledge = [["a","b"]] +Output: "hi?" +Explanation: As you do not know the value of the key "name", replace "(name)" with "?". ``` +**Example 3:** + +``` +Input: s = "(a)(a)(a)aaa", knowledge = [["a","yes"]] +Output: "yesyesyesaaa" +Explanation: The same key can appear multiple times. +The key "a" has a value of "yes", so replace all occurrences of "(a)" with "yes". +Notice that the "a"s not in a bracket pair are not evaluated. +``` ## 结语 diff --git a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go index d115ccf5e..7267d8fcf 100644 --- a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go +++ b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s string, knowledge [][]string) string { + values := make(map[string]string) + for _, v := range knowledge { + values[v[0]] = v[1] + } + + sb := strings.Builder{} + var key, replace string + left := -1 + for i, b := range s { + if b == '(' { + left = i + continue + } + if b == ')' { + key = s[left+1 : i] + replace = "?" + if v, ok := values[key]; ok { + replace = v + } + left = -1 + sb.WriteString(replace) + continue + } + if left == -1 { + sb.WriteByte(byte(b)) + } + } + return sb.String() } diff --git a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go index 14ff50eb4..a34b43482 100644 --- a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go +++ b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go @@ -9,31 +9,39 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs string + knowledge [][]string + + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "(name)is(age)yearsold", [][]string{ + {"name", "bob"}, {"age", "two"}, + }, "bobistwoyearsold"}, + {"TestCase2", "hi(name)", [][]string{ + {"a", "b"}, + }, "hi?"}, + {"TestCase3", "(a)(a)(a)aaa", [][]string{ + {"a", "yes"}, + }, "yesyesyesaaa"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.knowledge) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.knowledge) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ec0f38a51eb44e4b22b1e8011221b998e55a6a46 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 22 Jul 2025 09:15:18 +0800 Subject: [PATCH 343/450] Add solution and test-cases for problem 2413 --- .../2413.Smallest-Even-Multiple/README.md | 23 ++++++++----------- .../2413.Smallest-Even-Multiple/Solution.go | 7 ++++-- .../Solution_test.go | 13 +++++------ 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md b/leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md index c16d14f57..f0541420f 100755 --- a/leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md +++ b/leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md @@ -1,28 +1,23 @@ # [2413.Smallest Even Multiple][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 +Given a **positive** integer `n`, return the smallest positive integer that is a multiple of **both** `2` and `n`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5 +Output: 10 +Explanation: The smallest multiple of both 5 and 2 is 10. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Smallest Even Multiple -```go ``` - +Input: n = 6 +Output: 6 +Explanation: The smallest multiple of both 6 and 2 is 6. Note that a number is a multiple of itself. +``` ## 结语 diff --git a/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go b/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go index d115ccf5e..ba225bb4f 100644 --- a/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go +++ b/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go @@ -1,5 +1,8 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + if n&1 == 1 { + return 2 * n + } + return n } diff --git a/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution_test.go b/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution_test.go index 14ff50eb4..13ba7368d 100644 --- a/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution_test.go +++ b/leetcode/2401-2500/2413.Smallest-Even-Multiple/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", 5, 10}, + {"TestCase2", 6, 6}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 774945f8e0773d886b9fae7bc6c1c9ff8018b858 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 23 Jul 2025 09:07:52 +0800 Subject: [PATCH 344/450] Add solution and test-cases for problem 870 --- .../801-900/0870.Advantage-Shuffle/README.md | 23 +++++------- .../0870.Advantage-Shuffle/Solution.go | 37 ++++++++++++++++++- .../0870.Advantage-Shuffle/Solution_test.go | 21 +++++------ 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/leetcode/801-900/0870.Advantage-Shuffle/README.md b/leetcode/801-900/0870.Advantage-Shuffle/README.md index 78cd5d817..a6dc7240d 100644 --- a/leetcode/801-900/0870.Advantage-Shuffle/README.md +++ b/leetcode/801-900/0870.Advantage-Shuffle/README.md @@ -1,28 +1,23 @@ # [870.Advantage Shuffle][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 two integer arrays `nums1` and `nums2` both of the same length. The **advantage** of `nums1` with respect to `nums2` is the number of indices `i` for which `nums1[i] > nums2[i]`. + +Return any permutation of `nums1` that maximizes its **advantage** with respect to `nums2`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [2,7,11,15], nums2 = [1,10,4,11] +Output: [2,11,7,15] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Advantage Shuffle -```go ``` - +Input: nums1 = [12,24,8,32], nums2 = [13,25,32,11] +Output: [24,32,8,12] +``` ## 结语 diff --git a/leetcode/801-900/0870.Advantage-Shuffle/Solution.go b/leetcode/801-900/0870.Advantage-Shuffle/Solution.go index d115ccf5e..0f8bee839 100644 --- a/leetcode/801-900/0870.Advantage-Shuffle/Solution.go +++ b/leetcode/801-900/0870.Advantage-Shuffle/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums1 []int, nums2 []int) []int { + indies := make([]int, len(nums2)) + res := make([]int, len(nums2)) + for i := range nums2 { + indies[i] = i + res[i] = -1 + } + sort.Slice(indies, func(i, j int) bool { + a, b := indies[i], indies[j] + return nums2[a] < nums2[b] + }) + sort.Ints(nums1) + i1, i2 := len(nums1)-1, len(nums2)-1 + for i1 >= 0 && i2 >= 0 { + if nums1[i1] > nums2[indies[i2]] { + res[indies[i2]] = nums1[i1] + nums1[i1] = -1 + i1, i2 = i1-1, i2-1 + continue + } + i2-- + } + index := 0 + for i := range nums1 { + if nums1[i] == -1 { + continue + } + for ; index < len(nums2) && res[index] != -1; index++ { + } + res[index] = nums1[i] + } + + return res } diff --git a/leetcode/801-900/0870.Advantage-Shuffle/Solution_test.go b/leetcode/801-900/0870.Advantage-Shuffle/Solution_test.go index 14ff50eb4..43c69d60a 100644 --- a/leetcode/801-900/0870.Advantage-Shuffle/Solution_test.go +++ b/leetcode/801-900/0870.Advantage-Shuffle/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums1, nums2 []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 7, 11, 15}, []int{1, 10, 4, 11}, []int{2, 11, 7, 15}}, + {"TestCase2", []int{12, 24, 8, 32}, []int{13, 25, 32, 11}, []int{24, 32, 8, 12}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums1, c.nums2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums1, c.nums2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 457c4b48ad013752e32a04c0a8fd6a5729757a8b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 24 Jul 2025 09:35:15 +0800 Subject: [PATCH 345/450] Add solution and test-cases for problem 2322 --- .../1.png | Bin 0 -> 20524 bytes .../2.png | Bin 0 -> 16868 bytes .../README.md | 48 +++++-- .../Solution.go | 120 +++++++++++++++++- .../Solution_test.go | 24 ++-- 5 files changed, 166 insertions(+), 26 deletions(-) create mode 100644 leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/1.png create mode 100644 leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/2.png diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/1.png b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/1.png new file mode 100644 index 0000000000000000000000000000000000000000..b25151a621839d3ea7e74f4163c106ac8f1bfa72 GIT binary patch literal 20524 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 literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md index 0bc3f2043..d74d077d7 100755 --- a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md @@ -1,28 +1,48 @@ # [2322.Minimum Score After Removals on a Tree][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 +There is an undirected connected tree with n nodes labeled from `0` to `n - 1` and `n - 1` edges. + +You are given a **0-indexed** integer array `nums` of length `n` where `nums[i]` represents the value of the `ith` node. You are also given a 2D integer array `edges` of length `n - 1` where `edges[i] = [ai, bi]` indicates that there is an edge between nodes `ai` and `bi` in the tree. + +Remove two **distinct** edges of the tree to form three connected components. For a pair of removed edges, the following steps are defined: + +1. Get the XOR of all the values of the nodes for **each** of the three components respectively. +2. The **difference** between the **largest** XOR value and the **smallest** XOR value is the **score** of the pair. + +- For example, say the three components have the node values: `[4,5,7], [1,9], and [3,3,3]`. The three XOR values are `4 ^ 5 ^ 7 = 6`, `1 ^ 9 = 8`, and `3 ^ 3 ^ 3 = 3`. The largest XOR value is `8` and the smallest XOR value is `3`. The score is then `8 - 3 = 5`. -**Example 1:** +Return the **minimum** score of any possible pair of edge removals on the given tree. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,5,5,4,11], edges = [[0,1],[1,2],[1,3],[3,4]] +Output: 9 +Explanation: The diagram above shows a way to make a pair of removals. +- The 1st component has nodes [1,3,4] with values [5,4,11]. Its XOR value is 5 ^ 4 ^ 11 = 10. +- The 2nd component has node [0] with value [1]. Its XOR value is 1 = 1. +- The 3rd component has node [2] with value [5]. Its XOR value is 5 = 5. +The score is the difference between the largest and smallest XOR value which is 10 - 1 = 9. +It can be shown that no other pair of removals will obtain a smaller score than 9. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Minimum Score After Removals on a Tree -```go ``` - +Input: nums = [5,5,2,4,4,2], edges = [[0,1],[1,2],[5,2],[4,3],[1,3]] +Output: 0 +Explanation: The diagram above shows a way to make a pair of removals. +- The 1st component has nodes [3,4] with values [4,4]. Its XOR value is 4 ^ 4 = 0. +- The 2nd component has nodes [1,0] with values [5,5]. Its XOR value is 5 ^ 5 = 0. +- The 3rd component has nodes [2,5] with values [2,2]. Its XOR value is 2 ^ 2 = 0. +The score is the difference between the largest and smallest XOR value which is 0 - 0 = 0. +We cannot obtain a smaller score than 0. +``` ## 结语 diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go index d115ccf5e..775495e53 100644 --- a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go @@ -1,5 +1,121 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "sort" +) + +// minimumScore calculates the minimum score achievable by removing two distinct edges from a tree. +// The score is defined as the difference between the largest and smallest XOR values of the three resulting components. +func Solution(nums []int, edges [][]int) int { + n := len(nums) // Number of nodes + + // 1. Build adjacency list for graph traversal + adj := make([][]int, n) + for _, edge := range edges { + u, v := edge[0], edge[1] + adj[u] = append(adj[u], v) + adj[v] = append(adj[v], u) // Undirected graph + } + + // 2. Calculate the total XOR sum of all node values + totalXorSum := 0 + for _, num := range nums { + totalXorSum ^= num + } + + // 3. Prepare slices for DFS pre-calculation + // subtreeXor[i]: XOR sum of nodes in the subtree rooted at i (including i) + subtreeXor := make([]int, n) + // tin[i]: Entry time of node i in DFS traversal + tin := make([]int, n) + // tout[i]: Exit time of node i in DFS traversal (after visiting all its descendants) + tout := make([]int, n) + timer := 0 // Global timer for assigning tin/tout values + + // DFS function to compute subtreeXor, tin, and tout + var dfs func(u, p int) // u: current node, p: parent node + dfs = func(u, p int) { + timer++ + tin[u] = timer // Mark entry time for node u + + subtreeXor[u] = nums[u] // Initialize subtree XOR with current node's value + + // Traverse all neighbors of u + for _, v := range adj[u] { + if v == p { // Skip if v is the parent of u + continue + } + dfs(v, u) // Recursively call DFS for child v + subtreeXor[u] ^= subtreeXor[v] // Aggregate child's subtree XOR into current node's + } + + timer++ + tout[u] = timer // Mark exit time for node u + } + + // Start DFS from node 0 (arbitrary root), with -1 as its virtual parent + dfs(0, -1) + + // Initialize minimum score to a very large value + minScore := math.MaxInt32 + + // 4. Enumerate all possible pairs of distinct nodes (i, j) + // These nodes represent the "roots" of the two subtrees that will be cut off. + // The edges being cut are implicitly (parent[i], i) and (parent[j], j). + // We start from node 1 because node 0 is the root and does not have a "parent edge" to cut. + for i := 1; i < n; i++ { + for j := i + 1; j < n; j++ { // j must be different from i + + // Check if i is an ancestor of j using DFS timestamps + // (tin[i] < tin[j] and tout[i] > tout[j]) + isIAncestorOfJ := (tin[i] < tin[j] && tout[i] > tout[j]) + // Check if j is an ancestor of i using DFS timestamps + isJAncestorOfI := (tin[j] < tin[i] && tout[j] > tout[i]) + + var xorVal1, xorVal2, xorVal3 int // The three component XOR sums + + if isIAncestorOfJ { + // Case 1: Node i is an ancestor of node j. + // This means j's subtree is entirely contained within i's subtree. + // The three components are: + // - Component A: The subtree rooted at j. (xorVal1) + // - Component B: The part of i's subtree *outside* j's subtree. (xorVal2) + // - Component C: The rest of the tree (outside i's subtree). (xorVal3) + xorVal1 = subtreeXor[j] + xorVal2 = subtreeXor[i] ^ subtreeXor[j] // XOR sum of i's subtree excluding j's subtree + xorVal3 = totalXorSum ^ subtreeXor[i] // Total XOR sum excluding i's subtree + } else if isJAncestorOfI { + // Case 2: Node j is an ancestor of node i. + // This is symmetric to Case 1. Swap roles of i and j for calculation. + xorVal1 = subtreeXor[i] + xorVal2 = subtreeXor[j] ^ subtreeXor[i] // XOR sum of j's subtree excluding i's subtree + xorVal3 = totalXorSum ^ subtreeXor[j] // Total XOR sum excluding j's subtree + } else { + // Case 3: Nodes i and j are not ancestors of each other. + // Their respective subtrees are disjoint. + // The three components are: + // - Component A: The subtree rooted at i. (xorVal1) + // - Component B: The subtree rooted at j. (xorVal2) + // - Component C: The rest of the tree (outside both i's and j's subtrees). (xorVal3) + xorVal1 = subtreeXor[i] + xorVal2 = subtreeXor[j] + xorVal3 = totalXorSum ^ subtreeXor[i] ^ subtreeXor[j] // Total XOR sum excluding both i's and j's subtrees + } + + // Store the three XOR values in a slice, sort them, and calculate the difference. + currentXors := []int{xorVal1, xorVal2, xorVal3} + sort.Ints(currentXors) // Sort to easily find min and max + + // Calculate the score for this pair of edge removals + diff := currentXors[2] - currentXors[0] // Largest XOR - Smallest XOR + + // Update the minimum score found so far + if diff < minScore { + minScore = diff + } + } + } + + return minScore } diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go index 14ff50eb4..d41e511cc 100644 --- a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go @@ -10,30 +10,34 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + edges [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 5, 5, 4, 11}, [][]int{ + {0, 1}, {1, 2}, {1, 3}, {3, 4}, + }, 9}, + {"TestCase2", []int{5, 5, 2, 4, 4, 2}, [][]int{ + {0, 1}, {1, 2}, {5, 2}, {4, 3}, {1, 3}, + }, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.edges) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.edges) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 20efae7bcd5168c93b0f8708bfb6c958bfa7e8b7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 25 Jul 2025 08:56:25 +0800 Subject: [PATCH 346/450] Add solution and test-cases for problem 3487 --- .../README.md | 46 ++++++++++++++----- .../Solution.go | 23 +++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 62 insertions(+), 21 deletions(-) diff --git a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md index eca18aba2..523c2cd7a 100755 --- a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md +++ b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/README.md @@ -1,28 +1,50 @@ # [3487.Maximum Unique Subarray Sum After Deletion][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 integer array `nums`. + +You are allowed to delete any number of elements from `nums` without making it **empty**. After performing the deletions, select a subarray of `nums` such that: + +1. All elements in the subarray are **unique**. +2. The sum of the elements in the subarray is **maximized**. + +Return the **maximum sum** of such a subarray. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4,5] + +Output: 15 + +Explanation: + +Select the entire array without deleting any element to obtain the maximum sum. +``` + +**Example 2:** + ``` +Input: nums = [1,1,0,1,1] + +Output: 1 + +Explanation: -## 题意 -> ... +Delete the element nums[0] == 1, nums[1] == 1, nums[2] == 0, and nums[3] == 1. Select the entire array [1] to obtain the maximum sum. +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Maximum Unique Subarray Sum After Deletion -```go ``` +Input: nums = [1,2,-1,-2,1,0,-1] + +Output: 3 +Explanation: + +Delete the elements nums[2] == -1 and nums[3] == -2, and select the subarray [2, 1] from [1, 2, 1, 0, -1] to obtain the maximum sum. +``` ## 结语 diff --git a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go index d115ccf5e..c76f7a37f 100644 --- a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go +++ b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + l := len(nums) + sort.Ints(nums) + index := sort.Search(l, func(i int) bool { + return nums[i] >= 0 + }) + sum := nums[l-1] + if index == l { + return sum + } + pre := sum + for i := l - 2; i >= index; i-- { + if nums[i] == pre { + continue + } + pre = nums[i] + sum += nums[i] + } + return sum } diff --git a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go index 14ff50eb4..e81bf4c4f 100644 --- a/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go +++ b/leetcode/3401-3500/3487.Maximum-Unique-Subarray-Sum-After-Deletion/Solution_test.go @@ -10,12 +10,12 @@ 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, 3, 4, 5}, 15}, + {"TestCase2", []int{1, 1, 0, 1, 1}, 1}, + {"TestCase3", []int{1, 2, -1, -2, 1, 0, -1}, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a9f7a5bfa7354feb2256eb38c328a90338d10881 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Jul 2025 17:37:19 +0800 Subject: [PATCH 347/450] Add solution and test-cases for problem 1016 --- .../README.md | 23 +++++------ .../Solution.go | 40 ++++++++++++++++++- .../Solution_test.go | 18 ++++----- 3 files changed, 56 insertions(+), 25 deletions(-) diff --git a/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/README.md b/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/README.md index f75579506..96df30725 100644 --- a/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/README.md +++ b/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/README.md @@ -1,28 +1,23 @@ # [1016.Binary String With Substrings Representing 1 To N][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 +Given a binary string `s` and a positive integer `n`, return `true` if the binary representation of all the integers in the range `[1, n]` are **substrings** of `s`, or `false` otherwise. + +A **substring** is a contiguous sequence of characters within a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "0110", n = 3 +Output: true ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Binary String With Substrings Representing 1 To N -```go ``` - +Input: s = "0110", n = 4 +Output: false +``` ## 结语 diff --git a/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution.go b/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution.go index d115ccf5e..6bc650cad 100644 --- a/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution.go +++ b/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +func pow(x int) int { + base := 1 + + for i := 1; i <= x; i++ { + base *= 2 + } + return base +} + +func Solution(s string, n int) bool { + count := make(map[int]struct{}) + ls := len(s) + + loop := min(31, ls) + for i := 1; i <= loop; i++ { + base := 0 + for j := 0; j < i; j++ { + base = base*2 + int(s[j]-'0') + } + if base != 0 && base <= n { + count[base] = struct{}{} + } + b2 := pow(i - 1) + start, end := 0, i + for ; end < ls; start, end = start+1, end+1 { + if s[start] == '1' { + base -= b2 + } + now := base << 1 + now += int(s[end] - '0') + base = now + if now == 0 || now > n { + continue + } + count[now] = struct{}{} + } + } + return len(count) == n } diff --git a/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution_test.go b/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution_test.go index 14ff50eb4..ed548c9aa 100644 --- a/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution_test.go +++ b/leetcode/1001-1100/1016.Binary-String-With-Substrings-Representing-1-To-N/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string + n int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "0110", 3, true}, + {"TestCase2", "0110", 4, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.n) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.n) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b9d19b9381acfddde5441d73007493a981dae20e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 29 Jul 2025 09:39:01 +0800 Subject: [PATCH 348/450] Add solution and test-cases for problem 2411 --- .../README.md | 41 +++++++----- .../Solution.go | 63 ++++++++++++++++++- .../Solution_test.go | 13 ++-- 3 files changed, 94 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md index 6b276380b..01d3c42f7 100755 --- a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md +++ b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md @@ -1,28 +1,41 @@ # [2411.Smallest Subarrays With Maximum Bitwise OR][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 a **0-indexed** array `nums` of length `n`, consisting of non-negative integers. For each index `i` from `0` to `n - 1`, you must determine the size of the **minimum sized** non-empty subarray of `nums` starting at `i` (inclusive) that has the **maximum** possible **bitwise OR**. + +- In other words, let `Bij` be the bitwise OR of the subarray `nums[i...j]`. You need to find the smallest subarray starting at `i`, such that bitwise OR of this subarray is equal to `max(Bik`) where `i <= k <= n - 1`. + +The bitwise OR of an array is the bitwise OR of all the numbers in it. + +Return an integer array `answer` of size `n` where `answer[i]` is the length of the **minimum** sized subarray starting at `i` with **maximum** bitwise OR. + +A **subarray** is a contiguous non-empty sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,0,2,1,3] +Output: [3,3,2,2,1] +Explanation: +The maximum possible bitwise OR starting at any index is 3. +- Starting at index 0, the shortest subarray that yields it is [1,0,2]. +- Starting at index 1, the shortest subarray that yields the maximum bitwise OR is [0,2,1]. +- Starting at index 2, the shortest subarray that yields the maximum bitwise OR is [2,1]. +- Starting at index 3, the shortest subarray that yields the maximum bitwise OR is [1,3]. +- Starting at index 4, the shortest subarray that yields the maximum bitwise OR is [3]. +Therefore, we return [3,3,2,2,1]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Smallest Subarrays With Maximum Bitwise OR -```go ``` - +Input: nums = [1,2] +Output: [2,1] +Explanation: +Starting at index 0, the shortest subarray that yields the maximum bitwise OR is of length 2. +Starting at index 1, the shortest subarray that yields the maximum bitwise OR is of length 1. +Therefore, we return [2,1]. +``` ## 结语 diff --git a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go index d115ccf5e..b558a316b 100644 --- a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go +++ b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func oneArray(n int) [32]int { + res := [32]int{} + index := 31 + for ; n > 0; index-- { + if n&1 == 1 { + res[index]++ + } + n >>= 1 + } + return res +} + +func Solution(nums []int) []int { + l := len(nums) + ans := make([]int, l) + ans[l-1] = 1 + + or := make([]int, l) + or[l-1] = nums[l-1] + for i := l - 2; i >= 0; i-- { + or[i] = nums[i] | or[i+1] + } + + oneCount := make([][32]int, l) + oneCount[0] = oneArray(nums[0]) + for i := 1; i < l; i++ { + cur := oneArray(nums[i]) + for j := 0; j < 32; j++ { + oneCount[i][j] = oneCount[i-1][j] + cur[j] + } + } + var ok func(int, int, int) bool + ok = func(start, end, target int) bool { + tmp := oneCount[end] + if start != 0 { + for i := 0; i < 32; i++ { + tmp[i] -= oneCount[start-1][i] + } + } + base := 1 + num := 0 + for i := 31; i >= 0; i-- { + x := 1 + if tmp[i] == 0 { + x = 0 + } + num += x * base + base <<= 1 + } + return num == target + } + for i := l - 2; i >= 0; i-- { + // i = 3 + index := sort.Search(l-i, func(j int) bool { + return ok(i, i+j, or[i]) + }) + ans[i] = index + 1 + } + return ans } diff --git a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution_test.go b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution_test.go index 14ff50eb4..fe25e83c0 100644 --- a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution_test.go +++ b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/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, 0, 2, 1, 3}, []int{3, 3, 2, 2, 1}}, + {"TestCase2", []int{1, 2}, []int{2, 1}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bb5aa04cb8e8ff7ccff57a2f3d97664b4c47468c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 30 Jul 2025 09:05:41 +0800 Subject: [PATCH 349/450] Add solution and test-cases for problem 1805 --- .../README.md | 35 ++++++++++------- .../Solution.go | 38 ++++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 65 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md index f82e2bcf0..ab1946dd2 100755 --- a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md +++ b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md @@ -1,28 +1,37 @@ # [1805.Number of Different Integers in a String][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 a string `word` that consists of digits and lowercase English letters. + +You will replace every non-digit character with a space. For example, `"a123bc34d8ef34"` will become `" 123 34 8 34"`. Notice that you are left with some integers that are separated by at least one space: `"123"`, `"34"`, `"8"`, and `"34"`. + +Return the number of **different** integers after performing the replacement operations on `word`. + +Two integers are considered different if their decimal representations **without any leading zeros** are different. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word = "a123bc34d8ef34" +Output: 3 +Explanation: The three different integers are "123", "34", and "8". Notice that "34" is only counted once. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Different Integers in a String -```go ``` +Input: word = "leet1234code234" +Output: 2 +``` + +**Example 3:** +``` +Input: word = "a1b01c001" +Output: 1 +Explanation: The three integers "1", "01", and "001" all represent the same integer because +the leading zeros are ignored when comparing their decimal values. +``` ## 结语 diff --git a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go index d115ccf5e..e282f72b0 100644 --- a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go +++ b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(word string) int { + count := make(map[string]struct{}) + firstMeet := true + foundNumber := false + start := -1 + for i, b := range word { + if b >= '0' && b <= '9' { + foundNumber = true + if firstMeet && b == '0' { + continue + } + if start == -1 { + start = i + } + firstMeet = false + continue + } + if foundNumber { + if start == -1 { + count["0"] = struct{}{} + } else { + count[word[start:i]] = struct{}{} + } + } + foundNumber = false + firstMeet = true + start = -1 + } + if foundNumber { + if start == -1 { + count["0"] = struct{}{} + } else { + count[word[start:]] = struct{}{} + } + } + return len(count) } diff --git a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go index 14ff50eb4..0d4376615 100644 --- a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go +++ b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "a123bc34d8ef34", 3}, + {"TestCase2", "leet1234code234", 2}, + {"TestCase3", "a1b01c001", 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 37066465b2bb3acd7a4f80ec60b4cbb7957ef83a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 1 Aug 2025 22:49:45 +0800 Subject: [PATCH 350/450] Add solution and test-cases for problem 367 --- .../0367.Valid-Perfect-Square/README.md | 28 +++++++++---------- .../0367.Valid-Perfect-Square/Solution.go | 10 +++++-- .../Solution_test.go | 11 ++++---- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/leetcode/301-400/0367.Valid-Perfect-Square/README.md b/leetcode/301-400/0367.Valid-Perfect-Square/README.md index 66610b391..ecf2f6fd7 100644 --- a/leetcode/301-400/0367.Valid-Perfect-Square/README.md +++ b/leetcode/301-400/0367.Valid-Perfect-Square/README.md @@ -1,28 +1,28 @@ # [367.Valid Perfect Square][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 +Given a positive integer num, return true if `num` is a perfect square or `false` otherwise. + +A **perfect square** is an integer that is the square of an integer. In other words, it is the product of some integer with itself. + +You must not use any built-in library function, such as `sqrt`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 16 +Output: true +Explanation: We return true because 4 * 4 = 16 and 4 is an integer. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Valid Perfect Square -```go ``` - +Input: num = 14 +Output: false +Explanation: We return false because 3.742 * 3.742 = 14 and 3.742 is not an integer. +``` ## 结语 diff --git a/leetcode/301-400/0367.Valid-Perfect-Square/Solution.go b/leetcode/301-400/0367.Valid-Perfect-Square/Solution.go index d115ccf5e..6abd2854f 100644 --- a/leetcode/301-400/0367.Valid-Perfect-Square/Solution.go +++ b/leetcode/301-400/0367.Valid-Perfect-Square/Solution.go @@ -1,5 +1,11 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(num int) bool { + l := (1 << 31) - 1 + index := sort.Search(l, func(i int) bool { + return i*i >= num + }) + return index*index == num } diff --git a/leetcode/301-400/0367.Valid-Perfect-Square/Solution_test.go b/leetcode/301-400/0367.Valid-Perfect-Square/Solution_test.go index 14ff50eb4..0b9aeff6d 100644 --- a/leetcode/301-400/0367.Valid-Perfect-Square/Solution_test.go +++ b/leetcode/301-400/0367.Valid-Perfect-Square/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 16, true}, + {"TestCase2", 14, false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a10945b596b1e2f5d6a0b486942d542fe6973890 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 2 Aug 2025 09:09:44 +0800 Subject: [PATCH 351/450] Add solution and test-cases for problem 2561 --- .../2561.Rearranging-Fruits/README.md | 35 +++++++++++++ .../2561.Rearranging-Fruits/Solution.go | 50 ++++++++++++++++++- .../2561.Rearranging-Fruits/Solution_test.go | 21 ++++---- 3 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 leetcode/2501-2600/2561.Rearranging-Fruits/README.md diff --git a/leetcode/2501-2600/2561.Rearranging-Fruits/README.md b/leetcode/2501-2600/2561.Rearranging-Fruits/README.md new file mode 100644 index 000000000..b951710f8 --- /dev/null +++ b/leetcode/2501-2600/2561.Rearranging-Fruits/README.md @@ -0,0 +1,35 @@ +# [2561.Rearranging Fruits][title] + +## Description + +You have two fruit baskets containing `n` fruits each. You are given two **0-indexed** integer arrays `basket1` and `basket2` representing the cost of fruit in each basket. You want to make both baskets **equal**. To do so, you can use the following operation as many times as you want: + +- Chose two indices `i` and `j`, and swap the `ith` fruit of `basket1` with the `jth` fruit of `basket2`. +- The cost of the swap is `min(basket1[i],basket2[j])`. + +Two baskets are considered equal if sorting them according to the fruit cost makes them exactly the same baskets. + +Return the minimum cost to make both the baskets equal or `-1` if impossible. + +**Example 1:** + +``` +Input: basket1 = [4,2,2,2], basket2 = [1,4,1,2] +Output: 1 +Explanation: Swap index 1 of basket1 with index 0 of basket2, which has cost 1. Now basket1 = [4,1,2,2] and basket2 = [2,4,1,2]. Rearranging both the arrays makes them equal. +``` + +**Example 2:** + +``` +Input: basket1 = [2,3,4,1], basket2 = [3,2,5,1] +Output: -1 +Explanation: It can be shown that it is impossible to make both the baskets equal. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rearranging-fruits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go b/leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go index d115ccf5e..5a2fdacd1 100755 --- a/leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go +++ b/leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go @@ -1,5 +1,51 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "sort" +) + +func Solution(basket1 []int, basket2 []int) int64 { + freq := map[int]int{} + m := math.MaxInt + for _, b := range basket1 { + freq[b]++ + if b < m { + m = b + } + } + for _, b := range basket2 { + freq[b]-- + if b < m { + m = b + } + } + + var merge []int + for k, c := range freq { + if c%2 != 0 { + return -1 + } + for i := 0; i < abs(c)/2; i++ { + merge = append(merge, k) + } + } + + sort.Ints(merge) + var res int64 + for i := 0; i < len(merge)/2; i++ { + if 2*m < merge[i] { + res += int64(2 * m) + } else { + res += int64(merge[i]) + } + } + return res +} + +func abs(a int) int { + if a < 0 { + return -a + } + return a } diff --git a/leetcode/2501-2600/2561.Rearranging-Fruits/Solution_test.go b/leetcode/2501-2600/2561.Rearranging-Fruits/Solution_test.go index 14ff50eb4..bb21c0fb3 100755 --- a/leetcode/2501-2600/2561.Rearranging-Fruits/Solution_test.go +++ b/leetcode/2501-2600/2561.Rearranging-Fruits/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + basket1, basket2 []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 2, 2, 2}, []int{1, 4, 1, 2}, 1}, + {"TestCase2", []int{2, 3, 4, 1}, []int{1, 2, 5, 1}, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.basket1, c.basket2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.basket1, c.basket2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 08e778389c80b5c4aea11bcaf9db174c973e3c93 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 3 Aug 2025 14:41:45 +0800 Subject: [PATCH 352/450] Add solution and test-cases for problem 2106 --- .../1.png | Bin 0 -> 10603 bytes .../2.png | Bin 0 -> 11738 bytes .../3.png | Bin 0 -> 9545 bytes .../README.md | 51 ++++++++++++---- .../Solution.go | 56 +++++++++++++++++- .../Solution_test.go | 23 +++---- 6 files changed, 104 insertions(+), 26 deletions(-) create mode 100644 leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/1.png create mode 100644 leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/2.png create mode 100644 leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/3.png diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/1.png b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/1.png new file mode 100644 index 0000000000000000000000000000000000000000..591a58de68d221c4e706aa575ec623d17bb26212 GIT binary patch literal 10603 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 X{r^u$UMhA1CqR_s)MYEB&BFc{H&Oxn literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/2.png b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c9adbb06debebfe6c7b5d72edc14ce2e2e251115 GIT binary patch literal 11738 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 F{{i?U3CREe literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/3.png b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/3.png new file mode 100644 index 0000000000000000000000000000000000000000..bed918ea7d44880f3809dd4260d6d8c69e9f1741 GIT binary patch literal 9545 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 literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md index 97b6c47b1..454bbfacc 100755 --- a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md +++ b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md @@ -1,28 +1,53 @@ # [2106.Maximum Fruits Harvested After at Most K Steps][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 +Fruits are available at some positions on an infinite x-axis. You are given a 2D integer array `fruits` where `fruits[i] = [positioni, amounti]` depicts `amounti` fruits at the position `positioni`. `fruits` is already **sorted** by `positioni` in **ascending order**, and each `positioni` is **unique**. + +You are also given an integer `startPos` and an integer `k`. Initially, you are at the position `startPos`. From any position, you can either walk to the **left or right**. It takes **one step** to move **one unit** on the x-axis, and you can walk **at most** `k` steps in total. For every position you reach, you harvest all the fruits at that position, and the fruits will disappear from that position. + +Return the **maximum total number** of fruits you can harvest. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: fruits = [[2,8],[6,3],[8,6]], startPos = 5, k = 4 +Output: 9 +Explanation: +The optimal way is to: +- Move right to position 6 and harvest 3 fruits +- Move right to position 8 and harvest 6 fruits +You moved 3 steps and harvested 3 + 6 = 9 fruits in total. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Maximum Fruits Harvested After at Most K Steps -```go +``` +Input: fruits = [[0,9],[4,1],[5,7],[6,2],[7,4],[10,9]], startPos = 5, k = 4 +Output: 14 +Explanation: +You can move at most k = 4 steps, so you cannot reach position 0 nor 10. +The optimal way is to: +- Harvest the 7 fruits at the starting position 5 +- Move left to position 4 and harvest 1 fruit +- Move right to position 6 and harvest 2 fruits +- Move right to position 7 and harvest 4 fruits +You moved 1 + 3 = 4 steps and harvested 7 + 1 + 2 + 4 = 14 fruits in total. ``` +**Example 3:** + +![3](./3.png) + +``` +Input: fruits = [[0,3],[6,4],[8,5]], startPos = 3, k = 2 +Output: 0 +Explanation: +You can move at most k = 2 steps and cannot reach any position with fruits. +``` ## 结语 diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go index d115ccf5e..aeadc8088 100644 --- a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go +++ b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go @@ -1,5 +1,57 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(fruits [][]int, startPos int, k int) int { + l := len(fruits) + index := sort.Search(l, func(i int) bool { + return fruits[i][0] >= startPos + }) + ans, dis := 0, 0 + sum := make([]int, l) + + a := 0 + for i := index; i < l; i++ { + a += fruits[i][1] + sum[i] = a + } + a = 0 + for i := index - 1; i >= 0; i-- { + a += fruits[i][1] + sum[i] = a + } + right := 0 + for i := index; i < l; i++ { + dis = fruits[i][0] - startPos + if dis > k { + break + } + right += fruits[i][1] + ans = max(ans, right) + + if x := sort.Search(index, func(j int) bool { + return fruits[i][0]-fruits[j][0] <= k-dis + }); x != index { + ans = max(ans, right+sum[x]) + } + } + left := 0 + ll := l - index + + for i := index - 1; i >= 0; i-- { + dis = startPos - fruits[i][0] + if dis > k { + break + } + left += fruits[i][1] + + ans = max(ans, left) + if x := sort.Search(ll, func(j int) bool { + return fruits[index+j][0]-fruits[i][0] > k-dis + }); x != 0 { + ans = max(ans, left+sum[index+x-1]) + + } + } + return ans } diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go index 14ff50eb4..99fbf18ba 100644 --- a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go +++ b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs [][]int + startPos, k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{2, 8}, {6, 3}, {8, 6}}, 5, 4, 9}, + {"TestCase2", [][]int{{0, 9}, {4, 1}, {5, 7}, {6, 2}, {7, 4}, {10, 9}}, 5, 4, 14}, + {"TestCase3", [][]int{{0, 3}, {6, 4}, {8, 5}}, 3, 2, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.startPos, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.inputs, c.startPos, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 80b2c272ec3408c23fa6ac0390eaae1d86cdf2d6 Mon Sep 17 00:00:00 2001 From: Boris Date: Sun, 3 Aug 2025 18:13:38 +0800 Subject: [PATCH 353/450] update go.mod --- go.mod | 30 +++++++++++----------- go.sum | 78 +++++++++++++++++++++++++--------------------------------- 2 files changed, 48 insertions(+), 60 deletions(-) diff --git a/go.mod b/go.mod index f8d776302..bbbe00c7a 100644 --- a/go.mod +++ b/go.mod @@ -3,33 +3,31 @@ module awesome-golang-algorithm go 1.24 require ( - github.com/imroc/req/v3 v3.52.2 + github.com/imroc/req/v3 v3.54.0 github.com/stretchr/testify v1.10.0 ) require ( - github.com/andybalholm/brotli v1.1.1 // indirect - github.com/cloudflare/circl v1.6.1 // indirect + github.com/andybalholm/brotli v1.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/icholy/digest v1.1.0 // indirect github.com/klauspost/compress v1.18.0 // indirect - github.com/onsi/ginkgo/v2 v2.23.4 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.52.0 // indirect - github.com/refraction-networking/utls v1.7.3 // indirect - go.uber.org/automaxprocs v1.6.0 // indirect + github.com/quic-go/quic-go v0.54.0 // indirect + github.com/refraction-networking/utls v1.8.0 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect go.uber.org/mock v0.5.2 // indirect - golang.org/x/crypto v0.39.0 // indirect - golang.org/x/mod v0.25.0 // indirect - golang.org/x/net v0.41.0 // indirect - golang.org/x/sync v0.15.0 // indirect - golang.org/x/sys v0.33.0 // indirect - golang.org/x/text v0.26.0 // indirect - golang.org/x/tools v0.34.0 // indirect + golang.org/x/crypto v0.40.0 // indirect + golang.org/x/mod v0.26.0 // indirect + golang.org/x/net v0.42.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.34.0 // indirect + golang.org/x/text v0.27.0 // indirect + golang.org/x/tools v0.35.0 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 4c922768b..2ff64cf9c 100644 --- a/go.sum +++ b/go.sum @@ -1,17 +1,10 @@ -github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= -github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= -github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= -github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= +github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= -github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18= -github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -19,55 +12,52 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4= github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y= -github.com/imroc/req/v3 v3.52.2 h1:xJocr1aIv0a2K9knfBQ4JnZHk+kWTITdjf0mgDg229I= -github.com/imroc/req/v3 v3.52.2/go.mod h1:dBGsDloOSZJcFs6PnTjZXYBJK70OXbZpizHBLNqcH2k= +github.com/imroc/req/v3 v3.54.0 h1:kwWJSpT7OvjJ/Q8ykp+69Ye5H486RKDcgEoepw1Ren4= +github.com/imroc/req/v3 v3.54.0/go.mod h1:P8gCJjG/XNUFeP6WOi40VAXfYwT+uPM00xvoBWiwzUQ= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= -github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= -github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= -github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= -github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA= -github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= -github.com/refraction-networking/utls v1.7.3 h1:L0WRhHY7Oq1T0zkdzVZMR6zWZv+sXbHB9zcuvsAEqCo= -github.com/refraction-networking/utls v1.7.3/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ= +github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg= +github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= +github.com/refraction-networking/utls v1.8.0 h1:L38krhiTAyj9EeiQQa2sg+hYb4qwLCqdMcpZrRfbONE= +github.com/refraction-networking/utls v1.8.0/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= -go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= -golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= -golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= -golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= -golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= -golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= -golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= +golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= +golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= From f402af0a868d7fe40f60e2928820d94cdb1b399d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 4 Aug 2025 09:16:35 +0800 Subject: [PATCH 354/450] Add solution and test-cases for problem 3484 --- .../3484.Design-Spreadsheet/README.md | 42 ++++++---- .../3484.Design-Spreadsheet/Solution.go | 77 ++++++++++++++++++- .../3484.Design-Spreadsheet/Solution_test.go | 27 ++++--- 3 files changed, 118 insertions(+), 28 deletions(-) diff --git a/leetcode/3401-3500/3484.Design-Spreadsheet/README.md b/leetcode/3401-3500/3484.Design-Spreadsheet/README.md index 37eb8c215..c99fa4ca6 100755 --- a/leetcode/3401-3500/3484.Design-Spreadsheet/README.md +++ b/leetcode/3401-3500/3484.Design-Spreadsheet/README.md @@ -1,28 +1,38 @@ # [3484.Design Spreadsheet][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 +A spreadsheet is a grid with 26 columns (labeled from `'A'` to `'Z'`) and a given number of `rows`. Each cell in the spreadsheet can hold an integer value between 0 and 105. -**Example 1:** +Implement the `Spreadsheet` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `Spreadsheet(int rows)` Initializes a spreadsheet with 26 columns (labeled `'A'` to `'Z'`) and the specified number of rows. All cells are initially set to 0. +- `void setCell(String cell, int value)` Sets the value of the specified `cell`. The cell reference is provided in the format `"AX"` (e.g., `"A1"`, `"B10"`), where the letter represents the column (from `'A'` to `'Z'`) and the number represents a **1-indexed** row. +- `void resetCell(String cell)` Resets the specified cell to 0. +- `int getValue(String formula)` Evaluates a formula of the form `"=X+Y"`, where `X` and `Y` are **either** cell references or non-negative integers, and returns the computed sum. -## 题意 -> ... +**Note**: If `getValue` references a cell that has not been explicitly set using `setCell`, its value is considered 0. -## 题解 +**Example 1:** -### 思路1 -> ... -Design Spreadsheet -```go ``` - +Input: +["Spreadsheet", "getValue", "setCell", "getValue", "setCell", "getValue", "resetCell", "getValue"] +[[3], ["=5+7"], ["A1", 10], ["=A1+6"], ["B2", 15], ["=A1+B2"], ["A1"], ["=A1+B2"]] + +Output: +[null, 12, null, 16, null, 25, null, 15] + +Explanation + +Spreadsheet spreadsheet = new Spreadsheet(3); // Initializes a spreadsheet with 3 rows and 26 columns +spreadsheet.getValue("=5+7"); // returns 12 (5+7) +spreadsheet.setCell("A1", 10); // sets A1 to 10 +spreadsheet.getValue("=A1+6"); // returns 16 (10+6) +spreadsheet.setCell("B2", 15); // sets B2 to 15 +spreadsheet.getValue("=A1+B2"); // returns 25 (10+15) +spreadsheet.resetCell("A1"); // resets A1 to 0 +spreadsheet.getValue("=A1+B2"); // returns 15 (0+15) +``` ## 结语 diff --git a/leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go index d115ccf5e..87a2d3820 100644 --- a/leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go +++ b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution.go @@ -1,5 +1,78 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "strconv" + "strings" +) + +type Spreadsheet struct { + rows int + sheet [26][]int +} + +func Constructor(rows int) Spreadsheet { + sheet := [26][]int{} + for i := range 26 { + sheet[i] = make([]int, rows) + } + return Spreadsheet{ + rows: rows, + sheet: sheet, + } +} + +func (this *Spreadsheet) SetCell(cell string, value int) { + row := int(cell[0] - 'A') + v, _ := strconv.Atoi(cell[1:]) + this.sheet[row][v-1] = value +} + +func (this *Spreadsheet) ResetCell(cell string) { + row := int(cell[0] - 'A') + v, _ := strconv.Atoi(cell[1:]) + this.sheet[row][v-1] = 0 +} + +func (this *Spreadsheet) part(str string) int { + index := 0 + isNumber := true + if !(str[0] >= '0' && str[0] <= '9') { + isNumber = false + index++ + } + num, _ := strconv.Atoi(str[index:]) + if isNumber { + return num + } + return this.sheet[int(str[0]-'A')][num-1] +} +func (this *Spreadsheet) GetValue(formula string) int { + left := formula[1:] + parts := strings.Split(left, "+") + a, b := this.part(parts[0]), this.part(parts[1]) + return a + b +} + +type opt struct { + name string + arg1 string + arg2 int +} + +func Solution(rows int, opts []opt) []int { + c := Constructor(rows) + ans := make([]int, 0) + for _, o := range opts { + if o.name == "get" { + ans = append(ans, c.GetValue(o.arg1)) + continue + } + if o.name == "set" { + c.SetCell(o.arg1, o.arg2) + continue + } + c.ResetCell(o.arg1) + // reset + } + return ans } diff --git a/leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go index 14ff50eb4..dd87b6b5d 100644 --- a/leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go +++ b/leetcode/3401-3500/3484.Design-Spreadsheet/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + rows int + opts []opt + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, []opt{ + {"get", "=5+7", 0}, + {"set", "A1", 10}, + {"get", "=A1+6", 0}, + {"set", "B2", 15}, + {"get", "=A1+B2", 0}, + {"reset", "A1", 0}, + {"get", "=A1+B2", 0}, + }, []int{12, 16, 25, 15}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.rows, c.opts) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.rows, c.opts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 12a2fe995e8f4d49a2abc053736e27c6fa73dd0e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 5 Aug 2025 08:48:42 +0800 Subject: [PATCH 355/450] Add solution and test-cases for problem 3477 --- .../3477.Fruits-Into-Baskets-II/README.md | 43 +++++++++++++------ .../3477.Fruits-Into-Baskets-II/Solution.go | 14 +++++- .../Solution_test.go | 21 +++++---- 3 files changed, 52 insertions(+), 26 deletions(-) diff --git a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md index cc2a2b90d..3c6288a52 100755 --- a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md +++ b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/README.md @@ -1,28 +1,45 @@ # [3477.Fruits Into Baskets II][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 two arrays of integers, `fruits` and `baskets`, each of length n, where `fruits[i]` represents the **quantity** of the `ith` type of fruit, and `baskets[j]` represents the **capacity** of the `jth` basket. + +From left to right, place the fruits according to these rules: + +- Each fruit type must be placed in the **leftmost available basket** with a capacity **greater than or equal** to the quantity of that fruit type. +- Each basket can hold **only one** type of fruit. +- If a fruit type **cannot be placed** in any basket, it remains **unplaced**. + +Return the number of fruit types that remain unplaced after all possible allocations are made. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: fruits = [4,2,5], baskets = [3,5,4] -## 题意 -> ... +Output: 1 -## 题解 +Explanation: -### 思路1 -> ... -Fruits Into Baskets II -```go +fruits[0] = 4 is placed in baskets[1] = 5. +fruits[1] = 2 is placed in baskets[0] = 3. +fruits[2] = 5 cannot be placed in baskets[2] = 4. +Since one fruit type remains unplaced, we return 1. ``` +**Example 2:** + +``` +Input: fruits = [3,6,1], baskets = [6,4,7] + +Output: 0 + +Explanation: + +fruits[0] = 3 is placed in baskets[0] = 6. +fruits[1] = 6 cannot be placed in baskets[1] = 4 (insufficient capacity) but can be placed in the next available basket, baskets[2] = 7. +fruits[2] = 1 is placed in baskets[1] = 4. +Since all fruits are successfully placed, we return 0. +``` ## 结语 diff --git a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go index d115ccf5e..e9d63386a 100644 --- a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go +++ b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(fruits []int, baskets []int) int { + left := len(fruits) + for _, f := range fruits { + for i := range baskets { + if baskets[i] >= f { + left-- + baskets[i] = -1 + break + } + } + } + return left } diff --git a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go index 14ff50eb4..693b11fe4 100644 --- a/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go +++ b/leetcode/3401-3500/3477.Fruits-Into-Baskets-II/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + fruits, baskets []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 2, 5}, []int{3, 5, 4}, 1}, + {"TestCase2", []int{3, 6, 1}, []int{6, 4, 7}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.fruits, c.baskets) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.fruits, c.baskets) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7792515187721cc42efc2288bf36213b15acf22c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 6 Aug 2025 09:19:27 +0800 Subject: [PATCH 356/450] Add solution and test-cases for problem 3479 --- .../3479.Fruits-Into-Baskets-III/README.md | 43 +++++++--- .../3479.Fruits-Into-Baskets-III/Solution.go | 82 ++++++++++++++++++- .../Solution_test.go | 21 +++-- 3 files changed, 120 insertions(+), 26 deletions(-) diff --git a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md index 74e955fec..349a62d7a 100755 --- a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md +++ b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/README.md @@ -1,28 +1,45 @@ # [3479.Fruits Into Baskets III][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 two arrays of integers, `fruits` and `baskets`, each of length `n`, where `fruits[i]` represents the **quantity** of the `ith` type of fruit, and `baskets[j]` represents the **capacity** of the `jth` basket. + +From left to right, place the fruits according to these rules: + +- Each fruit type must be placed in the **leftmost available basket** with a capacity **greater than or equal** to the quantity of that fruit type. +- Each basket can hold **only one** type of fruit. +- If a fruit type **cannot be placed** in any basket, it remains **unplaced**. + +Return the number of fruit types that remain unplaced after all possible allocations are made. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: fruits = [4,2,5], baskets = [3,5,4] -## 题意 -> ... +Output: 1 -## 题解 +Explanation: -### 思路1 -> ... -Fruits Into Baskets III -```go +fruits[0] = 4 is placed in baskets[1] = 5. +fruits[1] = 2 is placed in baskets[0] = 3. +fruits[2] = 5 cannot be placed in baskets[2] = 4. +Since one fruit type remains unplaced, we return 1. ``` +**Example 2:** + +``` +Input: fruits = [3,6,1], baskets = [6,4,7] + +Output: 0 + +Explanation: + +fruits[0] = 3 is placed in baskets[0] = 6. +fruits[1] = 6 cannot be placed in baskets[1] = 4 (insufficient capacity) but can be placed in the next available basket, baskets[2] = 7. +fruits[2] = 1 is placed in baskets[1] = 4. +Since all fruits are successfully placed, we return 0. +``` ## 结语 diff --git a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go index d115ccf5e..d216dd492 100644 --- a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go +++ b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution.go @@ -1,5 +1,83 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +const ( + INT_MIN = math.MinInt32 +) + +type SegTree struct { + segNode []int + baskets []int +} + +func (this *SegTree) build(p, l, r int) { + if l == r { + this.segNode[p] = this.baskets[l] + return + } + mid := (l + r) >> 1 + this.build(p<<1, l, mid) + this.build(p<<1|1, mid+1, r) + this.segNode[p] = max(this.segNode[p<<1], this.segNode[p<<1|1]) +} + +func (this *SegTree) query(p, l, r, ql, qr int) int { + if ql > r || qr < l { + return INT_MIN + } + if ql <= l && r <= qr { + return this.segNode[p] + } + mid := (l + r) >> 1 + return max(this.query(p<<1, l, mid, ql, qr), + this.query(p<<1|1, mid+1, r, ql, qr)) +} + +func (this *SegTree) update(p, l, r, pos, val int) { + if l == r { + this.segNode[p] = val + return + } + mid := (l + r) >> 1 + if pos <= mid { + this.update(p<<1, l, mid, pos, val) + } else { + this.update(p<<1|1, mid+1, r, pos, val) + } + this.segNode[p] = max(this.segNode[p<<1], this.segNode[p<<1|1]) +} + +func Solution(fruits []int, baskets []int) int { + m := len(baskets) + if m == 0 { + return len(fruits) + } + + tree := SegTree{ + segNode: make([]int, 4*m+7), + baskets: baskets, + } + tree.build(1, 0, m-1) + + count := 0 + for i := 0; i < len(fruits); i++ { + l, r, res := 0, m-1, -1 + for l <= r { + mid := (l + r) >> 1 + if tree.query(1, 0, m-1, 0, mid) >= fruits[i] { + res = mid + r = mid - 1 + } else { + l = mid + 1 + } + } + if res != -1 && tree.baskets[res] >= fruits[i] { + tree.update(1, 0, m-1, res, INT_MIN) + } else { + count++ + } + } + + return count } diff --git a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go index 14ff50eb4..693b11fe4 100644 --- a/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go +++ b/leetcode/3401-3500/3479.Fruits-Into-Baskets-III/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + fruits, baskets []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 2, 5}, []int{3, 5, 4}, 1}, + {"TestCase2", []int{3, 6, 1}, []int{6, 4, 7}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.fruits, c.baskets) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.fruits, c.baskets) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f9f3feb5a96831e4aeb48243ff1010fabe60d837 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 8 Aug 2025 09:08:27 +0800 Subject: [PATCH 357/450] Add solution and test-cases for problem 3100 --- .../3001-3100/3100.Water-Bottles-II/1.png | Bin 0 -> 109721 bytes .../3001-3100/3100.Water-Bottles-II/2.png | Bin 0 -> 140626 bytes .../3001-3100/3100.Water-Bottles-II/README.md | 36 +++++++++++------- .../3100.Water-Bottles-II/Solution.go | 21 +++++++++- .../3100.Water-Bottles-II/Solution_test.go | 21 +++++----- 5 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 leetcode/3001-3100/3100.Water-Bottles-II/1.png create mode 100644 leetcode/3001-3100/3100.Water-Bottles-II/2.png diff --git a/leetcode/3001-3100/3100.Water-Bottles-II/1.png b/leetcode/3001-3100/3100.Water-Bottles-II/1.png new file mode 100644 index 0000000000000000000000000000000000000000..98e58d583b5c17679fe04c8fe0e46bc227703717 GIT binary patch literal 109721 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Ž$p7ya2SquPv=ixN&2fu__B@Mq~F3!^q-E2I; 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¯GG&oec7IT^zFB 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�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%0A_8q!O@x(Df;Q_w`x9OW!Ig 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∾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 literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3100.Water-Bottles-II/README.md b/leetcode/3001-3100/3100.Water-Bottles-II/README.md index 6030cf59f..b5059ccdd 100755 --- a/leetcode/3001-3100/3100.Water-Bottles-II/README.md +++ b/leetcode/3001-3100/3100.Water-Bottles-II/README.md @@ -1,28 +1,36 @@ # [3100.Water Bottles II][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 two integers `numBottles` and `numExchange`. + +`numBottles` represents the number of full water bottles that you initially have. In one operation, you can perform one of the following operations: + +- Drink any number of full water bottles turning them into empty bottles. +- Exchange `numExchange` empty bottles with one full water bottle. Then, increase `numExchange` by one. + +Note that you cannot exchange multiple batches of empty bottles for the same value of `numExchange`. For example, if `numBottles == 3` and `numExchange == 1`, you cannot exchange `3` empty water bottles for `3` full bottles. -**Example 1:** +Return the **maximum** number of water bottles you can drink. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: numBottles = 13, numExchange = 6 +Output: 15 +Explanation: The table above shows the number of full water bottles, empty water bottles, the value of numExchange, and the number of bottles drunk. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Water Bottles II -```go ``` - +Input: numBottles = 10, numExchange = 3 +Output: 13 +Explanation: The table above shows the number of full water bottles, empty water bottles, the value of numExchange, and the number of bottles drunk. +``` ## 结语 diff --git a/leetcode/3001-3100/3100.Water-Bottles-II/Solution.go b/leetcode/3001-3100/3100.Water-Bottles-II/Solution.go index d115ccf5e..031fcea00 100644 --- a/leetcode/3001-3100/3100.Water-Bottles-II/Solution.go +++ b/leetcode/3001-3100/3100.Water-Bottles-II/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(numBottles int, numExchange int) int { + var ans int = numBottles + drink := 0 + empty := numBottles + for { + if empty >= numExchange { + drink++ + empty -= numExchange + numExchange++ + continue + } + empty += drink + ans += drink + drink = 0 + if empty < numExchange { + break + } + } + return ans + drink } diff --git a/leetcode/3001-3100/3100.Water-Bottles-II/Solution_test.go b/leetcode/3001-3100/3100.Water-Bottles-II/Solution_test.go index 14ff50eb4..e4bed4ecf 100644 --- a/leetcode/3001-3100/3100.Water-Bottles-II/Solution_test.go +++ b/leetcode/3001-3100/3100.Water-Bottles-II/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + numBottles, numExchange int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 13, 6, 15}, + {"TestCase2", 10, 3, 13}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.numBottles, c.numExchange) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.numBottles, c.numExchange) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 42341b9f1fed28ad030efd477d6aca1991b111bd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Aug 2025 18:41:03 +0800 Subject: [PATCH 358/450] Add solution and test-cases for problem 1411 --- .../1.png | Bin 0 -> 24764 bytes .../README.md | 30 ++++++++++++ .../Solution.go | 43 +++++++++++++++++- .../Solution_test.go | 13 +++--- 4 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/1.png create mode 100644 leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/README.md diff --git a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/1.png b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..33b7e2a32dd666d43b4c3d997f12daf13582c9d3 GIT binary patch literal 24764 zcmeI5Yfuwc6vx*`t7r`Zb$syffyJ3ltyLo|vMYK;O8 zf{$s3R6_=|+NYMmS4BlZ;e#=TYPCL)svQU_AO#dKBt7TuhAcRBru|~ap3FFF)|cw$fpNL7ynH<+m$8lXldv=90{qJS3fEJ@o+PqtM z$ZoZ8m!d1@2D+)|#p2=dyf{2W)&$BL+@=-{{8Ep<48F38X6p+>09pMtAuM_*Vp#M_Jm$M%>M>TE`N|Q8t)^)PnKdn zCeJlgOAH$$-YI@7XQMU4I^;MMF>9bD?XA1<8#G~sN~?=l`$=Y51Jqqo?ol%pE|2}- z1{EoLls&VR>(jI0E~T{@OVn`rXixJ`Q=uY%St>LNTI~^V+wcCS?4{6r>)16=5^7|f z)i_=wF|5)m<(GVAJ+OO2p`x-74HPj{!(BX{H>z>|eTgCLXdd4$J$F95?6;>1u9IHi z4>xZK!p`=Bic%%HPy|}7i#S%A!1ws^t$dAqw+Fi$!qhi?%gk{3GsAbs=q(|daOlaL zcxW~Bb?}wm!B??&mOtQYEE+!kaH(~j)kk)>HWh|QBVoe^73FTULJ??n3_MQ@tUq7j zJJ9L_HNwq)8$9tM4H*p?y=C;4(ZmQV3r&o)mXY~E=7-C!C5w@n+%z%L#7Gk(O^h@# z(pH-22LUSrRssptN1b!hx7OtA&w_SNK#Ln~$9@sG>;Q0qqnd4lkl&eXuOp7UfCm6| z>IoZ=jYYw;6jjnXWzv zl;Me}{8H=xr+}k4DmKY`=R-5=4TrmJ$VKdE19bG{hmi|Kq`hugf_j3kbKk2k$s2}t z#_#f7xAg8Y&H(}9YO66inhlm9d(+iI$25k)kpydzt@jlT@}{IC$j%v67l5`Lh9?o2 z`R2uUGLs$Cm5QOrh)3*YbQdV~sqc8w%)m9`_PWI739C!6koJ%~_er^!RC5TkrvN?& zcnuIf>Q^TR7SJ>_s7-10Y4xqiuqJ6m*m=xnctKD2`5DIj=c1Q@ad?3hVeyz)`?3z4+;t)b92)jrZSO+t{EOwkXfU>(H^r$~d_MSW6zAOkWJv%JuD`E~ zW4O3mFQ>em^)kAFp6L{FW)VCU@1OjnN|7`|lcBJ;g>6r6YpN^sf}z8pb*b^RXk2)o z1jL*BvkZYV%-Llc!7zVg95@<`7h$)>vIBVE!U)V02*{J?qL%=#sP)@(?;4zoE#Twc zg=qaYZ}2ssV?pGXcrQq

    QNL(PqlT2q?FUfR9(Gq6>HId4H%43PXIACs1+7_{clxg-xAsq!gNLV*_rN@EH<4lD4T) zQ%D6lCW=6Ngg8B=q&~`saz-7+h_*s5g`~4?(KvAF1f3N*7@BV=9QE>?cw2ql;4OkI z&k9IMiBA;`SdOsqozTIVof9ZS%d8>pEBdPo!Y$#XH8!X<~4 zhDtzQ)uPrV^kbq%8p(wHMw!)uzr(2*#MVoz^0-qU$a{VIf=#GS1h~$+ou({lM_drQ70jN@%p`A>`G#=-m>jh0&BD5}>0Ap4Kf|j>*bk zd9-9ak*UiInvwjjKhu>*-IMC6O~Xqck>io`~cj$hh2A|HNc_F3rC zuHnme0I^wmMScgSD{W980nwnL0W2WD|C7AkD8&Cfg!y+U?9HPdpZd6WllH_E_#X$j Ni1(%`4}?a4{uiShj-3Di literal 0 HcmV?d00001 diff --git a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/README.md b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/README.md new file mode 100644 index 000000000..2a0ca6a52 --- /dev/null +++ b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/README.md @@ -0,0 +1,30 @@ +# [1411.Number of Ways to Paint N × 3 Grid][title] + +## Description +You have a `grid` of size `n x 3` and you want to paint each cell of the grid with exactly one of the three colors: **Red**, **Yellow**, or **Green** while making sure that no two adjacent cells have the same color (i.e., no two cells that share vertical or horizontal sides have the same color). + +Given `n` the number of rows of the `grid`, return the number of ways you can paint this grid. As the answer may grow large, the answer **must be** computed modulo `10^9 + 7`. + +**Example 1:** + +![1](./1.png) + +``` +Input: n = 1 +Output: 12 +Explanation: There are 12 possible way to paint the grid as shown. +``` + +**Example 2:** + +``` +Input: n = 5000 +Output: 30228214 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-paint-n-3-grid +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution.go b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution.go index d115ccf5e..e207db370 100755 --- a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution.go +++ b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +const mod = 1000000007 + +func Solution(n int) int { + rel := [12][]int{ + {1, 4, 10, 2, 5}, + {0, 3, 6, 8, 11}, + {0, 3, 6, 7}, + + {1, 7, 10, 2}, + {0, 6, 9, 8}, + {0, 6, 9, 7, 10}, + + {1, 4, 2, 5, 11}, + {3, 2, 5, 11}, + {9, 1, 4, 10}, + + {4, 5, 8, 11}, + {0, 3, 5, 8, 11}, + {1, 7, 10, 6, 9}, + } + var dfs func(int, int) int + cache := make(map[[2]int]int) + dfs = func(parent, left int) int { + if left == 0 { + return 1 + } + ans := 0 + l := len(rel[parent]) + key := [2]int{l, left} + if v, ok := cache[key]; ok { + return v + } + for _, next := range rel[parent] { + ans = (ans + dfs(next, left-1)) % mod + } + cache[key] = ans + return ans + } + a := (dfs(0, n-1) * 6) % mod + b := (dfs(2, n-1) * 6) % mod + return (a + b) % mod } diff --git a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution_test.go b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution_test.go index 14ff50eb4..ae9982b9b 100755 --- a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution_test.go +++ b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/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", 1, 12}, + {"TestCase2", 5000, 30228214}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 769470321c95250b55b38ac04ceb6651a3dc57e2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Aug 2025 16:53:55 +0800 Subject: [PATCH 359/450] Add solution and test-cases for problem 2574 --- .../README.md | 36 +++++++++++++++++++ .../Solution.go | 19 ++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/README.md diff --git a/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/README.md b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/README.md new file mode 100644 index 000000000..31634255a --- /dev/null +++ b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/README.md @@ -0,0 +1,36 @@ +# [2574.Left and Right Sum Differences][title] + +## Description +You are given a **0-indexed** integer array `nums` of size `n`. + +Define two arrays `leftSum` and `rightSum` where: + +- `leftSum[i]` is the sum of elements to the left of the index `i` in the array `nums`. If there is no such element, `leftSum[i] = 0`. +- `rightSum[i]` is the sum of elements to the right of the index `i` in the array `nums`. If there is no such element, `rightSum[i] = 0`. + +Return an integer array `answer` of size n where `answer[i] = |leftSum[i] - rightSum[i]|`. + +**Example 1:** + +``` +Input: nums = [10,4,8,3] +Output: [15,1,11,22] +Explanation: The array leftSum is [0,10,14,22] and the array rightSum is [15,11,3,0]. +The array answer is [|0 - 15|,|10 - 11|,|14 - 3|,|22 - 0|] = [15,1,11,22]. +``` + +**Example 2:** + +``` +Input: nums = [1] +Output: [0] +Explanation: The array leftSum is [0] and the array rightSum is [0]. +The array answer is [|0 - 0|] = [0]. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/left-and-right-sum-differences +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go index d115ccf5e..430c816ce 100755 --- a/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go +++ b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + n := len(nums) + left, right := make([]int, n), make([]int, n) + left[0], right[n-1] = 0, 0 + for i := 0; i < n-1; i++ { + left[i+1] = nums[i] + left[i] + } + for i := n - 1; i > 0; i-- { + right[i-1] = right[i] + nums[i] + } + for i := 0; i < n; i++ { + left[i] -= right[i] + if left[i] < 0 { + left[i] = -left[i] + } + } + return left } diff --git a/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution_test.go b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution_test.go index 14ff50eb4..5712c000f 100755 --- a/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution_test.go +++ b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/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{10, 4, 8, 3}, []int{15, 1, 11, 22}}, + {"TestCase2", []int{1}, []int{0}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 76cf91248c352012fd131543f0e2b53becd9cfaa Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 11 Aug 2025 09:30:38 +0800 Subject: [PATCH 360/450] Add solution and test-cases for problem 2438 --- .../README.md | 34 ++++++----- .../Solution.go | 61 ++++++++++++++++++- .../Solution_test.go | 22 +++---- 3 files changed, 90 insertions(+), 27 deletions(-) diff --git a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/README.md b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/README.md index b9971c545..25178c302 100755 --- a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/README.md +++ b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/README.md @@ -1,28 +1,34 @@ # [2438.Range Product Queries of Powers][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 +Given a positive integer `n`, there exists a **0-indexed** array called `powers`, composed of the **minimum** number of powers of `2` that sum to `n`. The array is sorted in **non-decreasing** order, and there is **only one** way to form the array. + +You are also given a **0-indexed** 2D integer array `queries`, where `queries[i] = [lefti, righti]`. Each `queries[i]` represents a query where you have to find the product of all `powers[j]` with `lefti <= j <= righti`. + +Return an array `answer`, equal in length to `queries`, where `answers[i]` is the answer to the `ith` query. Since the answer to the `ith` query may be too large, each `answers[i]` should be returned **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 15, queries = [[0,1],[2,2],[0,3]] +Output: [2,4,64] +Explanation: +For n = 15, powers = [1,2,4,8]. It can be shown that powers cannot be a smaller size. +Answer to 1st query: powers[0] * powers[1] = 1 * 2 = 2. +Answer to 2nd query: powers[2] = 4. +Answer to 3rd query: powers[0] * powers[1] * powers[2] * powers[3] = 1 * 2 * 4 * 8 = 64. +Each answer modulo 109 + 7 yields the same answer, so [2,4,64] is returned. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Range Product Queries of Powers -```go ``` - +Input: n = 2, queries = [[0,0]] +Output: [2] +Explanation: +For n = 2, powers = [2]. +The answer to the only query is powers[0] = 2. The answer modulo 109 + 7 is the same, so [2] is returned. +``` ## 结语 diff --git a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go index d115ccf5e..9ab5e61f1 100644 --- a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go +++ b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func construct(n int, powers [33]int) []int { + if n&(n-1) == 0 { + return []int{n} + } + index := sort.Search(33, func(i int) bool { + return powers[i] > n + }) + set := []int{powers[index-1]} + left := construct(n-powers[index-1], powers) + set = append(set, left...) + return set +} + +func modPow(x int64, n int64, m int64) int64 { + result := int64(1) + x %= m + for n > 0 { + if n&1 == 1 { + result = (result * x) % m + } + x = (x * x) % m + n >>= 1 + } + return result +} + +func modInverse(x int64, m int64) int64 { + return modPow(x, m-2, m) +} + +const mod = 1000000007 + +func Solution(n int, queries [][]int) []int { + + powers := [33]int{} + powers[0] = 1 + for i := 1; i < 33; i++ { + powers[i] = powers[i-1] * 2 + } + arr := construct(n, powers) + for s, e := 0, len(arr)-1; s < e; s, e = s+1, e-1 { + arr[s], arr[e] = arr[e], arr[s] + } + ans := make([]int, len(queries)) + prefix := make([]int64, len(arr)+1) + index := 0 + prefix[index] = 1 + for i := 0; i < len(arr); i++ { + prefix[i+1] = (prefix[index] * int64(arr[i])) % mod + index++ + } + for i, q := range queries { + l, r := q[0], q[1] + res := (prefix[r+1] * modInverse(prefix[l], mod)) % mod + ans[i] = int(res) + } + return ans } diff --git a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go index 14ff50eb4..3be974d2d 100644 --- a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go +++ b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 15, [][]int{{0, 1}, {2, 2}, {0, 3}}, []int{2, 4, 64}}, + {"TestCase2", 2, [][]int{{0, 0}}, []int{2}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6a53ebafdcf30c44d32aaff3985a6b5cc66c77bc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 12 Aug 2025 09:08:54 +0800 Subject: [PATCH 361/450] Add solution and test-cases for problem 2787 --- .../README.md | 36 +++++++++++++++ .../Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 19 ++++---- 3 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/README.md diff --git a/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/README.md b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/README.md new file mode 100644 index 000000000..750baca56 --- /dev/null +++ b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/README.md @@ -0,0 +1,36 @@ +# [2787.Ways to Express an Integer as Sum of Powers][title] + +## Description +Given two **positive** integers `n` and `n`. + +Return the number of ways `n` can be expressed as the sum of the `xth` power of **unique** positive integers, in other words, the number of sets of unique integers `[n1, n2, ..., nk]` where `n = n1x + n2x + ... + nkx`. + +Since the result can be very large, return it modulo `10^9 + 7`. + +For example, if `n = 160` and `x = 3`, one way to express `n` is `n = 2^3 + 3^3 + 5^3`. + +**Example 1:** + +``` +Input: n = 10, x = 2 +Output: 1 +Explanation: We can express n as the following: n = 32 + 12 = 10. +It can be shown that it is the only way to express 10 as the sum of the 2nd power of unique integers. +``` + +**EXample 2:** + +``` +Input: n = 4, x = 1 +Output: 2 +Explanation: We can express n in the following ways: +- n = 41 = 4. +- n = 31 + 11 = 4. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/ways-to-express-an-integer-as-sum-of-powers +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go index d115ccf5e..ec1a08a22 100755 --- a/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go +++ b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +func power(base, n int) int { + result := 1 + for i := 0; i < n; i++ { + result *= base + } + return result +} + +const mod = 1000000007 + +func Solution(n int, x int) int { + candidates := []int{} + i := 1 + for ; ; i++ { + p := power(i, x) + if p > n { + break + } + candidates = append(candidates, p) + } + + var dfs func(index, target int) int + cache := make(map[[2]int]int) + + dfs = func(index, target int) int { + if target == 0 { + return 1 + } + if target < 0 || index == len(candidates) { + return 0 + } + key := [2]int{index, target} + if val, ok := cache[key]; ok { + return val + } + res := dfs(index+1, target-candidates[index]) % mod + res = (res + dfs(index+1, target)) % mod + cache[key] = res + return res + } + + return dfs(0, n) } diff --git a/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go index 14ff50eb4..19a93e4cc 100755 --- a/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go +++ b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, x int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 10, 2, 1}, + {"TestCase2", 4, 1, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.x) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.x) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 98de3d94af89cc83b8f27e88fc7a099a053de4e6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 13 Aug 2025 09:22:16 +0800 Subject: [PATCH 362/450] Add solution and test-cases for problem 1452 --- .../README.md | 39 +++++++++++++++++++ .../Solution.go | 32 ++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/README.md diff --git a/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/README.md b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/README.md new file mode 100644 index 000000000..e3af08b6f --- /dev/null +++ b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/README.md @@ -0,0 +1,39 @@ +# [1452.People Whose List of Favorite Companies Is Not a Subset of Another List][title] + +## Description +Given the array `favoriteCompanies` where `favoriteCompanies[i]` is the list of favorites companies for the `ith` person (**indexed from 0**). + +Return the indices of people whose list of favorite companies is not a **subset** of any other list of favorites companies. You must return the indices in increasing order. + +**Example 1:** + +``` +Input: favoriteCompanies = [["leetcode","google","facebook"],["google","microsoft"],["google","facebook"],["google"],["amazon"]] +Output: [0,1,4] +Explanation: +Person with index=2 has favoriteCompanies[2]=["google","facebook"] which is a subset of favoriteCompanies[0]=["leetcode","google","facebook"] corresponding to the person with index 0. +Person with index=3 has favoriteCompanies[3]=["google"] which is a subset of favoriteCompanies[0]=["leetcode","google","facebook"] and favoriteCompanies[1]=["google","microsoft"]. +Other lists of favorite companies are not a subset of another list, therefore, the answer is [0,1,4]. +``` + +**Example 2:** + +``` +Input: favoriteCompanies = [["leetcode","google","facebook"],["leetcode","amazon"],["facebook","google"]] +Output: [0,1] +Explanation: In this case favoriteCompanies[2]=["facebook","google"] is a subset of favoriteCompanies[0]=["leetcode","google","facebook"], therefore, the answer is [0,1]. +``` + +**Example 3:** + +``` +Input: favoriteCompanies = [["leetcode"],["google"],["facebook"],["amazon"]] +Output: [0,1,2,3] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/people-whose-list-of-favorite-companies-is-not-a-subset-of-another-list/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go index d115ccf5e..d395d0859 100755 --- a/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go +++ b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(favoriteCompanies [][]string) []int { + l := len(favoriteCompanies) + subMaps := make([]map[string]struct{}, l) + for i := range favoriteCompanies { + subMaps[i] = map[string]struct{}{} + for _, com := range favoriteCompanies[i] { + subMaps[i][com] = struct{}{} + } + } + var ans []int + for i := 0; i < l; i++ { + ok := true + for next := 0; next < l && ok; next++ { + if next == i || len(subMaps[i]) > len(subMaps[next]) { + continue + } + in := true + for k := range subMaps[i] { + if _, ok1 := subMaps[next][k]; !ok1 { + in = false + break + } + } + ok = !in + } + if ok { + ans = append(ans, i) + } + } + return ans } diff --git a/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go index 14ff50eb4..a2f380dc8 100755 --- a/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go +++ b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]string{{"leetcode", "google", "facebook"}, {"google", "microsoft"}, {"google", "facebook"}, {"google"}, {"amazon"}}, []int{0, 1, 4}}, + {"TestCase2", [][]string{{"leetcode", "google", "facebook"}, {"leetcode", "amazon"}, {"facebook", "google"}}, []int{0, 1}}, + {"TestCase3", [][]string{{"leetcode"}, {"google"}, {"facebook"}, {"amazon"}}, []int{0, 1, 2, 3}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 94e154a68271dd3b953da19332181e78a361ebaf Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 17 Aug 2025 22:29:47 +0800 Subject: [PATCH 363/450] Add solution and test-cases for problem 3239 --- .../1.png | Bin 0 -> 5196 bytes .../2.png | Bin 0 -> 4659 bytes .../README.md | 52 +++++++++++++----- .../Solution.go | 23 +++++++- .../Solution_test.go | 14 ++--- 5 files changed, 67 insertions(+), 22 deletions(-) create mode 100644 leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/1.png create mode 100644 leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/2.png diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/1.png b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/1.png new file mode 100644 index 0000000000000000000000000000000000000000..da106a0c9b9303540edf65fe8c420e446da4fca2 GIT binary patch literal 5196 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 YhHiYiC2E!dno|(sit*(V9s9fg1RQ-e9smFU literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/2.png b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/2.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a2760c6a4aa84c0843d370ac1409ec6f6b58fa GIT binary patch literal 4659 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 Ip7Z^G0PPdjAOHXW literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md index 808a9dbd7..9f0040a7f 100755 --- a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md +++ b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md @@ -1,28 +1,54 @@ # [3239.Minimum Number of Flips to Make Binary Grid Palindromic I][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 `m x n` binary matrix `grid`. + +A row or column is considered `palindromic` if its values read the same forward and backward. + +You can **flip** any number of cells in `grid` from `0` to `1`, or from `1` to `0`. + +Return the **minimum** number of cells that need to be flipped to make **either** all rows **palindromic** or all columns **palindromic**. + -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,0,0],[0,0,0],[0,0,1]] + +Output: 2 + +Explanation: + +Flipping the highlighted cells makes all the rows palindromic. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Minimum Number of Flips to Make Binary Grid Palindromic I -```go ``` +Input: grid = [[0,1],[0,1],[0,0]] + +Output: 1 +Explanation: + +Flipping the highlighted cell makes all the columns palindromic. +``` + +**Example 3:** + +``` +Input: grid = [[1],[0]] + +Output: 0 + +Explanation: + +All rows are already palindromic. +``` ## 结语 diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go index d115ccf5e..4dbafcb5b 100644 --- a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go +++ b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + rows, cols := len(grid), len(grid[0]) + ans := rows * cols + need := 0 + for i := 0; i < rows; i++ { + for s, e := 0, cols-1; s < e; s, e = s+1, e-1 { + if grid[i][s] != grid[i][e] { + need++ + } + } + } + ans = min(ans, need) + need = 0 + for i := 0; i < cols; i++ { + for s, e := 0, rows-1; s < e; s, e = s+1, e-1 { + if grid[s][i] != grid[e][i] { + need++ + } + } + } + return min(ans, need) } diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go index 14ff50eb4..f8ae60afc 100644 --- a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go +++ b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go @@ -10,12 +10,12 @@ 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, 0, 0}, {0, 0, 0}, {0, 0, 1}}, 2}, + {"TestCase2", [][]int{{0, 1}, {0, 1}, {0, 0}}, 1}, + {"TestCase3", [][]int{{1}, {0}}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a4726ed2b045f621431d70c02e766127765d639d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 18 Aug 2025 08:58:29 +0800 Subject: [PATCH 364/450] Add solution and test-cases for problem 679 --- leetcode/601-700/0679.24-Game/README.md | 38 ++++++++----- leetcode/601-700/0679.24-Game/Solution.go | 56 ++++++++++++++++++- .../601-700/0679.24-Game/Solution_test.go | 11 ++-- 3 files changed, 83 insertions(+), 22 deletions(-) diff --git a/leetcode/601-700/0679.24-Game/README.md b/leetcode/601-700/0679.24-Game/README.md index 1d5ce235e..76d338f79 100644 --- a/leetcode/601-700/0679.24-Game/README.md +++ b/leetcode/601-700/0679.24-Game/README.md @@ -1,28 +1,38 @@ # [679.24 Game][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 integer array `cards` of length `4`. You have four cards, each containing a number in the range `[1, 9]`. You should arrange the numbers on these cards in a mathematical expression using the operators `['+', '-', '*', '/']` and the parentheses `'('` and `')'` to get the value 24. + +You are restricted with the following rules: + +- The division operator `'/'` represents real division, not integer division. + + - For example, `4 / (1 - 2 / 3) = 4 / (1 / 3) = 12`. + +- Every operation done is between two numbers. In particular, we cannot use `'-'` as a unary operator. + + - For example, if `cards = [1, 1, 1, 1]`, the expression `"-1 - 1 - 1 - 1"` is **not allowed**. + +- You cannot concatenate numbers together + + - For example, if `cards = [1, 2, 1, 2]`, the expression `"12 + 12"` is not valid. + +Return `true` if you can get such expression that evaluates to `24`, and `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: cards = [4,1,8,7] +Output: true +Explanation: (8-4) * (7-1) = 24 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -24 Game -```go ``` - +Input: cards = [1,2,1,2] +Output: false +``` ## 结语 diff --git a/leetcode/601-700/0679.24-Game/Solution.go b/leetcode/601-700/0679.24-Game/Solution.go index d115ccf5e..0c0b1725c 100644 --- a/leetcode/601-700/0679.24-Game/Solution.go +++ b/leetcode/601-700/0679.24-Game/Solution.go @@ -1,5 +1,57 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func Solution(cards []int) bool { + nums := make([]float64, len(cards)) + for i, v := range cards { + nums[i] = float64(v) + } + return dfs(nums) +} + +// 递归函数:判断当前数字数组是否可以通过操作得到24 +func dfs(nums []float64) bool { + if len(nums) == 1 { + // 终止条件:只有一个数字,判断是否接近24 + return math.Abs(nums[0]-24) < 1e-6 + } + // 遍历所有两两组合 + for i := 0; i < len(nums); i++ { + for j := i + 1; j < len(nums); j++ { + // 取出两个数 + a, b := nums[i], nums[j] + // 剩余的数字 + rest := make([]float64, 0, len(nums)-1) + for k := 0; k < len(nums); k++ { + if k != i && k != j { + rest = append(rest, nums[k]) + } + } + + // 所有可能的运算 + operations := [][]float64{ + {a + b}, + {a - b}, + {b - a}, + {a * b}, + } + // 除法要判断除数不为零 + if math.Abs(b) > 1e-6 { + operations = append(operations, []float64{a / b}) + } + if math.Abs(a) > 1e-6 { + operations = append(operations, []float64{b / a}) + } + + // 递归 + for _, op := range operations { + nextNums := append(rest, op[0]) + if dfs(nextNums) { + return true + } + } + } + } + return false } diff --git a/leetcode/601-700/0679.24-Game/Solution_test.go b/leetcode/601-700/0679.24-Game/Solution_test.go index 14ff50eb4..0f21ee9d9 100644 --- a/leetcode/601-700/0679.24-Game/Solution_test.go +++ b/leetcode/601-700/0679.24-Game/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 1, 8, 7}, true}, + {"TestCase2", []int{1, 2, 1, 2}, false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b8219925d0b4284a995a3acda3f0c6b198f36b1a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 19 Aug 2025 08:58:36 +0800 Subject: [PATCH 365/450] Add solution and test-cases for problem 2110 --- .../README.md | 36 ++++++++++++------- .../Solution.go | 15 ++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md index 21aeaafaa..8bd1fc9c4 100755 --- a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md +++ b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md @@ -1,28 +1,38 @@ # [2110.Number of Smooth Descent Periods of a Stock][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 integer array `prices` representing the daily price history of a stock, where `prices[i]` is the stock price on the `ith` day. + +A **smooth descent period** of a stock consists of **one or more contiguous** days such that the price on each day is **lower** than the price on the **preceding day** by **exactly** `1`. The first day of the period is exempted from this rule. + +Return the number of **smooth descent periods**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: prices = [3,2,1,4] +Output: 7 +Explanation: There are 7 smooth descent periods: +[3], [2], [1], [4], [3,2], [2,1], and [3,2,1] +Note that a period with one day is a smooth descent period by the definition. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Smooth Descent Periods of a Stock -```go ``` +Input: prices = [8,6,7,7] +Output: 4 +Explanation: There are 4 smooth descent periods: [8], [6], [7], and [7] +Note that [8,6] is not a smooth descent period as 8 - 6 ≠ 1. +``` + +**Example 3:** +``` +Input: prices = [1] +Output: 1 +Explanation: There is 1 smooth descent period: [1] +``` ## 结语 diff --git a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go index d115ccf5e..b008e1712 100644 --- a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go +++ b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(prices []int) int64 { + l := len(prices) + c := int64(1) + ans := c + for i := 1; i < l; i++ { + if prices[i] == prices[i-1]-1 { + c++ + } else { + c = 1 + } + ans += c + } + return ans } diff --git a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go index 14ff50eb4..a567b230b 100644 --- a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go +++ b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 2, 1, 4}, 7}, + {"TestCase2", []int{8, 6, 7, 7}, 4}, + {"TestCase3", []int{1}, 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b3873f7fae760729d8e8a01b7e3de82a45b2c9e1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 20 Aug 2025 08:47:41 +0800 Subject: [PATCH 366/450] Add solution and test-cases for problem 2414 --- .../README.md | 28 +++++++++---------- .../Solution.go | 14 ++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md index 0ae8f0b7f..2318eea31 100755 --- a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md +++ b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md @@ -1,28 +1,28 @@ # [2414.Length of the Longest Alphabetical Continuous Substring][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 +An **alphabetical continuous string** is a string consisting of consecutive letters in the alphabet. In other words, it is any substring of the string `"abcdefghijklmnopqrstuvwxyz"`. + +- For example, `"abc"` is an alphabetical continuous string, while `"acb"` and `"za"` are not. + +Given a string `s` consisting of lowercase letters only, return the length of the **longest** alphabetical continuous substring. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abacaba" +Output: 2 +Explanation: There are 4 distinct continuous substrings: "a", "b", "c" and "ab". +"ab" is the longest continuous substring. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Length of the Longest Alphabetical Continuous Substring -```go ``` - +Input: s = "abcde" +Output: 5 +Explanation: "abcde" is the longest continuous substring. +``` ## 结语 diff --git a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go index d115ccf5e..b9944f825 100644 --- a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go +++ b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + ans := 1 + cur := 1 + for i := 1; i < len(s); i++ { + if s[i] == s[i-1]+1 { + cur++ + } else { + cur = 1 + } + ans = max(ans, cur) + } + return ans } diff --git a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution_test.go b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution_test.go index 14ff50eb4..dcb5fe271 100644 --- a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution_test.go +++ b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abacaba", 2}, + {"TestCase2", "abcde", 5}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 36f271874ad41d137da5160e1dff974caa7519f1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 21 Aug 2025 09:00:18 +0800 Subject: [PATCH 367/450] Add solution and test-cases for problem 1504 --- .../1.jpg | Bin 0 -> 6604 bytes .../2.jpg | Bin 0 -> 8339 bytes .../README.md | 41 ++++++++++++------ .../Solution.go | 27 +++++++++++- .../Solution_test.go | 13 +++--- 5 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/1.jpg create mode 100644 leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/2.jpg diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/1.jpg b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e467df1d5c54e4098513096f8b2fcb05e023070 GIT binary patch literal 6604 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 literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/2.jpg b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac24a3a6ddcfe770a2c317fc51592bbd2c929420 GIT binary patch literal 8339 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 literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md index 854741e64..fee2f70a1 100755 --- a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md +++ b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md @@ -1,28 +1,41 @@ # [1504.Count Submatrices With All Ones][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 +Given an `m x n` binary matrix `mat`, return the number of **submatrices** that have all ones. + +**Example 1:** -**Example 1:** +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: mat = [[1,0,1],[1,1,0],[1,1,0]] +Output: 13 +Explanation: +There are 6 rectangles of side 1x1. +There are 2 rectangles of side 1x2. +There are 3 rectangles of side 2x1. +There is 1 rectangle of side 2x2. +There is 1 rectangle of side 3x1. +Total number of rectangles = 6 + 2 + 3 + 1 + 1 = 13. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Count Submatrices With All Ones -```go ``` - +Input: mat = [[0,1,1,0],[0,1,1,1],[1,1,1,0]] +Output: 24 +Explanation: +There are 8 rectangles of side 1x1. +There are 5 rectangles of side 1x2. +There are 2 rectangles of side 1x3. +There are 4 rectangles of side 2x1. +There are 2 rectangles of side 2x2. +There are 2 rectangles of side 3x1. +There is 1 rectangle of side 3x2. +Total number of rectangles = 8 + 5 + 2 + 4 + 2 + 2 + 1 = 24. +``` ## 结语 diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go index d115ccf5e..2d0d2aa1e 100644 --- a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go +++ b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(mat [][]int) int { + n := len(mat[0]) + heights := make([]int, n) + res := 0 + for _, row := range mat { + for i := 0; i < n; i++ { + if row[i] == 0 { + heights[i] = 0 + } else { + heights[i]++ + } + } + stack := [][3]int{{-1, 0, -1}} + for i, h := range heights { + for len(stack) > 1 && stack[len(stack)-1][2] >= h { + stack = stack[:len(stack)-1] + } + top := stack[len(stack)-1] + j, prev := top[0], top[1] + cur := prev + (i-j)*h + stack = append(stack, [3]int{i, cur, h}) + res += cur + } + } + return res } diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution_test.go b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution_test.go index 14ff50eb4..be7710355 100644 --- a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution_test.go +++ b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/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, 0, 1}, {1, 1, 0}, {1, 1, 0}}, 13}, + {"TestCase2", [][]int{{0, 1, 1, 0}, {0, 1, 1, 1}, {1, 1, 1, 0}}, 24}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 205ae9b7d52dd376d497a68f0bb407635e8677bc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 22 Aug 2025 08:57:13 +0800 Subject: [PATCH 368/450] Add solution and test-cases for problem 3195 --- .../1.png | Bin 0 -> 12513 bytes .../2.png | Bin 0 -> 7542 bytes .../README.md | 35 +++++++++++------- .../Solution.go | 19 +++++++++- .../Solution_test.go | 13 +++---- 5 files changed, 45 insertions(+), 22 deletions(-) create mode 100644 leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/1.png create mode 100644 leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/2.png diff --git a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/1.png b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/1.png new file mode 100644 index 0000000000000000000000000000000000000000..b84f01864da155b4845aab221931219bb6a618c9 GIT binary patch literal 12513 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 literal 0 HcmV?d00001 diff --git a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md index 8ae78c296..07307f9a0 100755 --- a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md +++ b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md @@ -1,28 +1,37 @@ # [3195.Find the Minimum Area to Cover All Ones I][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 a 2D **binary** array `grid`. Find a rectangle with horizontal and vertical sides with the **smallest** area, such that all the 1's in `grid` lie inside this rectangle. + +Return the **minimum** possible area of the rectangle. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,1,0],[1,0,1]] + +Output: 6 + +Explanation: + +The smallest rectangle has a height of 2 and a width of 3, so it has an area of 2 * 3 = 6. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Find the Minimum Area to Cover All Ones I -```go ``` +Input: grid = [[1,0],[0,0]] + +Output: 1 +Explanation: + +The smallest rectangle has both height and width 1, so its area is 1 * 1 = 1. +``` ## 结语 diff --git a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go index d115ccf5e..7d780374e 100644 --- a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go +++ b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + leftTop, rightBottom := [2]int{1001, 1001}, [2]int{-1, -1} + rows, cols := len(grid), len(grid[0]) + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + if grid[i][j] == 1 { + leftTop[0] = min(leftTop[0], i) + leftTop[1] = min(leftTop[1], j) + + rightBottom[0] = max(rightBottom[0], i) + rightBottom[1] = max(rightBottom[1], j) + } + } + } + x := rightBottom[0] - leftTop[0] + y := rightBottom[1] - leftTop[1] + return (x + 1) * (y + 1) } diff --git a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution_test.go b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution_test.go index 14ff50eb4..24574291a 100644 --- a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution_test.go +++ b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/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{{0, 1, 0}, {1, 0, 1}}, 6}, + {"TestCase2", [][]int{{1, 0}, {0, 0}}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From df3edfc55a35c95d5cdc76e2debde82809bbf521 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 23 Aug 2025 17:00:10 +0800 Subject: [PATCH 369/450] Add solution and test-cases for problem 3197 --- .../1.png | Bin 0 -> 7633 bytes .../2.png | Bin 0 -> 9415 bytes .../README.md | 41 ++++++++---- .../Solution.go | 63 +++++++++++++++++- .../Solution_test.go | 13 ++-- 5 files changed, 95 insertions(+), 22 deletions(-) create mode 100644 leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/1.png create mode 100644 leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/2.png diff --git a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/1.png b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c28e81aeadc4472978cc0c6653f0e093e455d66 GIT binary patch literal 7633 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

    2Ds(b=H@7fgJT1`L3?P6;WDdb4Q!P(;^)jJgNo z8|W-%sA^=8Xk^0SRFyIcM21oUkC6UK=+&$saa2W<2SLEzD@l7*tWpXW*wfi?u&2Zk zQ0uq%{W%)Ep9=wX`~NZrxC_%an#ztsql*BMe4#3^JSd7oQ&uQkPBEb@KHZB;4T05T z0F?k1$`5CQHxtl|?t&3G0D) zB9?%Ah%p35Mto_P_+K(gjpQQb%3uj#7TAF`o~=r-A(6yjFo+=`0H2(CAfcHBn}Luc zJ-kptMM7-23|Qg7oj4ut1CFRZ6I^--QwAUNIev08^blM*IQtOZyxAF1d`_TUu$A1;fOvPsu+uU;c4rK*cSM1XdH z?^==jql>2(oX241Xl-<$Y!L*!XmAhxI%Y|EPg6Xza?`x1`A0tfM)O9tYi5R>o%L|5 z=TG*OjFPi;EBp+$ebaGTlYC_B1y{p`6Qv)oP*`s8qFnj=2K>@35{->jS-!OwnbhM< zv%?LmsHx1xN>|%CLVU;a?p>)#!rh{=Xkv2Kwfmv{hdnn9)CFp-JQ=T^leQlEKz8eC zc~Spb8_i|DY8neYg4P5{tg%46{Y@a>u_5dYRoPcFGhhp5mHKpfH#j9)S(JH}n z<=hoP5_{bz)gJ5BG_-S>;JI+-JVM3t1Klim1Z)inJhk@B)RRdZhfNm(HF1YNtZeru zZC=HSUGKw=PzJSO<>l&FOWHge9WYWcZYLHfC(Kn7e~>#fbuSnRxHV&nTcOq!4^yuN zZq-=${F~x}&M`;lRN>v~r4vofcgATg^JN8^$t2rT)i#3NP{wofu~qk==z<-&LuEsY z=Pw+5-jLck5L;1++n1syF4aA~tdCT2uM$TpzQhujn!S5{TcTk;!+)&*!)IwjaVObv zBMA)gtgCCuD{pnlw^#~#nieEJIFz!=sz}lJsl!*+uIWuZ85?Xx=P3aJ0mhn|n&y>F z?K^5}YFN<(U4B$0?xD0XuRE)^pH#G_Nimv+&A0J8zrs_#_Ve!khdLbckjoe1`oun| zp6v4F%gL=>D@&^bE9D+!0Y>b<;GaLm2(bBosU6O}wpii0ZCjDYY{g(*m8fp}7bVvX z@X|9wyK*~hhFtZJ3j^iJMvrg)h>LkPenvwGK{=V3nXZjXhQ{Q;X!nIRMn*>)8XAat z+Pd8IcH2FaZ0go)X*)aT;E&uFDg4uCFePCpmu$}+Xh=QsVwobnV`9MkJDsfwJ`?rK z=ECX?+C1sqKwrssSFYR~9E`4MYATYCAG9s~Brp)4oSZx`r%yfGv_j{w4v%!9y{_Z> z;=s5&%(AVtQK%?GJI9|LecduJMNj4z$QvDTnbliXRwi50)6Xn>P_FyHs^tmSqIJQ8 zjzMgGlC(==5S!93{FcI*DdguxTz_l~8kunSbrm%b)vj)@jnRvvCH!Qm zpRG6=Ffca!k|)`+(yEc1wRaNnpsoOr`9NQy+k6Jh$=a>g@vHTNkF z)n@J~8Y>}-*R2j{K2BlynN-{co06^g_IUGI9ircU3L_4i1W47g*gRZPvq_r>wk=qr zD32w+y)9Uhl!|EFa5JD?nGd=l8hB1E?&48BS_>1=h^WRUW&Hy&3^WcTn^mw45yLKN-vHIQ6uPfkTqeghVR4f+%@E{{2gU)20Ymo)xUFP(PTRT?|Y2Q7Dw;3M}rtYxu z-61L9DXPTd#iRMXr{>JQDP6iNuVw!y9dvB|-l5vsT3PzjneL+PPjzP%{MoWXia&w( z7WK<}haVQQBnHPnGfpXz;cR;j9(Z=nb|PY=J@F%LUPIr*e-7LXHBH|+QlC>-SGOAc zeGyYGj}!F@_U+q8XR*$Abaoyq2_g)&-jk_$ipP6)Hu@-pPg`R2u=xt7f@lT6o?Iq9 zJ0oiNve-a2+M4sVhA=EFgAGAaxm;cs;5c9;8y$_Usjp{ux3`E`!IF$atD8u?gRdkH&%dCc@UX*{XJy|vTiMRYSKXgCIjyRCGJy@b2UrDZLzNHIRAWc%^vbLeRHOJqo0n`1!HtNZm@2|Hl zU1k$Kz@KrcyM0+~Z~g6vk8#A*Wg zgQ*W~1X~hito`PyYo [!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 a 2D **binary** array `grid`. You need to find 3 **non-overlapping** rectangles having **non-zero** areas with horizontal and vertical sides such that all the 1's in `grid` lie inside these rectangles. + +Return the **minimum** possible sum of the area of these rectangles. + +**Note** that the rectangles are allowed to touch. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,0,1],[1,1,1]] + +Output: 5 + +Explanation: + +The 1's at (0, 0) and (1, 0) are covered by a rectangle of area 2. +The 1's at (0, 2) and (1, 2) are covered by a rectangle of area 2. +The 1 at (1, 1) is covered by a rectangle of area 1. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Find the Minimum Area to Cover All Ones II -```go ``` +Input: grid = [[1,0,1,0],[0,1,0,1]] + +Output: 5 +Explanation: + +The 1's at (0, 0) and (0, 2) are covered by a rectangle of area 3. +The 1 at (1, 1) is covered by a rectangle of area 1. +The 1 at (1, 3) is covered by a rectangle of area 1. +``` ## 结语 diff --git a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go index d115ccf5e..8c9a1667e 100644 --- a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go +++ b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func minimumSum2(grid [][]int, u, d, l, r int) int { + min_i, max_i := len(grid), 0 + min_j, max_j := len(grid[0]), 0 + for i := u; i <= d; i++ { + for j := l; j <= r; j++ { + if grid[i][j] == 1 { + min_i = min(min_i, i) + min_j = min(min_j, j) + max_i = max(max_i, i) + max_j = max(max_j, j) + } + } + } + if min_i <= max_i { + return (max_i - min_i + 1) * (max_j - min_j + 1) + } + return math.MaxInt32 / 3 +} + +func rotate(vec [][]int) [][]int { + n, m := len(vec), len(vec[0]) + ret := make([][]int, m) + for i := range ret { + ret[i] = make([]int, n) + } + for i := 0; i < n; i++ { + for j := 0; j < m; j++ { + ret[m-j-1][i] = vec[i][j] + } + } + return ret +} + +func solve(grid [][]int) int { + n, m := len(grid), len(grid[0]) + res := n * m + for i := 0; i+1 < n; i++ { + for j := 0; j+1 < m; j++ { + res = min(res, minimumSum2(grid, 0, i, 0, m-1)+ + minimumSum2(grid, i+1, n-1, 0, j)+ + minimumSum2(grid, i+1, n-1, j+1, m-1)) + res = min(res, minimumSum2(grid, 0, i, 0, j)+ + minimumSum2(grid, 0, i, j+1, m-1)+ + minimumSum2(grid, i+1, n-1, 0, m-1)) + } + } + for i := 0; i+2 < n; i++ { + for j := i + 1; j+1 < n; j++ { + res = min(res, minimumSum2(grid, 0, i, 0, m-1)+ + minimumSum2(grid, i+1, j, 0, m-1)+ + minimumSum2(grid, j+1, n-1, 0, m-1)) + } + } + return res +} + +func Solution(grid [][]int) int { + rgrid := rotate(grid) + return min(solve(grid), solve(rgrid)) } diff --git a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution_test.go b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution_test.go index 14ff50eb4..13689c871 100644 --- a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution_test.go +++ b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/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, 0, 1}, {1, 1, 1}}, 5}, + {"TestCase2", [][]int{{1, 0, 1, 0}, {0, 1, 0, 1}}, 5}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 23c5818d4b36ebe47cb98aa8f9e506605b15357a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 24 Aug 2025 14:57:02 +0800 Subject: [PATCH 370/450] Add solution and test-cases for problem 1835 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 12 +++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md index 4b3e31ca3..c912056f3 100755 --- a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md +++ b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md @@ -1,28 +1,32 @@ # [1835.Find XOR Sum of All Pairs Bitwise AND][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 +The **XOR sum** of a list is the bitwise `XOR` of all its elements. If the list only contains one element, then its **XOR sum** will be equal to this element. + +- For example, the **XOR sum** of `[1,2,3,4]` is equal to `1 XOR 2 XOR 3 XOR 4 = 4`, and the **XOR sum** of `[3]` is equal to `3`. + +You are given two **0-indexed** arrays `arr1` and `arr2` that consist only of non-negative integers. + +Consider the list containing the result of `arr1[i] AND arr2[j]` (bitwise AND) for every `(i, j)` pair where `0 <= i < arr1.length` and `0 <= j < arr2.length`. + +Return the **XOR sum** of the aforementioned list. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr1 = [1,2,3], arr2 = [6,5] +Output: 0 +Explanation: The list = [1 AND 6, 1 AND 5, 2 AND 6, 2 AND 5, 3 AND 6, 3 AND 5] = [0,1,2,0,2,1]. +The XOR sum = 0 XOR 1 XOR 2 XOR 0 XOR 2 XOR 1 = 0. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find XOR Sum of All Pairs Bitwise AND -```go ``` - +Input: arr1 = [12], arr2 = [4] +Output: 4 +Explanation: The list = [12 AND 4] = [4]. The XOR sum = 4. +``` ## 结语 diff --git a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go index d115ccf5e..b1180f4ab 100644 --- a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go +++ b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr1 []int, arr2 []int) int { + xor2 := 0 + for _, n := range arr2 { + xor2 ^= n + } + ans := 0 + for _, n := range arr1 { + ans ^= (n & xor2) + } + return ans } diff --git a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go index 14ff50eb4..dc6b39d7c 100644 --- a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go +++ b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + arr1, arr2 []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3}, []int{6, 5}, 0}, + {"TestCase2", []int{12}, []int{4}, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.arr1, c.arr2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.arr1, c.arr2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b2aacc5d4d9082fe0c473872dbedcd5bf1256ceb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Aug 2025 09:13:37 +0800 Subject: [PATCH 371/450] Add solution and test-cases for problem 2652 --- .../2601-2700/2652.Sum-Multiples/README.md | 37 +++++++++++++++++++ .../2601-2700/2652.Sum-Multiples/Solution.go | 10 ++++- .../2652.Sum-Multiples/Solution_test.go | 14 +++---- 3 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2652.Sum-Multiples/README.md diff --git a/leetcode/2601-2700/2652.Sum-Multiples/README.md b/leetcode/2601-2700/2652.Sum-Multiples/README.md new file mode 100644 index 000000000..f1b3a889b --- /dev/null +++ b/leetcode/2601-2700/2652.Sum-Multiples/README.md @@ -0,0 +1,37 @@ +# [2652.Sum Multiples][title] + +## Description +Given a positive integer `n`, find the sum of all integers in the range `[1, n]` **inclusive** that are divisible by `3`, `5`, or `7`. + +Return an integer denoting the sum of all numbers in the given range satisfying the constraint. + +**Example 1:** + +``` +Input: n = 7 +Output: 21 +Explanation: Numbers in the range [1, 7] that are divisible by 3, 5, or 7 are 3, 5, 6, 7. The sum of these numbers is 21. +``` + +**Example 2:** + +``` +Input: n = 10 +Output: 40 +Explanation: Numbers in the range [1, 10] that are divisible by 3, 5, or 7 are 3, 5, 6, 7, 9, 10. The sum of these numbers is 40. +``` + +**Example 3:** + +``` +Input: n = 9 +Output: 30 +Explanation: Numbers in the range [1, 9] that are divisible by 3, 5, or 7 are 3, 5, 6, 7, 9. The sum of these numbers is 30. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-multiples +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2652.Sum-Multiples/Solution.go b/leetcode/2601-2700/2652.Sum-Multiples/Solution.go index d115ccf5e..18705604a 100755 --- a/leetcode/2601-2700/2652.Sum-Multiples/Solution.go +++ b/leetcode/2601-2700/2652.Sum-Multiples/Solution.go @@ -1,5 +1,11 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + sum := 0 + for i := 1; i <= n; i++ { + if i%3 == 0 || i%5 == 0 || i%7 == 0 { + sum += i + } + } + return sum } diff --git a/leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go b/leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go index 14ff50eb4..5a7d98075 100755 --- a/leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go +++ b/leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go @@ -10,12 +10,12 @@ 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", 7, 21}, + {"TestCase2", 9, 30}, + {"TestCase3", 10, 40}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c2f8df3473cabdadba95a5c565e7c0e3d9e9670b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 26 Aug 2025 08:54:59 +0800 Subject: [PATCH 372/450] Add solution and test-cases for problem 3000 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 16 ++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md index 8608d0ffb..e52371d33 100755 --- a/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md +++ b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md @@ -1,28 +1,30 @@ # [3000.Maximum Area of Longest Diagonal Rectangle][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 a 2D **0-indexed** integer array `dimensions`. + +For all indices `i`, `0 <= i < dimensions.length`, `dimensions[i][0]` represents the length and `dimensions[i][1]` represents the width of the rectangle `i`. + +Return the **area** of the rectangle having the **longest** diagonal. If there are multiple rectangles with the longest diagonal, return the area of the rectangle having the **maximum** area. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: dimensions = [[9,3],[8,6]] +Output: 48 +Explanation: +For index = 0, length = 9 and width = 3. Diagonal length = sqrt(9 * 9 + 3 * 3) = sqrt(90) ≈ 9.487. +For index = 1, length = 8 and width = 6. Diagonal length = sqrt(8 * 8 + 6 * 6) = sqrt(100) = 10. +So, the rectangle at index 1 has a greater diagonal length therefore we return area = 8 * 6 = 48. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Area of Longest Diagonal Rectangle -```go ``` - +Input: dimensions = [[3,4],[4,3]] +Output: 12 +Explanation: Length of diagonal is the same for both which is 5, so maximum area = 12. +``` ## 结语 diff --git a/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution.go b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution.go index d115ccf5e..5a920c9b5 100644 --- a/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution.go +++ b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(dimensions [][]int) int { + diagonal, area := 0, 0 + for _, n := range dimensions { + tmp := n[0]*n[0] + n[1]*n[1] + if tmp == diagonal { + area = max(area, n[0]*n[1]) + } + if tmp > diagonal { + diagonal = tmp + area = n[0] * n[1] + } + } + + return area } diff --git a/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution_test.go b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution_test.go index 14ff50eb4..127b2d3c7 100644 --- a/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution_test.go +++ b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/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{{9, 3}, {8, 6}}, 48}, + {"TestCase2", [][]int{{3, 4}, {4, 3}}, 12}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a4e51fed9bf7c80aee694dd80aeac400f62c0641 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 27 Aug 2025 09:07:30 +0800 Subject: [PATCH 373/450] Add solution and test-cases for problem 3459 --- .../1.jpg | Bin 0 -> 7931 bytes .../2.jpg | Bin 0 -> 7252 bytes .../3.jpg | Bin 0 -> 7285 bytes .../README.md | 73 ++++++++++++++---- .../Solution.go | 54 ++++++++++++- .../Solution_test.go | 14 ++-- .../e.jpg | Bin 0 -> 18140 bytes 7 files changed, 119 insertions(+), 22 deletions(-) create mode 100644 leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/1.jpg create mode 100644 leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/2.jpg create mode 100644 leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/3.jpg create mode 100644 leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/e.jpg diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/1.jpg b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b66cbefcf6232db36f1ae6337675511aec20334 GIT binary patch literal 7931 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 literal 0 HcmV?d00001 diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/2.jpg b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4deb4295cc39dda453329ec23bbe1ef095da9758 GIT binary patch literal 7252 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 OkFNK%-Ui6k!G8gFrV2R# literal 0 HcmV?d00001 diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/3.jpg b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0241f3f6df7ad6d6fd00b0e7f53784723805d82f GIT binary patch literal 7285 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 [!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 a 2D integer matrix `grid` of size `n x m`, where each element is either `0`, `1`, or `2`. + +A **V-shaped diagonal segment** is defined as: + +- The segment starts with `1`. +- The subsequent elements follow this infinite sequence: `2, 0, 2, 0, ...`. +- The segment: + + - Starts **along** a diagonal direction (top-left to bottom-right, bottom-right to top-left, top-right to bottom-left, or bottom-left to top-right). + - Continues the **sequence** in the same diagonal direction. + - Makes **at most one clockwise 90-degree turn** to another diagonal direction while **maintaining** the sequence. + +![e](./e.jpg) + +Return the **length** of the **longest V-shaped diagonal segment**. If no valid segment exists, return 0. + +**Example 1:** + +![1](./1.jpg) + +``` +Input: grid = [[2,2,1,2,2],[2,0,2,2,0],[2,0,1,1,0],[1,0,2,2,2],[2,0,0,2,2]] + +Output: 5 + +Explanation: + +The longest V-shaped diagonal segment has a length of 5 and follows these coordinates: (0,2) → (1,3) → (2,4), takes a 90-degree clockwise turn at (2,4), and continues as (3,3) → (4,2). +``` -**Example 1:** +**Example 2:** + +![2](./2.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[2,2,2,2,2],[2,0,2,2,0],[2,0,1,1,0],[1,0,2,2,2],[2,0,0,2,2]] + +Output: 4 + +Explanation: + +The longest V-shaped diagonal segment has a length of 4 and follows these coordinates: (2,3) → (3,2), takes a 90-degree clockwise turn at (3,2), and continues as (2,1) → (1,0). +``` + +**Example 3:** + +![3](./3.jpg) + ``` +Input: grid = [[1,2,2,2,2],[2,2,2,2,0],[2,0,0,0,0],[0,0,2,2,2],[2,0,0,2,0]] + +Output: 5 -## 题意 -> ... +Explanation: + +The longest V-shaped diagonal segment has a length of 5 and follows these coordinates: (0,0) → (1,1) → (2,2) → (3,3) → (4,4). +``` -## 题解 +**Example 4:** -### 思路1 -> ... -Length of Longest V-Shaped Diagonal Segment -```go ``` +Input: grid = [[1]] +Output: 1 + +Explanation: + +The longest V-shaped diagonal segment has a length of 1 and follows these coordinates: (0,0). +``` ## 结语 diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go index d115ccf5e..ab9ab1bc9 100644 --- a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go +++ b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution.go @@ -1,5 +1,55 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + dirs := [4][2]int{{1, 1}, {1, -1}, {-1, -1}, {-1, 1}} + m, n := len(grid), len(grid[0]) + memo := make([][][4][2]int, m) + for i := range memo { + memo[i] = make([][4][2]int, n) + for j := range memo[i] { + for k := range memo[i][j] { + for l := range memo[i][j][k] { + memo[i][j][k][l] = -1 + } + } + } + } + + var dfs func(cx, cy, direction int, turn bool, target int) int + dfs = func(cx, cy, direction int, turn bool, target int) int { + nx, ny := cx+dirs[direction][0], cy+dirs[direction][1] + /* If it goes beyond the boundary or the next node's value is not the target value, then return */ + if nx < 0 || ny < 0 || nx >= m || ny >= n || grid[nx][ny] != target { + return 0 + } + + turnInt := 0 + if turn { + turnInt = 1 + } + if memo[nx][ny][direction][turnInt] != -1 { + return memo[nx][ny][direction][turnInt] + } + + /* Continue walking in the original direction. */ + maxStep := dfs(nx, ny, direction, turn, 2-target) + if turn { + /* Clockwise rotate 90 degrees turn */ + maxStep = max(maxStep, dfs(nx, ny, (direction+1)%4, false, 2-target)) + } + memo[nx][ny][direction][turnInt] = maxStep + 1 + return maxStep + 1 + } + + res := 0 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if grid[i][j] == 1 { + for direction := 0; direction < 4; direction++ { + res = max(res, dfs(i, j, direction, true, 2)+1) + } + } + } + } + return res } diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go index 14ff50eb4..a0fa699fb 100644 --- a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go +++ b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/Solution_test.go @@ -10,12 +10,12 @@ 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{{2, 2, 1, 2, 2}, {2, 0, 2, 2, 0}, {2, 0, 1, 1, 0}, {1, 0, 2, 2, 2}, {2, 0, 0, 2, 2}}, 5}, + {"TestCase2", [][]int{{2, 2, 2, 2, 2}, {2, 0, 2, 2, 0}, {2, 0, 1, 1, 0}, {1, 0, 2, 2, 2}, {2, 0, 0, 2, 2}}, 4}, + {"TestCase3", [][]int{{1, 2, 2, 2, 2}, {2, 2, 2, 2, 0}, {2, 0, 0, 0, 0}, {0, 0, 2, 2, 2}, {2, 0, 0, 2, 0}}, 5}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/e.jpg b/leetcode/3401-3500/3459.Length-of-Longest-V-Shaped-Diagonal-Segment/e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..766871950fb129c8a833379fe78ef2c6984e37b5 GIT binary patch literal 18140 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 V?N+Et@s8=E&uka)GSh7i{4c Date: Thu, 28 Aug 2025 09:04:23 +0800 Subject: [PATCH 374/450] Add solution and test-cases for problem 3446 --- .../3446.Sort-Matrix-by-Diagonals/1.png | Bin 0 -> 27549 bytes .../3446.Sort-Matrix-by-Diagonals/2.png | Bin 0 -> 16143 bytes .../3446.Sort-Matrix-by-Diagonals/README.md | 55 +++++++++++++----- .../3446.Sort-Matrix-by-Diagonals/Solution.go | 32 +++++++++- .../Solution_test.go | 14 ++--- 5 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/1.png create mode 100644 leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/2.png diff --git a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/1.png b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf3ef9c47d10bea3775104e5b19ff266d868427 GIT binary patch literal 27549 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 literal 0 HcmV?d00001 diff --git a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/2.png b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/2.png new file mode 100644 index 0000000000000000000000000000000000000000..e03b5a887e3a42a47448701083a2c034e3527ff8 GIT binary patch literal 16143 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 [!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 `n x n` square matrix of integers `grid`. Return the matrix such that: + +- The diagonals in the **bottom-left triangle** (including the middle diagonal) are sorted in **non-increasing order**. +- The diagonals in the **top-right triangle** are sorted in **non-decreasing order**. + +**Example 1:** + +![1](./1.png) + +``` +Input: grid = [[1,7,3],[9,8,2],[4,5,6]] + +Output: [[8,2,3],[9,6,7],[4,5,1]] + +Explanation: + +The diagonals with a black arrow (bottom-left triangle) should be sorted in non-increasing order: -**Example 1:** +[1, 8, 6] becomes [8, 6, 1]. +[9, 5] and [4] remain unchanged. +The diagonals with a blue arrow (top-right triangle) should be sorted in non-decreasing order: +[7, 2] becomes [2, 7]. +[3] remains unchanged. ``` -Input: a = "11", b = "1" -Output: "100" + +**Example 2:** + +![2](./2.png) + ``` +Input: grid = [[0,1],[1,2]] -## 题意 -> ... +Output: [[2,1],[1,0]] -## 题解 +Explanation: -### 思路1 -> ... -Sort Matrix by Diagonals -```go +The diagonals with a black arrow must be non-increasing, so [0, 2] is changed to [2, 0]. The other diagonals are already in the correct order. ``` +**Example 3:** + +``` +Input: grid = [[1]] + +Output: [[1]] + +Explanation: + +Diagonals with exactly one element are already in order, so no changes are needed. +``` ## 结语 diff --git a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go index d115ccf5e..921fac79b 100644 --- a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go +++ b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(grid [][]int) [][]int { + n := len(grid) + for i := 0; i < n; i++ { + // j = 0 + have := []int{} + for r, j := i, 0; r < n; r, j = r+1, j+1 { + have = append(have, grid[r][j]) + } + sort.Slice(have, func(i, j int) bool { + return have[i] > have[j] + }) + index := 0 + for r, j := i, 0; r < n; r, j, index = r+1, j+1, index+1 { + grid[r][j] = have[index] + } + } + for j := 1; j < n; j++ { + // i = 1 + have := []int{} + for i, r := 0, j; r < n; i, r = i+1, r+1 { + have = append(have, grid[i][r]) + } + sort.Ints(have) + for i, r, index := 0, j, 0; r < n; i, r, index = i+1, r+1, index+1 { + grid[i][r] = have[index] + } + } + return grid } diff --git a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go index 14ff50eb4..59031270b 100644 --- a/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go +++ b/leetcode/3401-3500/3446.Sort-Matrix-by-Diagonals/Solution_test.go @@ -10,12 +10,12 @@ 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, 7, 3}, {9, 8, 2}, {4, 5, 6}}, [][]int{{8, 2, 3}, {9, 6, 7}, {4, 5, 1}}}, + {"TestCase2", [][]int{{0, 1}, {1, 2}}, [][]int{{2, 1}, {1, 0}}}, + {"TestCase3", [][]int{{1}}, [][]int{{1}}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1b7040dcba853bd246aaca7fe98684b034438bfc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 29 Aug 2025 08:52:36 +0800 Subject: [PATCH 375/450] Add solution and test-cases for problem 3021 --- .../1.png | Bin 0 -> 20198 bytes .../README.md | 39 +++++++++++------- .../Solution.go | 4 +- .../Solution_test.go | 19 ++++----- 4 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/1.png diff --git a/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/1.png b/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/1.png new file mode 100644 index 0000000000000000000000000000000000000000..31bdda50b5062dc1bf6f7b6f9b7a4d7db178eff3 GIT binary patch literal 20198 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 literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/README.md b/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/README.md index 5b4517997..8a1b3455b 100755 --- a/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/README.md +++ b/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/README.md @@ -1,28 +1,39 @@ # [3021.Alice and Bob Playing Flower Game][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 +Alice and Bob are playing a turn-based game on a field, with two lanes of flowers between them. There are `x` flowers in the first lane between Alice and Bob, and `y` flowers in the second lane between them. + +![1](./1.png) + +The game proceeds as follows: + +1. Alice takes the first turn. +2. In each turn, a player must choose either one of the lane and pick one flower from that side. +3. At the end of the turn, if there are no flowers left at all, the current player captures their opponent and wins the game. + +Given two integers, `n` and `m`, the task is to compute the number of possible pairs `(x, y)` that satisfy the conditions: + +- Alice must win the game according to the described rules. +- The number of flowers `x` in the first lane must be in the range `[1,n]`. +- The number of flowers `y` in the second lane must be in the range `[1,m]`. + +Return the number of possible pairs `(x, y)` that satisfy the conditions mentioned in the statement. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, m = 2 +Output: 3 +Explanation: The following pairs satisfy conditions described in the statement: (1,2), (3,2), (2,1). ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Alice and Bob Playing Flower Game -```go ``` - +Input: n = 1, m = 1 +Output: 0 +Explanation: No pairs satisfy the conditions described in the statement. +``` ## 结语 diff --git a/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution.go b/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution.go index d115ccf5e..8bd7a5e5e 100644 --- a/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution.go +++ b/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution.go @@ -1,5 +1,5 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, m int) int64 { + return int64(m) * int64(n) / 2 } diff --git a/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution_test.go b/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution_test.go index 14ff50eb4..326d3ef6b 100644 --- a/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution_test.go +++ b/leetcode/3001-3100/3021.Alice-and-Bob-Playing-Flower-Game/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, m int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 2, 3}, + {"TestCase1", 1, 1, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.m) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.m) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a32c9fb387cb467df589d7bc48b72c67497e6a54 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 1 Sep 2025 09:01:52 +0800 Subject: [PATCH 376/450] Add solution and test-cases for problem 2956 --- .../1.gif | Bin 0 -> 1693323 bytes .../README.md | 48 +++++++++++++----- .../Solution.go | 23 ++++++++- .../Solution_test.go | 22 ++++---- 4 files changed, 67 insertions(+), 26 deletions(-) create mode 100644 leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/1.gif diff --git a/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/1.gif b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/1.gif new file mode 100644 index 0000000000000000000000000000000000000000..f47c859fced2176af738bdb6051402d640476fe6 GIT binary patch literal 1693323 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 z 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

    hcbLy;*k#6f`p|3P3l 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⁣oyLiu8fb*3 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

    3D)d(A%>oJC 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⊤Cs|b<{za#NnCPK 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

    Jp~ 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 z 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

    $;W6Lmgm_nKrT@`k2jpLdcNa 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 z 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%0Dv%1DqiHmVT=PnE_y3IZrexX=Ss92qc? z1CYrc?f^hd^60<|lz!v6N)#L6g`+8c)E~G)j2(Ff02qXu8D$v|h$jnCc2m(f1OWhS z1w&YP;0O}%KoC>X7IJkn>QR_oC4jmT_oX55~CeT;H*M6|D}D&=?_p66F_`8Al8d=CgFQA z2$|lv&;Qas^Ma`OzqBufdzH>_7u8zr^XSk$cpof=h2^v*?#kW?-%(N24sIq}cq}7J zH>rd+os+*K_aHK|)pznAT&wi7>smADtxFqtmv+UvrzaXwP5H_`-7kzmP4JW%09fMemNHORIk z;>aNZCXX)0d+=$b%D(dj$EMm;rCP4=T6UvSva{aCS;xdngLBdK^9U6pSi+3zvYg8X zA{`;+teAlAJZr;=YX8-Jn16L&>OL|r-s~AdSOBRbq~I*Fo-GCB)LnAknedU(zoQOK z8m(5*8BV4EKhO^zhF;)jcM@p+?nu>N;HM^!hQ9l+fFE=%k06aE{2#z?kSayu9qdpZ zEl?L%cR96vm*;C8vSh!Ih%9QjjQP$CSis}yhpiXmvo~$+vNoaOZD0c&vIU#x0gX0e z)$H9Dt-gx9qYJ`Kf;={n+HALO!V^m#UoT;E*knPs>=#uk6xS$d>ndbe>)$a5c1bZa zGLb?ciGX_;FRMa6k5Fj+cLH}rfmkvowvC{dFXZYED4q#n-uC8~AM(Uv0fc{~L}5X# zMp2Dd-1!u`?{L5wU(CegBm{AY<45I4!lX9AN@S|*)};fX%o!$mjna7FuO1t3g_H zuVdTl-DV;06kbolzs#?M!u$^76ufItu{9Rg{lDmkz~plt>0(-OX{|Y^OjoGHK3K7> zw#8M;Qrk3bitbHF&aoEi=D*A@4G6lv+|>8Jk=&4d7uPhN+LR{~{wj{dA5jVip@o0e zVJu4(4tVP7$|=w!reKzXWO>kr?HClF&jX>x2ipR{-XV@^q0&Z`u@v3+zA&=8xK)0tzWy?%7z1~_ zezzBgfVbVKSc$sQ7)L`&Mn@6)sIpHZYZydAm<;*pO1l5N;{)xrpKm1XUypAgqAH10 zO7pJzZB&(j%&%bW&+H-`E2>9?gtQ#Av?52l1?NpPbE%Tse~crSp&>1b1$V8Ak~B0yL;zhRId4u;d{V-vXw*q)i$8_`&~H2 z2b1bUyec|->N|@u-HMS}Y=b2vq!IX@i3SjRvF8qZ^m3Jdkw2Bp**q9G56zsnYg|{X zxuGZ+N!N^r^UQ<%+paH-ICKGh*&I|+wL>o+Hpj7`|2EtlhsIc>z_~*vh+5iV#hIK^ zogR3!WD>XL!(I~7F{!?zvDL<~fJqOdEDWqS4#V4qdnL2+djB#%$%enok4*TJTz1ni z8^Pmx-aT{ewA^2juJck|FdicOFO=r!Nu*q`Mnv|SFAs%ZgIADpL}BPO>|f=V3Mdw) z^~{evR;3=*_!T;See`D<`JB1DL0Z3d7bA2c1SANrh-~e}bgWbvc7+Z0 z26Sy&%(EM>JM_PF#C&-E7x<-b`;pK*H9y?3K$pLx-a zaxhjq7nwUoa)pU+LR7I(vo@&FCe)~H*#rx-1`rt`7E8z39gwn)oIU=ay?57keFMEs|G6KOT^ z^c}+n+O4X7ep`b3wak^*m*+ChX?d%KtnjFq;NBW$&_uo%oX8t|)AQj?qupSd)Aq{^ zOCKHexGB3TBFbAeF&&1gF)L0&+X-{)q-vqt_5+Rh^Lnx9+gkkL}_f`1v&~J_tbk5N!S+&%+RQQcyw4RWE#oc+Wfl8IU!K}euM&o%d8DI5c`RDE(~@5jBqc@5qdCR69LJ_#{={$1K)TW@Pv6MnpF z_{06Ps`}em)yG(#FCui-JN=*Pa*VdirCr{Li1>VY6aDFfru7WP&jnBl+&5-4(CWck zqkPd#n^)~rTi(QK_I=gAH~r2`&zRw!l8xLhJoeyHwb3tCI!8%4X4nB6Q^L15pYvO| z@MrNV%MVIcE*wH!c4gH1!5*W6cRte(&W-mNbGXo5q_x$RH8L2RddO&wG1Zs4!*%J7 zz9RRs{M}x~^D&<;X@_6`pe|u|{rA`VGH>`&b25k2e=qC(qxbP{4C4JaH8ZqmPW z>U%9FX3lC`ToT$res9&r*1=z(Y6g^{*~UhUiXp?0 z<~N3*Z%^ay{OO|H1#r0;bUbGM!!3Nx{?0V!oV{&nMb2HLqZ&i%5Bn^~?=%usraXK@ zy5welXw}#RtybsOs?jf1`$jx^tx#P&BW-4LKAjol*aktf?L<8Mf@z!o>=Unm5&i1Z z?fdvF+K~V0!Orf1i{-Cz7rK`fL$4%`W*_ZuEut1Gtm4npm4^LJm`|wudLkM7MWXUd z9E70-ZVp>xSj23SR+`)v=eHgw`MktddCpUW9kWln#twX2H`xajU1cruT0i%qb&JRP z|6T{Hp0wDED^>_8ALv`W|Fm2!;Tg3zapk_IFDoHkzCF*xu8A?igZ&UQS!v(p`{wzw zNK2K=7y*V4`ncA1{b8+2q5lnQIR>|7Y5NXlF^l9^HqJp4mSd^jFj@hpwQKf|9oGe3 z^%VxpjUkvuoa5@4HcI>aH$3x_g%^kJK-2`BpUaqy-Vaf<`JElIm!HZ1B}7PS;mk89 z+&2(Ef16 zuQ>nwv|a!^h!h#XXgCRVPH1#28BWmjp>E&3P}AZ~)MR!H*4JQGiO3<>YV9S=Kv}=r3cGh_zHV)>VOjfoE$1*Dp zQODNHj*hdJEZx(bX#kHL>rne^{|dW%d7%#8ja}ayZgwn(I(mu7eslD}8VYt82(CiRMU_vWh>i zFDaBh(0kY8cO{a!>rwgbgR63nOplPa)S?Sk?-<35ze`ecKc$&|)b{&}U+>xez*BYL zsA2>``B$TyKNd#41|Hicx8jJgzq2p?nME)Ra~a`&XvGWDEf(JJ@-ezEOL` z2nh0bp#iH9SC?&2?2iMbPQo;nq|Cc=Q?O3_(?(|o9mLv!2?2NHe^Nu@GG5pFO@Y=9 zL80Ic{w69RG!{#KfWRbkTIBF^J0!5Y?5htBOo+LHTY*I0z}SJYz`ljx<&JS3Wr0go zh%`suTQ{=)rG^tbqGa5R_{Sa7cz-5kzjX>V#Fj6T+5A_E)qp zqc_O{KJ0SOo3rzLoKm>I>o27>X@G$J5pFa%F;^!?;O>XN)X>bS30z~WQl*-Pvi3ld z(P#wT=tfZV@NX~zgo*7duiwlj z7+C$KhK^U=)#^~>Gf?q-gX2?0Mk!7*Ks~r2{Jhu_cg_Su?fi#I;}}Ag;z0w0_>CAYxZtyd6GR9AR$ir0OSgb04{A4 zEMT%IoY8|aD**5)Yi)or-PlG9LONhl6e1MPTn@uQ{-EbRWp)A(Gyg$RsF)-P+WTy9 zPaxmhIX}jeS?HFZ=074iQomL~s?i6li2n89Oi=E%1EB{9An}TCRWlW_fu9PSIGIve z?shieEzXvT)>vWy+~obi7|iSxJC6FU$J^R!#kB7Hnu21SL^(atquEXcA15a?Smlo~}`Z%u7+^E0ChnY3LpFpPE^m8!C`kja(?SVwwxnzS!zX&`URye=1`wXV@S-eb^uF&*+eFCNRE_ zk9^D4@GjV65UpVWAY4Ii;c^;u`_4{ag>1@Ai(Y2jjOUx+t;QD7G8oA6yk^j|Lr-ZQ6y5}#0%9Rx z$?2EM6}^TV-!XSdNZAhQ45tKaMJPvvpO(=V7qGQBDfq{<-d^vYyx8=Y8p1(N!GgtG zbs@dl;Mjc+Bz~?hFW6VJ*s=7s+mu|!n}ibnKIdI2e`f>^=(*Cyx?6M~ zz&~FNU2E(-E|oAAWdhKMUY!1US=zC1;Og3~&V(y&Ro_+SdZ;x;)y~d&LR=q|o$$qj zs$by2mxlTu7I=BGlv({iZT?s_u6#>}Zj23#B+Q#tb2P-q~leHbi!nO>iNdWJ_Ez`mq_p*&K$>2@V zw~Yl3C1krOMq{kZ0*BO0RMVvRPK_)BQ&&QO> z71`{cm*R+*A%&OG`uN`l*<;dpFN16;Apk~x@L;dioq$Vm?-S*%Yb@qOX_8w|k7$)u zn)MVCwg==o6pkOWFN5(C;d}*ziwQYuLuu;wApn)o11AUItjVD9%v%@*qSOo|SYL_~ zAdo!6`xhA7BBfibNo2KR*67$?_*#oG?&2pfudvME(PAnHg1_*%QFoLB<(LmS>HdeK z|Hr)!$&>pYl@jx(wSs9{mj{xUeDc9gWcxPNYYQVTB25GYlw`;Z4wv3PMICf#R7y%E zq$*&7OCXIh36w};NrIDujES=5l?(CLQstp1gr03Nf7FNomvlVXx`s2P*5DQnQhZ)rglPH*=BU44U~I zx*yP;w}(5547w}pL@6h2N=`~cbob=rE~_%IoMlb**yXauFrcj(72=mtkdOPlr0~f` zx(Ahdy>tzV2H7;}V`}ai$?S54YgJGKT*@zGTB?5HM~<|YdXG_4RX->1u{S(JlxB+3 z-_Fs;muie|JyCIBOf}*sc?{JL=rxT_q>BpQ=ga;x+`#`)|6zMUK`CeXFWnD|jdJ%y zDo6F=Jak)0lQJJh+NkwzL(BAdweXWz_Dl5TN;OnJrdib0hcQOvU)T{VzJ4R>$I3GY zdPXpUQ76&piB|5oQ_8ee%1qM?-=X1DI_c@ojLQ1V4#M~f<1DYVaqn%0Wi4X~9^-Pa z*@wZ#sjJZyVADQo9hkG3egK_8#C$s` z7jcVZyPo&VjVlz%EIyI9d@vshT3DT&ANsj1w3qgKf>C|Uar3pB@F20&)U0GQa zYAD83&2O%(pF1J}yQg4P=Rr3p{fXzy7|>48cqAKL=`%7~o4$BDS#!-zRB0JYxHoVe z3Frqk6uewaX_^>I%?HS8oqS8fY|tlZ`RXSnqMlX_MX-w{`CwNIgN%o1C$(zJtOZAaX&%i^-X8^WAp&5>Zd z-ePZ`zrkJ*z1~K4#OE#@W+4z5I!+&bS|6|%P;{RD~XwqmBjt~D|%J`9} zVZ?u>hIjsRYWShB@KZs-uiV_957UXs$sdafPl^kP)de3O6`d3o|9n)mRa*L?xOk_& z{-Cb*q`3G;W#wK|-F`#UVQcHV_Kr{O?I)e>Cmmg%y1IULc92BkVol9|cU$(~qQw8s zuF^WxiMMpl~wK?>;D*6ditUU04imL(nys@;$9>R+*2V z7Hus0;|`~|5F&jn1{Yeo#g^&H-qtUth!&rLM%(z8z?1CWo_U3>Ix`*_eOepBDPrw$ zn=x#@!vi<<=5~%pSdSe&3i~xAL^6idBvu<(oidEcnBNOgnhelC9MEPjf%Y_Z6{hvl z4NvBVO%Jo%7{(A-uJfGaeAr2ic`C-QBw4Fl%vLw?9DHe7ROD@<6tjQhB()fLDvg{) zyN4}SKq6|l<%-4E44Erm7}(q97HA$*&ou6FjxLy({;He)+x+eu?f>zg-`pq{tAQw7=;@)O_Gs;^rd%v00 zl6tJweA*YYt^K67ect=MQSBnMudqX>;G^XG_st=B*e!5hxbY#`#%qs*j&;dU9W($8 ziW$-#dQDc@c*==zNl7cI$&`XF?bjd+*^dT(T<)!fy|Xty>`0gj{n$fG41Hfe)GyxD zxpzxh%R<2Ghge7L=IECh;V3q3e(Jz?8~z~aWtLX~mp zKCU)x&@F5gPCWXj;vL!&(o+kPd- ziB4k5nzfdV#@vJi*9O&#(hgnzY0P)V1gRa7mt1JQ-B8(T(BRpIR0m3mDM}5~m)Im( zTJ9(6sk#c9PaoiY?r`*JiS8`c`pY&ZXF~N%(&=AFNo3~zfU43$1QAN7bT?;Bvyo47 z$ZUm9WqCtLXHxEc8+I9Yo1k#EJAz0n9=bHMQ+7S)Vgw~v;*pn;F1f>~*%yZ^4M*=6 zE{p(JdX|)CYqlXy+V|Nd$-^!2<-!f#YDn8*E`|zpG~ZPZglYbl9R4KT-SDmiDrssiGR^@xED^V2lHS8LIHGG|C8+ZX`YD zyVZDdb)-qJ{D@Tjagtx}bp{3`H-qv5txSHm1g_&j2iv0Rh+vL|5}F9|{iT}^dr9$+ zzMv{oF7N6w4Ns()%u}A*Xb96H4uJ=tw4O&`2A*P?ilBFwcuk&1jB(NZ?F)LxC})%U zf{W5TST*Hr{plAPlQxaez9>c}mYH~$)>2MUx937U!P-G_GVt$H_OYf#1=LXh&C&f7 z5jP|_+XS-1W{8&JvBaOd%3p?qFbQm+viCIkMI7Q-f1=6o=;+2s8Mmd95LXK`Ee-*1 z5Vfu&{rvJUv!rSS?Y+oy&P#1AjOw?{cO&WMZVj}x*dcC(vaW94a_{1#*+IWNy`Oz3 zgE)^kh?sjZDhmIo7PHKyEDUWGRzI$$7>rY-4dqTIf;9kAI;*RH6B)P@IVK+P;dP%W zW2^kVbK$@}jf@idI#p3YGEfu)CW5BA^R+;F_pTe;2>hlfHr|F!FwWOF$QUM?EOqZA0yG2^ z`uis8?$g6b*Vhpz(EuBP_UqFz-$3dF^*L2CQ#4F6CosX%iHkyL8pO4D&NMOV*WtAP zMIL3+@p+u%YMUL5L8uX=%VU-ibSSmYEctEXn)0VS@pro#Dk0^0zfWnJc4D`aFKR3o zn2noUeXM!GH)?GDBjjC=>VL2~y#%r$~*^Yu+9f91uMF(h*%>aU5H8d6DWKbDuv=DqOclR?tYD5Eh zMh?-yz$?6wzjtrba#~T3h8eez<-x9M9CIcS0N4=^1p)Sy57hvWC749rC&5KDneYiB znE(XJ0*XvG97u2xbE9pYhyN?5qpDF7&A-4!yCXQ?RV1lJmOXeTRRHxUCCG6){KGoV#CnxXU#A}PH;T0ms)~io#NK6!tH#7}1?lxmy6`c{I5k=s3~)98;Uv76 zj3I$VQkF29gclR!Q19uEethH`2sGqieBHCa|>CQoPvAM7O`2|Uo=y3vhBgi6Q1j4~Ji>lw`a zv5StV8;&@D#}wHRcjMX-qU{LoD3H`6knGUN-A+r!nd3%cKi(zCPswM)$RQ0#RS*RG+3J>oD*? zco9uur|odhmHKnKAvjL$PV|3+iz#S?d8LUz6SWPq;^$A94$KgzacRa_6O>+Lsjd%; zUzl`pItZK2VR8?NiE3a1ByvOwy#W9d+lGreH!Z-i2_q*6*ft7rI7Y!yK$HnG2@OQi z{K*m?=p;HW!uak-1M4x1fk{heKK$?CkB;&P@cd;)ZYT-}&3gEdNBHA#=65IStm!{$ zQ4bGq^7hg6&x)2;x-lr)&;qa30r`%DZV<7!ZhR{I+kHA?kx2#AP|1~66!Hag!K_um z_0s@~CWYk^ax`C{CocZ-#vi$uqQhkQQgcs}i)VE4<+*D2P}i?}?$Y;-CGX>< zuiAq<9szteiYB#D4Jpwk-zc(4Y7roV=%Wf#0O)l5qaxsCClDZ%9&|B@)Fw0$tR%-) zwyh`PyHQ-ZF$^1liNvGG^90Xr%Q*REi)A-N4go3+K;&=~WoRVc$y!jKTBZyccHJoD zFI#julAo9>vqY%1XjG>=RcF^!=kHhF-APHcrfvifs>>cuI8o9bZ(<`5#m^i4HU5Tv zqWeWu5|Bok+|&hehW{d{@-vMXY1Q1^3V+$~XTTtRZW*;Wdo zBJs(ovxp4rU${u9Zo(nC{8AO~WxABqgNw5UBN1VL?PBVY@SfA7F^gCzC-P)J^K(eU zH+@7CHsFV&B2nK>W>?IG*GKnLnD#N}ioECfBUtkEJqldKGwu2amJ%nDT|`xB5f^i` z;!3nE`RwuO-q}H&B)sTYB@v3+%|&6Yc-zK!cn1Ge3hh$r$x?CRybaiRii_*+7uWq- zkAyp7aSn`%8P7=TRCL_WwU9k*&r)kK!#+pH(s?DNWYzSM7X>po+| zxVyM(4csH~MfRLK_iJj!S8Cq~pb7!9`;}?yuE21N=fPJBvh^6M^#qm2(LA!gn1rex zg%UjjUacQpPc2(a6x(EUM2wsjo2C)vI0{AdbzM9~xi{YhnBh5Ap{fz>c08gAg{ZJ{fV4iF80}u`*a+;&rIP_uT7)c%X+YP^FM2@kMX{dUKlzvx0Ms1I!?#A1O{qATP_pP6i;ydwNOvRF2g? zT22*tivh;`fs0q~wwo(mIJl3YG?s=SZ+p9NA*FBLH2I^h1w(&qgZ1 zM}*RGfXw?I*depklFNZqDO9b4aFQy8(UR3gC83$Da?~6psplw5_Lx;#SSaL+z@ivf zW{UrbC9<4ey-yLv&NEnio2-P8bq9t_{mU0kiK8w6Yag={!q;&0cH$^Q$Ef%-Lz?5E zQ1q}bBld~Ou$n_u{I0J9P-n0@T#QT>-vg-jDb_jwKIW1uNWcywWE6L!PJqC6KOWN| z2DeQ1g=u;aB9u*C>kKvwXH{@O)KtIt=pCaHZ&`?VvTj7>tdi3zkT3 zp_A&0rxogYFHDF)kd5>4*6N}LvPo}S!gY%3!lTLwh8xv}gu(m~dgE?W-|pYGu|u>- zTn<=+yvIx)PO9!Y+?Jl>f-S`RcUKk>*5yXH8#ZQ-A`|`Xx z@TFkiOVM91b5XNWcC#YOF9aE=Ww@syc5+a&W^anzKZFsR);4`7vuj#r^VZIJlUWce3LG>G< zMvc(4HK?&FEMeW+Y|bn8m!8I);yrr!pGqOR&>cs{jlwbG$f^KaDcYKl9JTnV#bm0b zG@~UW+){Sk5@KN#>;MH)JW$3`axL@M-s-kd?L|4x_sKT6AwWU;fSn2p)iST^)8P2CREXjCv zXov3ZmR^`DmToLig({?M3iWTwr2H9TFO5a!iQYc=g(7uhO9{_&O9Hzr$3XH8`9(mJ}3VNErSHB&c+4py%x*FXBe`KW%|;Wsr`_#+27 z#ja`Vx_Lxxcx;^(q8eM!pR~`DjJi%|*MdQQFe$g!GG8^=i@uC%_^@AVk7!bUFKc8R z|E|Ytx5L;>H!Q^=^Rv$QVFqJ;eZF#L*@ZjB_WRd=bGrPtDuk~@Czql#K7{10xzH%& zStxVKn3R7_=_o|$4>!H*FG*?hYKF>KYx+#cZD&QTPCrE1_48bN{f_&47szl8U65C3 zzeY_QVK=_y0G-fG)@)Ez;*C5W{6Nj{M)krqYHI+fDnpfZkH0zfkSW&zpO+7pK2aw6 z?8kR+RNSJG_Il6ZWAWv~v(pPSdA}}R%llMo^ASGqX?F7yi}8td5vrMP1AZ^NZ&Qhr z)zR+Kh4cQ}$c{er!Pty{=vVvq=M`mnf9vgNQuBK0^_$85VAfLQ#qKJla<&_dM!Gxj zsJwUk^4>lr_`-``1MBjDFLoRqptuMd@iUs#FWa+<>&VZbxvRGq#LYRh+@jxaIeoqF zUw+j6l@g>(un$R>xA?5=_8|ERYlKd!a%1k#6aP}Hh#pgv#bIJ1J8rHi@PhLlmHQtq z*ff1Ue(rzeeH~5J3v-oP^2`f|%e>mf@>ak+DQSDQEMeo^N~5Ex|3gx0O8HB)F6}pB z`gd^W)tSpaY#&b-%H~0H4srfJ<~V;DJv?TV5N=rcaZq2fbnOclkJ#m}r<_?XR8Um= zZ7LpJ>_buG(2)#>#pw-=Shu~RZu39d@W1x_QaH7ed90eZNIRv5A6{-BGt}Ecyryb{ ze0C=61k5+Lbkld9+NuT9%yl(y*JrbMJ=Nc*eLIz^7ig!)e415f75G|p3voPk!4j-7 zsNY%f-YUj(pHQPPcWBe;v;CaiI-_!~veWzUWT_o(mVSHpOMo?Y&t^dQcsa4H>+hy8B+Npt z$MC{;-Dy)*#hUHsouA*d!WW3CcZtcrA>P~>BivW$-ssyvM68Cn1S@RDmPufE>#b8( z6xp1&#xLmBG}n0*9wA<8jqW-nL=P84q}|)sQ2op--;2S9O@!3*yU8t~vv_;UxD;jZ z>=pymG)(tgW64T610%V*?s;x@mZ5WdoT z^vWe78p?Yjj^YLv-?RDfD>i+Scp)w);>|6=stys6e#<3%p1UA{D0M}fRkZ2~6(>8^ z1Rz3Nbz@#OLRuAK)hW&+Hd@QEItEiOO+<1;T#?6nW|`=#REG0hSC8l7YUN*fzm*bx zr>@IsY()R+vYFky>DB9g?(>(;-K3I5tYvp#oKUto6&nz z)MwRNr5TpV;Gsd0b-N|gV#T>-tKHIvqb~53qJpR3#dkaOoi8sP{%XgC&pLm>*^u8p z+vq%!d1&u6bSdCkLQ|Q4H=grL(8U72-^ZEOT05y*8HUfPw_|?1KfRt^tpSe^y|7ra zllO15;mDFp-gyA;lIO$lM;o5Yb?>mU$KR+$pz5DyeSK?iO42y^G;6SAOAC#|Aw$-%g6Vsw9g*G;l zwsq`4AV_V>DkZcn2u=22fjF=eF&*^;xw>f>q)u0Xy>T7~P1lrHU(Yo1k}7kcx*4R= zc}x{ElgB(CRz(^k1VB1J9Om(HgXBy`q~#O)2;1yR%S$tt5!bms%f8~QxAVMj?qu(1 zugmUbJma%lV$RUDs3m2umuPDEmO1@KwfJlDKSIt8*+7wCwY1f;f}<9&QxPcQdeI$DFL?|1h2`b`?Sl3FT3wJrtI ze!k3lt8GE?g^4Bq6YWNS-YwVa(kpx>S#8hOMBi;rt{$X4?0{6*#xqMeoNKu~dJic@ zoo?tXNs}9%>rz(3Jf%mpPseqg^2o;S8g}4Y#FkGh_{Q&R-FkkKzio@YwOLi^AFt{B zu{Tb>qvi7L`k1H&>LsM8n`Fqoa3OkTT^UY;MQununpN9VWvQu+2pP61^%D>qkRS0D z@-HS+bd{3XAA8{Yz8Ly_PkVQ;&Z5(~44x#QhTMz;^Q_ZugzRzKjm42M5j@F)@Z63| zCh5&1wxEKlr+fGH_=34WfG(atT{YCVv66$}X8u1Lb=K?lPNU6s4 zc~K>BDff~ScjCxgPJKYW>h>6a76O3yt5G_TN{!E6;WNn6>(w$R8Gh!kYFvwbCYufYcnxB%nGDdA5~8Bla5txdT%P#60xUTCR=0gHCbr9A~*r? z`kYxQPwsO{E^sC73E>JRhxr-i zt5{O=-4$QHNa!W`$vt(yCm7qdTumoi0Dvg>Bv?>%^vXBA3!dV`i;0k~{0V#r*chaE z@_d1-0SDOrT2VFcd)UM3u8#9Ppg7Pk=f`d@ zgaPs(u6`YE2}$z2R1AqvCY1_0BSq{OuQyUt%D!-o&Xxmm80SP-+2j)ib5%Plo zEJ!on69X@#A{hr z#%UV*TgB%OSR^c$LFMdUe#tAoCB&;$Dt6T^Q5?Y@hm-z!)D<@*N0Bkc3^d{J4Q6h= z2|Dr&0PaW{JlE|AxyM=Ve91b*!+1Tza-KGvkI^O1qsgX2bb*P!nHZYavmb%9c_b@) z{TP8>RM0+BRWiJ8t`$5CQSbuB4zX95>U`Qz&5*1zA#pYw($MiE#Ef?f3dJwe zzSjGbYP{djjl5bH?M7Ip+!%t5HKd^j}40th`j83=TfJ-P5nqFRN2#5$fi#TNfz?J|L zj%pdY7(9(w{{l7>x4$(M*c->8J9b#>-s-1Gnf$qSFNpZ^RPYls&??@vDc9_NoprXA zt52rGBHsJ}bPHr>#JX!mbxP0QOFhwc+xkj>f@ZqSE4(xP467R6`Fu#+Ef3o-?9Yzt zzx40%EZx}U&ka>#y~aJZ8>s#H$(dSIE7Vf4{>PKqi`g>v)s3>&5iS3p1?WM3=akV8~9=(g?xLCbRwcDNti-5 z;UdJTH)d9(y9#!NNt`t4JpOh7+T9G04$rcin_84#l-9z3%3T4X%HuEjO945OwPPVr z2)2c6U78w-mrcN&(bPX+ZPcX2OZvA&MGmxa_7lB*pkQ=;;ycm#NtK25CzZJ(9p4{w z@(hwWW}XUDJP%P#?&;^rQx%iPOKZxN&S1>*lqD>Ime6Pz1~2hRNfQEy1*!0}^*{Xq z%@6<*{d(t3E}H&?B4;VCsN#X_PP;`JMv;C+Po-F7b;RPOnVOoYkp6lPjtp1zb!#EM z4Am>Eut7-o>ooaDv=T%>>FRw2@t{nU6wnru`NR|-IHaQgsm7S@@tleHb6;^r>o%j| z0jt#ka2e7zL)z<914bhW97SfRi*2)vXozTAkr?HkY_&E1D;Q%SEY3F|+2GhJF)Yjz z8ZExwM|e46=qDl`8g1%S_rjQY#seT$eur+vw}eg%fJ(Ij*$_q$ycg?3%P_tN{v7&d ztdKZGp+rKcp**Iuw#7=CwfC_ftKQw#I1XD@!>~bK2aUE=H5s=177oyTMOLu9oT4X{ zQteaX51AR?A*I?*H3NkieZccEtoplr_Rn5N%1bT!s^WX%LPL+;MLL3pDYi@i16Di? zH*wITW2;eR5ey~w76DI75fw+bLVG*#qu?MwY&}v`z;H;(P`tF4D?{KczOipbOzl%# z`cJXZJe@Z!lO@v9wWUuVzpSE<$^&C`GkVccY0u*Q4GS^j@BN9@&xpy6qHod-ySl4hZt(+V%D+NYHVt)Vd7i%V)OnZx zO40IjQ`p!gtd%DnHO$y<|MIt9ES<~@>KE4BcLqXYhxFMrGSo~rlUNFj#k*!|%D9>5 zXFSJ^iR&|9n8_<@lLx9V0ZtQcXFA@)RE|3{0ykfp1e>Jgny@*W2$f?+oef2oU(Pj| zpx>G7KuzbUXA@OT6S1a5sn3^14vif-XJs!L)7Q-^P_ZlRXGzvDU4U~d^qF!FFoloL za=2xwz~5yu>~YQhTVOW#+y)t31!BKR+9uYGxKcmx-lUo_H7@YHC!T4Qx~2 zFQ%1cH?OjtTgEY8&7{gQHYevTDU&GSR%feQ0#_Te*z}nXjhpkPnLkVAWD~l2{nAw@ zXI5kSt5hJiYj>`?CcVmMR&a^Vx2P-dsJnV|?ds9k)y3m0x2P<9V7y-J7C%)*{fri- zM9c%Wd5_!|ifUlmK(}x70?0j!1S><}x*9B~s^E`bLY>d*%U{u6UZuiG44AQ#N%RcY0ASvHL=4!dP`0i$b)l zzEr~k67s;R7TI-537x{pNv+VJr99_H{qd|c2aAtBqxrr?W)`r5&=Vz3mzri-El!sz z<_pi6TJ})m#q+FTA(lOy195d%>JB;hHY8cPEvui<2lxSIk2jg5uUgXtLK|gTQH05P&DVTk?nbF+mSx>=$%z~yzO`rdZKQX ztlRdP5qfHE6|!&pLKHnswFY9bdr5_!y|hNuvztHUcy)8_SFqjU6vtA*+K+0xl{${q zskLuQcCV8-Jl_0T`wF+;xXD2})A_7mzh%U+ZTI@bA#Eq%^~rtvckCSdb+3z!+7N!Pv=T>D;k?ML6WpHtU0lo|1l6UiiAOXr;XR zu)OR;MfHAF)k#_TuhPUDq>|dX>j>_L&H*W;r~r%xx7l8pZ(9MCGqX+zkAC6 zhFWfK5%;%=+wX|)_y0Y${7)i}pZ>M*_-9P{54HUE?N8hBC+YS7d1pz2l@b4hmH&IN z@{QPkgq4T?3M;k#hpU&fxQM>CwjU?9}?v^14ZMzD;4(VHuaRc@`)ezLXeRH>h|oKbC9Jdq*} zz7ua;`n8&vTa6X-)laEVoJRoFo%?0N)!^ufl*e36Ar)eKY3jg}@dTA%|Lr*jBL zX*A;fN4~X<+X`LLs(obJqMhZ+`nOCbxaN@J)r*dz`h8nz@$G%ylcGUyl|AbF-|Qo6 zb9%E)M$qkxzBJaUZXGqxjA5OTXDZuq8;9v8f{Q!L<8HZJy7Dlg+OYw&1se0gd4h&x8wZSo_Z` zE(8a}~cP_4x-;-vt{n&(cO{yOjgMnmd_K?$l1;-0cH zn={EFH?kk)a9O4_QlGn<=@G?txkKT-DkgG{OBYaUC&aNen$Jbf?|h&iitqJ~yfj=a zMs%%86}I*Ex}mSdJQ6cFQO8Ne#dh^Pbw%tC86SW5P7NVz%L0z8PJytnbz)mn@)s;+3JA(Malfp&HELrYBBVkmF^}%Ko{g9R1>XN$Cl2jb}zV=M_C5iL(u8XRY zxdo^2xmtK*dZ2G+I}>qhprxWoyM;ubWD>kdd^Qf8O=PT#mR`6Z?0r z-1S;#Ue-VBy3Zg(H8{uWtPdR@z2C<9ve~^AOrChaOUE^0n=bzR9@3Tqn(Y34I_H*; zWxOh;(bZQ3-8WJtqg+-@u>rfNU_G}IAQJ3gBZTl@y4q}aSaABu)8Q;Pt)IAj)Iih3 z5Fc}f^vG%9COs;;9y-7o_8h_F_A?{*`S+A7`&qWq+tXeOgHtAa!wl6a0$StkQfo6b z4>KOKDn1Tu>-}ydVzfkyS-AQ8LOO@>;mmVov%#MLm%qD;H7 zZ{6|I*T%T$E8~26#Nt;smi-=CmFvc;Jd3AJUmWgGZStgd9Hg`A*cj39fVBY2i0; z0uv%df{O?HUhy+XB~|0zbgWge99G%mf0NsemSDHZF>> z5e?77X*u|~;u23$jFs{rm_TF1MT*FCJa}MKcq2X}pna2p2s#@kw?B&F58I%+8#K%x zKAmVeO>utU!}zNrC%SsI!McKG)6XF%PmIGP97*L$ed;vcn}5ocK;NCk_bCNwfwe5r zbe;f&7c)p(Y6;_K@QLCWE<)7^)HabNrBs(xGd7~2FflaPaCnfR9?)X{gF^GwTOLGz z(k#3oQVY?bxB2*eVMzH)^P@|L+}Fi4Zz-#*UKOVI$n*Q7XnRsE~(S;uAdQkHIZ-bZZhEsjLOGJ55l&k-h7+Bw)2pa zYgs>?Aw18Eiv<_zK0wZEBDU$=_tK(b6a}e5;V{4znoy<);kFb~W)22BhJn0+GVgF^ zYA1p>G9C+&#K3CM`tAP6M<}RJ5hMw9M{C!MA@EM-5eS6`SEIaxVqo-*piEV9SI2OX zAZnJehzk^vCDK;BL6L$2cRtDKE%F*?%=&%n&@HsU$t=*??r>J~QwtCB?3?2uYIv|3 z90>rhbpRmX=~JV3CE*ZU#I8CbkOt1Q7}@8IyoZHqs#0{IZh8;HbpXi46!;8duz(!N ztcv#H{_xPSb+Ou)mK8*Auv`$_!r9j6%q!hIHZVIjq7oUl7n?&s^r7SQT>WR&{SHcS zXK(M(G8lf~iY8ikQDT8Bk$^41A8d@o9SL+&M1YF`$40I;44e}01zArxVITttz-c@3 zGEFE47ukuH+3|I$NnRr1& zbOdArHZQn!t&MS(p<+xN0o@$IHf%EGbUHaExvdfQgn}}) zDEWeDQOy08w#7 zA%F$RS;DIuEsN6(({xv3RO07UN%;>Kk+-LvAbQaSfYu;&wUue$KyU186NiAN6V%@=Z) zqTs-7^57wXLwVX^X5h&;&aqCQT{j)nn76KuAQdjZbRxUh(p zxP-K|om%8?W0@?=k_Misf~$ovABT{XXt)ryH=QPdOs97GUzBJv+J|q~yorTcGC*JC zI>H~I@CWXblqg@LWQFF{IIRkMt;az%$d25{JyH(8bE5E%U$MHfJv$O9*2lA!47cmw%S zLk}hs(Sxd)NMaaCWCls z<_0~z1_&p-2F?p@guShDcIwP?5e!Hl^h*01xh(hQw{U#$iKPi4(R2`0Tt`j`uS#Gs zc7;YD!$>L4e^^mma|d1|1hf`1U;T#uq)!-6<5;p71=e%4r0z%fFxGx{;217&dk z{oRiFqFpCs7)J3*wj}*B9S1l||0{3}1D}oqjxGj};B)nUJ(deVCL{{QCpN|>I&Z=T z6&|1#)6GhFPzgQcY8~+60`rn|Lv=1&Gys~0-Bzq9du%FAUh!&~;v(?~93B+bjT1cu z+rGT0Is~gsN)xU4t3)GkNU64{*~&iA#lDj+#JX_*Mb-YDo@|;8d7n9(iWRc0c=emp z63L%UknXfEm;i`(uAO|7g-4IIK^9mIfde91t+L1({jZS6X5fJ1ML@%?cP&VaGq{H) zq3kiD&up+)q&A~BukXy`{*J$EOCuto5z-I?O=?7h1)IDRLiv+P_O2sH3C!S6Najq$ zpB-y71=Va*f^d;y81mB3AvL98ElR8oC1rgJazs+zY_|1Vpxooh{>kQcm|89c+KW-7 zf%zGX99;r&XaMjT=M~#XPSkTT?~fD3w~2kLaV5Hr`sSgYPbObx8825wbiPa@K~d$2 zLAvVe2{d7)DSx5pQ5fIt8|2$r+g;;~4oEx+ijtOrD@D~_Ax#XQMq+)ddz-$!x9>h0 zFIJl9$cojKvhtB0p=mL9*+&H92~o?M-&@G6xUJQqoDHJdSScf}B7s-W@&fY{O>Z=S zQ^qk909jEY7*wcW^_PpH+W&A-baJm?wK!X0If;v^=Vm9?Scw#Ic>D_&%|qP@g6mj% zws!YYw@;IEjgnPkA0-9EajAkX5bo3q6s|lrC9;w9t%+M(U`lai)y1e zPTVTNQg+&@3Dj|+4#erUrQRtq+pOk2AoC*Jp%ZA#sd@EBj0#U@dr9WBm3L)!#dupxL(%d8NpqlE-ai~ z6~v8)$EAx_0~Dh!;7>I1b#RKbY;Rs7n0E{-2D)wBBg_6I zHb+U<2T#xYJ`hklheVQL`FSPuP}*)K5bBJbs;07(Mq_?2g~Kt^J1^)thfLLnN`+&= zKFD`}(P+*(yaw$!P=|P|ifq9d+*w)d_@#xAMj3d5Sp&f(nClfNia+JcBZ{oY9>3UJ zx`=%%eZN))*bzgd?W|vdiXK*dWJ^47~d^yBHKC$^)W=fyUTKsd0CoBl;*`yoapE!+DF|Qlmkvqds?Vh(`Rx zp21sc(pyrv8!FZxegT3}^@y_HE6P)2G~TxOFhB2z^vI02Xnl#5S1FO(=96$AeOhB7 zpOv_>z8g72pHM@%j0($BEBzx$4<`B#{vk;PtB@widx_QWh6eYlQ50u?C81o*e5x*n55O;=-YOU_d5?WDLFRt(1}HZ12~HbSlk*4ITtt#Zt8_n6r$=YyCw6LDC8OhVE@O3D4eFGu#Hb+}f8|9))1laBBsFZ&~wilj5c z)8ERwr55h5ZlN5^9C>AtCSIw$6^MrQtm|PY6@R1W1<3O*nBGi5d*TBBgA=InXEX87 zkG(%zJy^|ojY^?%<{amrD0#NEU* z^je!j^d-ejgS#(2zgw}AiZ&cS<)mHOXkKnge=yzNe{^ntpWp0K!0c6yd9extImN;2 zkJpWB)m2KLI3uW!k{ix?pGQYLd9R(jbHU;4;kQ$&)JtmqOKUf&C2qCyM*d`fLp?$i zeD3u}m|A1I*IHVwU+WtY%TxB|$eM2H>U?&Eexn__+~oY5diTZq%S7srnW!;vUD^3x zX90Y>J--zwe@Ryg;9w}i-=So*nkdl9#x^#YbwS!=(U3Hh%=J_{*zeh#7h; z*L91%#^YG6!GKmgpho8LT=fIqPs87Wnyyc(RExn3jusYcoprKWg94|RJIHUA(~Rfx z5aWAqVo$,)m=2cpmOD|J=4RCL>FE4wT0zMJhQbt|7+`RvtA*hqeLgAwQ>yGM3} zLfbdjdOTK^Unb^0tnO+zsJDXLxUNQ+yZ>?b&6_8e-+Qu5p%1_KedyXVR5a?1qVW_X zyiK94Qr+x@s1@1anJ0@?p5+OMpEl|~;A;Pk``GasKO@Fy`r9%|=2Sp3N<4Y^`$y7H zvdDpIZsU&!qk}Z3<#ObAz$Sbgzj`(mE0p7(inMN(QbfzV#2ky_B&EmtOn2g&%X)=E zAV~_g8*%FFq@m=goa98o@e3Pa<5L4zR+AzwzmiYo_NP5!mAoBC@40Pkf12ojUzQ}M zqeaihPhtgMTz{J=Z!!R@qFb8tpEdgGBsg2o^vs=5wB3u{xBQ@0=UDClOLLWDDs$KGML!w7oBvb;8C$p%%GCq1h!wfA!RKw zKFG^K%hBa)Zp9J4dc4VU=Xe>YR6cx~Eq~A*_V&&FFErcSROe;CZS4=L2baf`-prXT zfbxzpn64iM_Df5KBW)kLye)N<&8-u7Cb!ZO+oZn-1-^K>fDRLzo0Rk#-2+bv?OXFHY>^OkGgL=7bhXywQCOV!)v75loy z_}9ryYqK1*(_RU?CBuAW)`vZ!6-F;Iw3IIlG-@WBI}d{=FQBlDl9PahYu zoUmDq9*@}yJbFkvii?9CP!ijznXb7Gh3eyHK0KC~OYmC$%$iCx4ybIhe|Jd%@A9@y z#bhbCacL9jmn5GoI~8=a=JNaOIOpnXmE8`yu@CW&pA8xA`JPbor1I3fpn2VY{_fqV zS+86_oF@p7^kV^Fx&$JrNxm13^)3xV6J%aGM zs!@et@9~)xAKJQV{3zv(xM)^FTkfhQ8e*L2Vpht!?W%L>yKzd4Ss6F4o1RgKNk)ZP zxv;aFf!%kL>=CmHsd6`?n<1w8J7$%N+iq9xd^as3Gq2L%bvI55F)QOUuQqUYH!b*X zR;6uTV_NQRUKe6s>tg=cX4~DO@4IFYe4J#5zEIXnB!>p$Mx zGYTwz)fG?I;5Ox9Fi?G&Kz6k;YHAC@m0H~QC9`z+nag$dAC_aCXi=(}^@W;nH_dV(D=hvL2zZGvR z?aM!FE%zIcw@4_@XO=M8S>+)$M@`PK)0PL#1}N71WK2cbWI+U;v4maa7iGzg_AP83 zwWE}&f6Oc(D7NM*4~e2fVk>}lY=V~5#aXxIXdX5U>3~QT6sskbc}EvPPKREwDH={S zPQ0O)kv4Zb!J@Qs6j7UB2zO*2Q z)fss?T~Rs!FE;!c$u9oI2s{o0Fsg3|Rj|>hi-ht`@k z`t~&g$wx_!0Tk&)QH=>}{X&mwc$mS zbrU3>-e0kt0s>;f%Ov)S;oI!iam_qvBV zh0lpZThhiY`pQv=Xr32&tfz}N`P8bL(pwy*s15HCKj?)DbVtQO*H>gg-yMbxg{?BY+{!$owhxmsU&ZV5lA$)<$Y)UxO@l1huJ^ zh{kE*H67^jcO3h#JN73y^cS9hxZ5TT712%#q7v4vz5l@4%GTj1Jlfg!hQp@fRo=Kw z)sZ2BPCdCr^6e^F)%veJkz<6RIDpHzerreVEJuZGPiZ3{%208fQwC52cit_9fCZmW zcHQWO09y`a&4_fm-jIJfW3eqDFfh4e26@+F?hI(s);5gMW**4uy zU-XzaE`)vRs;72qw6?fB@Valzs74W_r%hJ1wsmAx3%o5I`$$%`l9O4}T8bhu1%kjB zyL=>4{nz0z`VtfZ!^=V_5sZ4op|-7PgWF(?KN4>yEuG3cP`ncVeCx{dX@hT&Sg$s< zB;%ooB@OVp289m(iwENqX}rA$qlXE=6FT{Is{Mya*K6y^5MzbmguXA1dP9PkZ|9TZ z4zCP(%E?*R&VT_4pe;qD8_stv+Zqkvfb)*+P;-Tb#HU45gypIB&$Z7+9mXUG<6g#w zKU6!{YGZySNk{1LhI#_Vy*iL2Nm8;SjN{f=Y1Iv&N!dqcwngeW08yJ4)#a_nV1cMW zY5vc~)2^SDuZF#djMH;6dOkay`o^T9_UDn_qXVwBrk{{);fBR*hl^ z75WOO>3U6{p+Wn6DeT3+dD?7K_xhJ>QO3tEN~_q*DQN%r{?MzuU@We(O>Ou7qRevHW>F~ zDZgv!osk9K=Jia1xmj>{ zl@nK$TCKYKxqHG|I`6*hi`R)$Y7C;g)rng0+zS+L5pI zc>DQ@{+0QOwW1K@Gsi|G|!i7Z_ipT9n0FLUai6;>pjA zFZP;G9V>wMs-&(LmQqjjZf+{N)C{qBZFc8E`ur=jt7^F_9Ew+BxS}gSM2qVeMSui3 z8Rw@E^0q_f8jmRcKD|x#%v$R2k&2o86mbh$Po}M>D@Z0=da*)%tsCz2!0Vq|%_|%3 zgHz%ScE+PM)ZN#{&O6-n-p*2R7(b8Sv3Ige7JiwB)pzW%d07KR@l7XSod$U+I?AB1 z9WOqZi|@)0r=9v>XSW#<_Xg+g9%s)05wADS9sACAG(>PTE-mL>e3?c3uDdkpxZM3B z9N_KJ5bP58QaGs4rLM*$q(eA##-(P(B|KC3{vVerglj~AaHP0vg@S9esc?*~Yni+2 z13BTiWY^mzxvmM!!ii5@A5RjJUb;TscYU-YM4)ji@U5`mcOy&^3@!I82C?bkZrO!P z=bbmRJIvC~Hgad&3f{OC9=kpM<5ooDUVPELMBKgfx_g;{d%3N9g|~ZUxO-JcF8)6& zrT>X(|6jwj|EiRpVlYeg7JF7MO96LheQ-OTUI$*D`yMW*&d$G`ozL8yf0OSnu4nG< zzunx=T-*cVd_?N)K=_+Z;A1HX^(y+ zryZuJA7%WHf_5Z`rl5?eGJiEP5I{F_CO8>8OrT_Po^nWw7e}0mFl1M-P zmP-FBTHyZ|H!`LT`A!{pH=k9jP&g2~UZA9gPL za+OqFW7HydOT@TSiqS=)-u84~xwj{)wo0WtTUfbr-%%83< z>_!F;@!u6Sek;y&jLx8s-YMhO7a@psFO`VZ?FV;Oqh~;}63yDLtv=j*tzwCiXeUS^ zdjyuHrUY9TT9AFdkt-(Ew2IW?t<)dwbp`l`nz{8c;{&<@|AQGx_dhc z{Ood&%jaJC$;R5gZ{p0F7r(7a)~(AS?6d84#U7c8)vNRtx+Mx-2Veh=5bGmEa>QKW z5Zi2SweFuweD%hEU5r?yvi-IZJH%eGP}0=%XhRS45_r{;@LWRjt;$#Ntv4XVY@_$5 zGp)~!Z6s&iwU=1asBb=ZeD65ep4-Aak*TjT+uC0f19lKfYiQ`y)a!ZCub^MtNv?p} z>M8b$%JMUJ{}ihT7G%qiDTB@P|aKt_VPO5;Q|0yuyXHMSPA6zD%WQ$tn&iGfYOgO`y}{o z=iTlNn)1y;wy`ReuGcp`QNziMl`!@C0&N@p=<$oRpVVZQ#kl9)H`OSshp#6b+oZpM zv9)z2if3M;5rA3KW>IxsJjOt;1V)Kac8I&PwXk#q@|@!pczSgZ6O-;hac&)p@H7-A zOxihW1{zKzy-&5q*Dd7Wvow=`wOo3Cz^B0<6f0vf%@k2YK~10CyLNQqkzRV6Y8yQX z>zK14=xkrW;q^UxT5>a@29Uml2Nr#Ms`G|783wI(l@aasYJfY^+ zIt&^~l$6%*i_C{^y6E4O`T%tbU70rmsAOrLb9E3$a-8i3PWruq6x*D)ZHqwX7Y3M) zR~84`(r&81NqrnRAEV3j;)QPYO>UDlEq$g>HF*j?6(~0F$bw^Y)ZJ&{Z~UADZku;A zM%yu47>|EU)zmagr3;lH4qT9&YSY+2a z9=;T|I&VpgWLvYt_Dh}EeaWN$gJ>C~&0$R7oi46A&oKU5=9Tl+;pen;(#Aon4JyBW zN^pPfXd9OLq!Fz{sd-MVQIKH0){k;x)$@r zVyOy2D{ScHW&+G0m4Sg zNXx2@A;w|>rnfTH)_sGFWpN#j_kONXe_(q|&=}7N)JK|^U0NFC?`XbIy&3Ch7{~cS z#EaeXb}eOcNvT?4qQ(0m1NWwIF-!#YDMr^EPAes>0*^O|zLX@$p3qYiBP^*56J{-j zDNBNw5yfzO7Jn|0ur~i!j+T=Z^eAB>8Y;{Mx{-d#07W_;9~i2^#VT@a&{uYie4HGy zxaZBayHj0pFzd$T-ZXu_Z2&$gnV`ss3ul#asCu{4U+2waGt=@N3o=NxA_Z=q7Gx4*9{t8 ztV9t2mBUh@PwXJ5>?gdY6x$t~YRhH|*GM12ZbR0QkH3v-KKaCU2W9SLh>%xp=%$HP zP5FU)0JG+P`21jxAunaLS$F_}g7E}YhV|-4 zTh2Mr)zOFd<09C)A})N3;Fgaht6HcQ-7yt#^58mYP^5J+C?iYXoBu|qs`KAcAMW;} z`EdG7H=!bW2) zr3nBq01f$f{3~-h@puV>B=9aUws=+`Su&YTS*?u=W{84DViQ4z+MNWr@d;Q93s3Ko zcKQ~!93Zr-0>5)Y5r#GF#2`ygK+vo3Sy?<|W(rfQm(E1G!GwAdPlkybyqbtK{~i^c zuEkM-Dfr_2#n^dQM&t8mkPI%#-&C}I4EP(Z#Zw{#Q7uHuBB`8JK>)E%DRK!(AOcNS zfSl@JFLJb&7~Hka>;H}08)els`)|=&H!g(9gTK+*Wa2;3S`@tGpJ;8$2~2@4$2E}7 zi;R-7`5U&C!p!B|Vk18Buf<<)18LmAG(UgooADhBltTjWDLsnpmBTF-02QRXfqlQH=hKM9$&P|gXa^`rg*W$7M*=N@Wa8(B6YOs#>eM8gP6 z&|FlOLVHGDl+#hFWCF8fDG{c?bMu*H@rMs`Dm{o$EZTH9_K+)LHJfg?7#iA^&dhczCrC|Po z*+-1)^&D8Lce%)z0Izimx@#d<(24vix@{VXZ5}@wm{i?BK9WHga0Jxw;oZh>m5uyx zgHI0_2?X+&WioF`EtEZPLokg9uVXvNgS~_GRR=$Ap`>cc2Srq!%M;<;fWcsC#EE8{ zAX%ZIpp|sKFu)bt!C94^LlDmdtM-Vt!mX~D%}E5;PVhe8fcZE29?0~0^N^A z#p{%`B*_P1$Ov-fwG&>K($oYZThpRW2ps~B1{j4A2tp~6>uHhYQ-vDx>3-dZ5a3fH zlDxK!Oz9q*NYhB@e)t`r8!xLd$K*kUs)=xONyrT>Bo2pYmy{`D=%s&mwKU4Poa-OF z+(cE|S@x(G?cw zuJtgZnvRMrve&UqIJn^n*d%A5Q&Nt-0?D#Vy!eqjR#>6-gzB$gCSej>+XuHM+jH!% z(+7+N^^G0A9}8s|pI}x&pIuJvbpJ+GRj6ht+bTkmW8}P42Kxqh0Pxy)V3R$+bx7kFurS_MRPBx*qsDyttsLVkFYMzl7w1w)0*S(Dl)r{sL`UFj z$YLVpYFxFZI{;t8tFyr=oAS?LN(PhiTwo7ct%>5K+U{vRzHyFu(S)f*&u5(vvU*c- zO?X5c9)boSCPlESqRO$@j>yC4{ZE(ouF9%9AQZ@`8Gs#cMfqAkN1qdVt+Al-a6#wU z0#M!t@{#M(l&EV#+&#JSRNeu3bbkk;DhN;+^C(y(GCr0Xg+^4tih?<8o?LuLNri6$ zr#u0QN=y^D-Udf89#XkDk`o~5`?3_F%m?!zvcpM$MkiK(_}xG}ZTaBj85 zD>04UuJhU8SHak12gF^p0jne0ufSH9)E@NBp|C>l8b%a#a?lc0zf5#*F4sowi2#+) z-cZiI>90v+x4h&R7vC}1zGHP+W&N|z*_Orp`MS7s z5L7t(ae!5kfNV@TWBSCykR{4nhreU)DFsEqjq=lD z>Z8%k!-};8yGm-tV&UQh-4}aeITv3eJ=gI@QpJ#n5^6;h&-wgw9Ee{(@ikZG?F`l( zyy>o74g_A4F$R@O+zvrIWt6i;Mm-)ED1Ww@da)|r? zq;Zq5*TdE3z|Fp(=0nBVzp%DY@@O&qD5dU*wpsIVU$~VQRz@?M4XdJ@77{jSc{`lC&tZvbnWaPkdEh3Xbbo(Me%r!;XS_%#@pQ0{z`@V5sNxE`ar@c*-|x&P&EdV2NH?TQ`Hk5N(9AT z3!}S6>i(_!bN(D9!Vm}9y8UP8CPb49Vu*PJW{!URy#3gL{IS$CNK$Y&Q59hJJ7#|- z(V+VOVp<%Rge~Y!M1t?|JJmR~WLSJj++u@mx9{0T%-p&rq5mQPC}Xn3BiW(*El&G1 z$t)74!`6oLI|x>JpAI~QYDHqch~-+D5Myj2i{RFDi&Lt@;3EN5gL2D7_gmIo70zN+ zx42%}+J;P&)GT@~H(Cu<^sl_Ev1swWksQkPbyNINzpLA1v`|`weh!58rHMR~ScI_R zikMc`3w@@f1fvK2$ zb!gO;qdb&juLMk|$wlL-Tl=avR33@&)JOZ)pT=3=6ctflJXXBL)@!VoQK;i)ysWU6 zu9-|slpQx~O>8%a2&JB<2BwQ9na%u-2Zl8ZbPeTI^@VWh3asZAhS5<`c2&&jE6o$u zZs%GT=f?T&>iC&4b((b-{U8V@NqMEITFOrH83)a`C)$j@5p#VNz2)@C+(A_eMSI?H zBVabq-Gt_WVwrv%(ePCMT_qdE-35L|VJ1`Sf6YW!-slvgj`*#IJu}c?yB+GKtfiZ| z+kUG*UG`d)vsC;A@_HwMsrlx^6y0VhvvXIJP*q@YS8}4C&Silc6k#Og*m9U&o#Wq` z=m#CvwmDo_zIh9-P%j$#o%G(a&xdova$4Ihw+i!i$!CYIeATCVtgGm}&+}@`j&bJZ z&z-rqlM`EiGtA}*mLEDi8R#HaO5HMk$`;t=3448!>rB>PVYSYBGk16$cAbDG@5BVg ziD!crsUs0;S{|O>4uuIr4$PIvnrE4YC-TLWZ~TLqyNgp(hnR9cuT=F+lPje^YSrH6 z+owe~OcinwR-K-cFVJ$@}seyV2$yv@_Fnw2g zyr3ZxRPvI#j9+$K=sBfKV3d&jP(S4k=0WCA(S4J9d+Iu{ z&+$dJC|72faW*Erv^R#k9P_|96&mG)G%`PgvPUiaiu9G0C#X1Et=h4_)@u25B+PrE z`r*NNhgyvmLD&;)NxvDO){EKo>#X8=<0z|q=y^gB?Y|=WsVQ#@GGfQAX4&>qiy#rU zbN`;!QherD_L}A*NhMW%NT2uyP7ac%2&&kTth7?r>{zeYr09p^l&0j0@~31y%0gbx}T7GX~3* z&WE+X(JIs;ScIz3u<)!f6?~Qyr$3bqOqh2RHjQ$#_XwKFgG3aS7)Dj3=TX;R)Ro>f zn!dWgMM_guy!WZH)H4w(BU$`%miLK*FC$<6-tYwsUMc^$fnOq9l`q>@J455F2yw=* zC*gAIVscubua>epc$K%ulkC0@}*S|XbjA-bOCO$Y0NtH z^i4U*kv0?P#nc>P}v`x;$&uO}KpM}!=`>AQO>NltgHWZXMf16jw7M~_qQy=VIIB5)iu zAr;eY{rVlnktw&ERK~Nu>PwGnYrb7rbmBR*r?OmD;Q73kb3`rGL+p-d8E+|M8+W1k z9u$Fp*^=$Ht!cyiWhSvf3N&+qmsV1EkyhbfE*9pd=VCdZmnl=m9Y)>`b^b-_j(@d& z*uH*<<%=TbyJeaW-Oa~(7Ha;;$Xi(CEjy28!V%gHY`;CYKdohhd;LdYcP{j>za?rcKKcFo4xY+-9V`$?BA(gcqHj=Y!(9T0F8sm8Xsomzb5tH8)(1p7wkQy$^s?j@+kjKKVck$ZoQK@OeP_rbv`IOu6^h_kk&ko|?Ds z?i${|11#D&{_+;L+I!ux@{#ZdACknUH zm8t#Y?$W_g;^0bYg9K!#VUOnK1PzIku~KFj5s8lmX#s}jNC}RtCR{Y7Bw#0vr@}+_ z5>;i(GBEH|QU6{FlR;Zp3oNsZfBO2VPF^srjKANgiw` zDo53%u4awYBnxpKK(pwngFk%)Ax6erLrYZSWAA9B7T7KX(C2_@Lht}CN{LZX9r8$( zmnDo&weuT|9E`k@6QwvDBMVcPkso;!2f=uZYIu?lHo(PtSTZF>?nKqTRTVd&j^ltC zHYq(2jnjmwlk6ck4D@O>}rTGYEXe`wc{4EtK7pO*o0q*j`EbtIY!YBoHy2~{x`;^g|75?B9aRn=F?HW}m zIxaIl*2tx$i3O7{jzjU$a#{fSZ#C3ucqTnelmWCE6ETti2sI4I49d!bwK)<={c2NB zOmvN{kqukA4oZp^IJ|=*@a8Zk!yky`?Eo;~NK6zUDMyKdX-VQianVho!=RH%PmXva zYN)QL99Z(EHCl((-vEGE> z)VsDukUoDWh#PEZd-+CQ?Le+=TwL9?7FNtBUF&dQX@%enG zNrM0sT(cX$dOmXK8Z}S1GR9?4N-l3??Saac-gX}hu8IHTjvoLF!DuWz^!gP zV|qN*#54lX61D;4s&4w};a?v@DUN2L=4NS!v(54oPF};{rDtCq7prk#H{P+M*<`H| zJ%RdHG>mND)MoE^4xTJMr+Gc7%cS6Kg~y1>-Ff(&B$qVD7Y2##n>E#&x5drSKa2)( zY5Y)FARmO3PG(ca9sWb+)u%5or)FwmwDsRiP3O$`%QK>m48M998CK0e0&ii$mL3mD z6_B~OIauqx9{FRr({Jv>2h&`CX~%%)YuA%$pAK)E?!kbWnP3h1&mF)@d`=m4=qLaN z!GFZ>em--t}0I!#SAv&+gMJ^(=xPT}n7QFSV zH`Lbsp+>}8OBNiXPwQW|ls2aG!F)U|NfPbmV@Z}W^1usyL(J#Nuj%Gj%z;}Of4TSq zptKy|Dduvx84LYQ*Yw*yvftC@?=x>|&bO7F8UA0J2=j7)LGA1zW&i?v_75+dd4< z)-G9_Nnc2qVH|m1rfut~XJH-{{t$^gj#*UKHY7klFI;fLh5$odBsV}d{8z(di7JPix1+s}I#5;2(?Aiy9l^!Cby6``PaWI8T`j*=F1 zcDTMX*Jdgjme|Zi-vaBasY{Rw*O5(ocfa3>=6G3fWL2MW($cmABxvvLJjQkIt;!#> zyE&8R{^as{+JS#NIomQ>m@hj?1HQ-GZ$n)4Z0MU%iSEba#y(>#QM-fz+o&&Naw6BT z8jAjfJDVJ|t`}TM%(klGFL$dVg$RzWNdfPd`&=LOt3Q$%xgR@8NLP)y?&iGxlz4YC z-g(QJ2CiIBpQ5qH1!dvZ+pS#K(M*0J9Aa)*y_0XF$XT~>fV_40iBYD;Xe^JaJfm`% z^FF=benio}uYyB$;eOR0x2jR{;2z1^hKzXYe z-1&2Shg8@m_3T53$JGzaIPi^=X(3!huN&kJj_T13=>3z(23L3%j!=hV?88w@s9EEp z<&sX$-Bi2`$5X;S@*L7MGHueyeH6C7?av{1=JXLx4OP$>Tg&(eDjTs^1Q25%-&);t zkk;jVaMFxkbwmO(`pDvopLCoPpEFuHf{jxhKXpYx1kL2MxM)$8zC}YZOkN!zw2S!L zo)1eSJe@Nn$kM0FR6STvxn}iGvX6Rm`+Z#)0F`9FfWsK$cDb`#eoFVco9cYr7=RbQ z{2J%U53DZUcT>HuP!H1|V(`6j=QLB=cbFajfZk6>Q(>y?gK9>qeq|5zz07pl9mhPG zPswdi*cm@(oRi0{m-AUo$XyE-CCkRMuHL)Ww-s&Pp0ys_y)B`LrTx;#9$^1L!QsZ2 zdffo0=L*huzSM>UxIVt?l=sEHF~CDJ!1MVRr?&y#_X6&azPQrf^QrveC~^;Xr`-i^tCMSUhoZtkf&dZ=MzF-eJwt?cb`@PPy6k$Rfo1f;G=oOO{+jN zRqyEgfpKr$q;M9W;@)=WU;mcyJn-S$z~m2sk4S+8+MpE9pj3&Vv>QR`H-j>62W8#~ z%DNwveWwxspFaFQefWRhhu;ei?q%cXq^IuVW@!`@nqX#`XJ($GJGVtcyU5Kk#mck9 z$TfHQ@}Y?2fXcNICDm>N1F{eAb@zB_Wj$+%Io8oRHPHX9uTN4@-!Z;?&Y!J<@MFgZPUwlHzee$9+QNOY?NhyDW%>T~C|7FE9PSXC@N_=XX zG(JX}o+G^`_m&q(E6)c>ga17%{!efD&Bj~O7WsB~cu3mVARTOzw)RPf|G|nMe)@An z`hGw<{;#e0+36|i^v|y|(wF~Y#ea~YIO*4~U%&ra@&6BVak3AO`A;AIf9S&{{$p(U z{wMf|6SqgL2`w;nk$p{u;F?PwPKyg z@T*H_4TE54nyz5uDf?V2>4^|^!Qgw}DZx$-YWJ=+!@h-@Q@QDdJ_KDTlArsqC}GS; z-0?uH=5TI^uMslz=^hJbMw_87%iZP*{@a%#sioe}UY_7}sUzf({%o98_EZg0Eh<^t z?~NCaD%Pz$ZMoLGI(lsNNi6HzIta-}Y#LhhzfKBml<>9Rzx%SguSJ7eXbArdBxY^Bm>Aj|fzb%3}X=UOF8c2^SK5(-mY8-fMC+ zFzD5M?BRSoc+hw+8AMz2UPP~#ma{-sqAN)W$tlt09f=Sgwv~In5mEHhaK-9L?^m4z z8a+w>#Pvu7aTObR?n)Oy^&^$8XWbq=EUaR{erjFe2eA@ANSj5x7?=;aUW$^u2ldZA z9yja!tbY^Q(5ei#rs^r!2C;M_IHoREHd|Mf&`MPeoN9DE+3N=Ipi_hSxR$|UHSv4t z(x%^Cxm5mqeB{?uIzSuXEaQ?vV+Z*-B2GHlrTR_L7+s*si8Np(#&|t)yD6IR#XdV- zh(7wZQRx8PcNY+I6FSVMEMmsUT)}{1CMpc2j7T0IUC&sL78JPu_|`Ht$v3#fjW3z3)eODga6)Ld+($o0dV$xnK`Z z9`>~Nkz5c=@=LmmBL%4jgX4Wyx@DfcjZA*$Vku)5HePP7zktHtpfM3xVRzPmOxhrmpjXJc_g-yQP00GLQB=hAxZ;gZhH9pc`e!D_mHw9zsD`3w znrkH|!CaWsm{#mo$jDL|m4;)*O(<{N0DIs!?kro)EFLcxln-=DPMhgcLYo$GFsQ-Q z-LZT_h3{4^qRUFE?A%97W1hXy2dsF*$nnz+7S8?a7D^3{RSa<|4+Hf}RhlTJ-h*kM zDO{-fQCpB&vad23OqcS*qXyvdbmZ$rH5JO#ZAX^pHvB-fO)7J3=2;2;nFW=Mw)@G; zM!a#HLq;kI9X>cxnqRL!c4?n1WH zeB~ZFC*s7Dx3+iDQQw#KR(a&d1Wa3d)l%re!JBNb{+DN5Jp?FBmpJmIq~m^s`iQ#X z2zQdVKu=bf7A~gth2Zt*+9#}!aeVEGJ1<(E!nYiB!kE`~XQX=99k8D4x$_S|&!LL5 zWjWp-5jR{L2Gb8YsiT`(TlFi{!hgow-Oe5OsgCfn*sM`IK}udZYl#90;qtEg^HaNL zUXqCw-IMuZuQ2j$j7Hgmo#us>P2gAWfddx<2{r{y1huO}t+L<+;a7X*>(Iyoi7u|F zjr20}OCm4h$}tPpw{h=D4IIUnD-~F&X>v|2!G$$ZA_un<>n!Xk!~I^$N16%;=y3f~ zh(TG;&VDtOzw=Cq!PBM53FW~+*(v+6+~4?;)%)h>k77Rlf|cyaM_F?79;FY^2&*+} zCyaH+#XQlQobh{^n1Pe}R7GX9|IqQQ2NYDsX^91g&tyJakbXyV$F7BT6yJY*v=&lr z7R7qX-I=T5Yd>R6@BR7e01tFj93O$SZnI}9(YhyMX?XlLdFJK1cie?}$LibDDoj=5 zUuV3P1)|ufvzUESizQw-_|BIw?U`QbWndbOxYGiGl@ zHqWN)A{@(QZi9E9O(p%87&RkMTj$Ud8i6#!f#@9YgAAEKj3n{Aj-(&Cv7L^+p=c43MwNJmPK2qXP8xYa? z^O}qD2F9QI{G@Gx!jDA0rh4?YK+C3r#y0QAFG+X8=zMqSSn6DdnTxQ|yd1>{9rPf> zcvHM-_GdksJ8^T1HCDHOU1GX}$3um&5p$|oNM^RW)(Z~0AzDWkGNRkOKpQk+{N@wz z7*;j?=Ifi+_HAP35p5#Wql_l(lpA*iN#?+k?06Pew-&6vx`D+?iHoA}kJc9`J)FEa z4?r+z(nVp@6s~*1cK+@${AEp$iO26y4`4$K1S~`XSHjf$T3VGu&GrjFd3O+{~~k0e~|gAS$L)Cjj^ck!6t<32}Jt@ns@>) zBO(flU>FQk7YD1Alxlks0kuf7GtCpV+xa$xD@~Zk@>t*^m6yO_?@mex;07LOPHfJNTZ^ccOFQ- z^QAI$7E=j_a|do!#y?X*5l+Hj_^9*mgagUS98Fc|jJ$Ue=1+{Lv_evL>(bYs zHX++w6T7MscRCRL-xBj?l}`QWILA@l%(9_?6E~$D0`4TyCR002t`^`RnnuFG)`N5@e~ywqI;m_ZZ7r3ukHtF#$K z?!!XWxu8j0NfpuoR1pSG)bISQT}wi0W*_W9ss7fkNjMD7{$U5RACpfCTX)I@3oO8s z%IlUYSS^AJOo|IYCTOUNus$L(WQdvj!Y@Zj4ESCwK{a$;(%W#OxQYUVP-*{y<|x4u zb2?k08>x~2z0i$vK#+h=IUm8_g@su)L1VGWs$Ix}S*R8lG?y#s%lvI{Z6EUZ=V+@1gdQJB0}RrRHcV4>x3>r10qi+_AgZ2~iWUkAGXlSNihZ<09A#QKw-5uw=!^xX!jI)=ZGP=}NNmIy}6au5K5l z=!TUeIY_p|A}ZHmsziVJt7#g>;^sl9cuURuJ;;az{KV*&Req&gz}9v0b$MSRSuFs!KzYT^w#2@B++?!abJ z=w!a70s^t+WMuB1P)JFjDl|p7#n;m?JRY4umJ`DGK2?0RhzDJ+G&QQs4y-H)5Z*&L zE{!{KM~ObzLbesbO^P78cvu$|bz3efuck^xO$hBI*|-j7;QHIb7Qnzm1dJ2eaA(5e zdSCcKy^X(rG*T!w!MJsw+e;PCQk5^(GzYoanTp@(%KH-!P@w8LRSJ+?3F@Ttz_WeH zavZsDRn&*crPa0jHW{J0l2o5RWtJ@in*x6Om2`Y}+4^-;iNq?JRJh7mGQUlvL z3%xI4OeIru$rRqm204*J2BFN4dks223t<%SiJY)XU-EN)46>`et}DtJ*$V?QKTfnk zd>U{Gk3YE6J%$1P#4b-Oy1{7CQ6BI5b+}^_M28Fd5Pv_5q!3-LjSFAZ0{bBFk}y0r zhg`^3#&=1zV;StiVWn2zQ~8%_`*m@UH;MN_NXs9Bbh%R~erC&o064A*^s6nhcvV9d zZJ+D>L~nq*1A_=Y0gAr$T-QQ%;0uox;7TF@5>Hj9i}KS3RNcwoyaI_Ioaq^KCxi3# z2L4b$a2n~PFob;9Gp$QU0f#^R4%}F(gzOqk$O_d12)kJb`3h%36QWzvbt{t&nkRbZ zhcvH4WZ=pFkSOpch*95RR>P5f*WrS!VcoUin;avM%Oess*tfjYjd(a(GJ~2UgN2+S zF%e<3V&nk9kywI}?_>3z0jvE1Fde*)L>A|gR3EB+-InWu_M9Sn`u6BQ^vYBqW?Ct$#vlh zkR@yi=dF9JCx;&oKlq_JV1-1 zN+lMo2vNuUiYn9_0#U$Osrf+Yp#`?K1-AYL3;qCf{htYffexQe>dh4uICGqh&bouXm@(`WMqrRc3 zsSGN8KJc@9)(X#27v^|^lOC!1wGj~sTu^NS#DNH_YvR8`DMg-O@vQ{ec=DGHpJ||K zBq59dMGVeR&7vlB_167|$cSr8F=0#b*QAd5Bhhh_mBN{}Lw4%@8WU>Ql)opD&q|NB3dfy=X)nc@q&1N*wnNyoHl^nRdYk86^q2fQG3X zOH$uk&ar{1`@OAwoeFM#czo{dC!3&W4m}WI|KO?Mcm7THYY{4Fw~GQ9M$X`4WBXZ- z>#>K6)Y{|!7kl>=)a3gv{Qe0f5E4r0NRi%)peP*@dhfk=k=~26Nbe#=P(bNLP!I&^ zgx;k}?@gpAO+^9o=J#K-_Pf?QYwf*f_R*eMC!8?DNr2?J@6YwU0O74qBcD~=3c#Qq zJnuDrPe4G3`0Pz7X9gk27I-R+c&rP2`&!e$KYyNtD7j{Ba$OsSYYwECxlY3pPQXgu z;D;EZp8cGyJ;OIzwc$+Ue+tl%fZShYvHQ5jHj-%8#nqy7ZFF}>S7_HzyRb;Ylfrro zVz}9clx6NS;jK{$B$Oq5EX7u4y#bImDA=Om# z>*D*30>s!sg0lWVp5&;Ib6JmlgO)+c3Hs7@+%w9nt>sigX&z2_b%e4U)p5y^CoIx_Z&^L2UKaeT_5nZuM2MPp+vgGt-@#8SNKf*%-3fh?3O=@OA9t2Q z?BF4Vz@`KMuls)H`ST+KPsSQKRZ8jc(!$-3meuJ5YPJyLbcpK-#FmA?R`}B1mcZo% zdh}e9eBnq2U-kWSBKC9;Jq8rX0!63eY2|>Pu(*k?4yN7l!5=lh*THGrJzmsPT zb&rpp>>Tp8Z4g;c2CD$0OSLyT*bT5b%V^i6`BciUG!i~~O89eO{H%W@IvQUbT7iJu z{(3}$xnYTryJweDMZDR1`H*e^p*5va50UD zRvHvb7r`2gW?cgv|-+$ zrWY^~FpBZjWRb?xtu$%zT-}8mdTl2-ju%^5v>Y!t`yJlhySneLXu}Ze;l4jPFKFcD zT!Vh(TS`L7<58(==fH_|rxetwXEf{WCo_`JI$WvpVK*BZZle!}Wq&{llifdiICOVDM`53js!I1Y|^iG%dwZ~MKSZ1eu<@vs@_Ghw-oQ5 z_GReG7sYR=!{1imD^Lo`-EP5isc zBiruSF3#BQJ9123RLZn>16p>A7($5d)q`on?iTY^Wu1)}*RPx*X99Ps)n3u_ku=^{ z9y{(|HRLHGxb+uRl+EBes=b55wG5a(6dNy69 zjsq#}NMfUwlU9zW@6Fs+MThTvobk!A5{KR6WeOR)-({v%9bo+WgvuCIB%4)6c1xcw zYjQzVK8wuIxd71@SH0AGgfZ4zg(4Xs<+`lP@P@P_s2HQniyN>H*|oUH5Fovi!L zEYHkWyfwOG)%~Ili~~cDX4lHiSH-&W7#JS3Y+X~qiX9mUHf*)O{^2yUiWrgTElQ?Q zwvP&eNy;S&5?~K#%&wt{<~g?NAOcp`rQt4(4VO)ecgz7rmi`WbS02sV&)bR%SPf{L z6Emz#zC?!1UVSe;X7h55TwVG0t%IFiTEd3Mvv+>RkbFwXwbzI>mR7!Vx59R)J?1H$ zw?&l$W!D^Qb3Vtb(11CMpw;)Cr%O~4e<^}gzdIF3Uw?mvUUc$qr<}E_StP5G;aRC7 z*zjTSA{HTd)bfDHPd3V7rpQ8@yazH;#+|tGa!EVr!~CciHcb0)fG_y!kGV9eINKt# z_xECIqsUJY#>4QTB|1qv%cEksjO4izYkP{^$#MdbeFgiN8N}577Da@(g_~-8@w3Ve zG5fsHnSpq$EFw-f##GP7FsxWEzVO837k*|gay!|oc``z)mwD~yj3hRE0D0a0azML0 z&%1j_kBbL{AKg%b{-I9yvAK`A@FCs@wOWX1tCA2K9!e%vH`#*9j%dDue7=P>(2LTb z$1#^tgg)&~lUo7ZDn+GwY-!}u}`7+ z7DW9pDS_H6hWlP@F`0-dipr++F5L{g>oap#nF;kk6Q$@k`XnK8) zy5<_INqKhwtS;<*s`;0whF?f?`@5uAvP{Z;_G~NTP~U@R_Iez2wNS`@>qEBHN&y0y zV2I%2?3g2gVWE{z?sfV+%i3^5mi+tD)tZp%drfL4L(3FCIE`6!q^jV%Vf00xJl=(A zGSmj1cd6_rePjEbqOF~~lps4Q+`i}eJcEmt$5M72sb~cr$*vZEy{-?SKWsNOC5swfp7**$dx60m%!I=KRgQmEEBaxuF z*BaLw?!4aB8t%II6pq@|xUD!nfoxo~d^m~li0w{AHU-snA;n*{CAYV32C}?!_ujn~ zaWKJ)yNOuY-}B|!=yuI+{Cv147BecqAK9_As`lni zx}wansy<7!*u@kdyzEh{|7o(pbvLAAe8a2mOEIW*2yJM4KeL-pU%BCwL%D}AQ-i2IA1~)lDJfnT+no}Dqv zpJ6(omOX+m5_+9@!2gX8muu|`jrcKt8$u!YFCQLI7jJdsz%AAHqwY~n#cJcFap*E< zPvFNvt8ac4p{vJ24Q*d;j(6um*Khs?VgA{PS0TDW6dBA`#B`ecFl?I%8$6_9eU@1f zwksGJGWO8=Jnu``7a45GWW4o733vEct;ol-71lqhABG=VVIMCHTK{aQ2tW3S3|;wR z{j2Ru`1f!u7B^vSbJ@!sahe(#w!>}nd-P$%c>y+TU&ZFnOhv?xw~^sT4{ffNzsNo( zSq~qHWWL_!j{IE^$#-5Mx417S<2P&b_|!r6?|0_wxzUKo>n}D~(nx@#RUvYUlKl+> z634>vr7>j>e>dA?Q)P(_0jt*vv;YEx*0e=GAZ_u z3COeO<4&DlbMJ_7x%Uhu%bza_9oq}=^-1#+%j=!j-C2f!>~8 zbH&$Dipq-8qM9gFSdB)0UuU(V->BmEGexa-DYXy0D#VKNaHT$m{+C<0=%}EfWxFhK zAH8CYSy;aoSV>K?@AH(B#Y!4$AMI^DrOwIOv`Z4iZoaUQrJ2Zqow|e$rL775E3bhieXDBlCwK zJd&VXd<&j|AWPM%1TY~T0I=ZB6T1T4Q?UFHLLPKxezaQiK#h2x>VkOkj>^j{E|W1b zgGyCE7%e#&E$xjvNo*y^RVfltc$SqXAwE*%2NXD}zGX)ju>-0Lq^|x@i%R^;9q}?t z3gpf+NuZVRawwrt6@a1}wzJ;%$tJXuhAa+e8&ViOQ;x?(f@iR;DZE6zK z7R0Nl;`Ci`(j8s3lb6B>vlzmUqLKtps-CUGG zq`8f)eC;e_QEpF3dRv(AMtrLJpVsyOB@;|;S& z2NTqdfY7>MhoYCRNv$uFHZ@@~EMnF}(HoXyk|(3Zx|*t(e=+y;7-=K`@&5E0jII&Q z*g4U}=ZQV!f#9#nh43T33^2m)LIz<#c-gO(+F8G&^K}wG$}+tR zEQ!|~{ZtgPCyibh8w3qSe;dND?!$kxFw{g9r&gy9VDRs20pMJ3k?&>GV@IUC?_hv%! za!3UNK%k?ElhGhu6T?ji)&Oa2Fl3rKzF-)lMF5z%t!k-wEQHsn*tr;LtHHvT#Xk0F zZe_-RRnannFjZhuz-o+LFe#ln4xKulB>pKr0D7k_8eiPdj%W1oO-8A>Hn>@P5Bym^ zc6jKGb}KP#sdVn6!I)d>(4ar{uA}x<``Ei<*wTlg{Ns%DzK)W*SpCUp!aDV#W6-Plvl>n&0#$w&<7%i0^gYYm9f}mSc(^|8ks=>>JlxVllx?!JnyJsgm>Y^aG zovh9SRxboI^j&lpK3L!{3|5Sds0pKQc>tpQHVj7DjYea^MxXeo(M$t+rNPD}qbnup zU_9HgL!PlN$WvA=3ZhOO-t6%_MRk%j+mrM9_3VUtj`chln|GQvlHzFQ^3SQ1I^R{T zWK7Z6Zz)Fjwo~V2`aogy){Xt(s+7TH65jqqn_^Px@piISw!W$f;e%PcG}sJvGPiTi zk-e&2!b;uU5}__TVZ%r;qvujv=zR*&M0Lq@nz= zW(<0a6k%s%}U;t^G7U#NuQdG4>*) zWtm`O>hQC{F49a}&5{2b#XShxs31w6#_YHOB0=4X&tl$tY)@J4{OV?;uuY$UU<7M+ z^U&iJ6fV>%CTmxQ*eX`AW%)aYyU_bg(rPw0;@G5ZJ1``qHrqI6`Fu_G{^$8dO+bG) zHZ^5_u3+zNK}=4c1-K6X%h6<^;jXFEUQ&W41Th0LMVm2wd3*dB1(7d5c~s2-u#Z1g z_?CqIpriIJ!$}BDScor~i(fC~)*w3t{MaQ;8(0o&I~+?(r%8HZOhFV*8(ehILOPJe zMO}xRt=J>4(r(2=eDUUxbFNW7a8!wS|0z_2*{yWVIcC;Y*}2IWW&vF*y$AFv@7dk% z8sf_KDt+8z#rV3K6{U1G)0TcNtweNBDm!EMkNZZo zJ>Fd^h40Dgd_6XKF*>P4@yjnK&+O&zP|wTFcb$795zl51)?|W+M!!M3cbg7<+dM{M zzb$-%W$r3vjwf?@x))Zuy({Z_ob^y)?AzC|@*mbpe>_J7G?sHC`mX1`Gi`srBK~&1 z=nC8s2fZ#@_f*1@J5kf{4!Lr7^gpq1KRGjVG%NM)h&}0?m(jV`B={-cj@pU=Th@7uo~Kxuer@62D3o(11K z@fkh+%N3MVKS23-~yofe`u!_V}0|_`)TaHvqnuWOjoq#&2AG!EH zg0CdN`2ps&0T#8AroSG%bqKKj{=>R<-qNOP_VB{?PM|{&gZ;eJk#ryqhyT(Dd>C1< znii-Vr0jY}(XH#J39+j2lRyuzPFXmb;PR)MKkN$PV$Bug?zPiMEJ zg3q@h7FMlzxq&J1vX#I{)c0xd$SiI!T=U=m=k9VY!C^(VmiI7rmnJ6&~2+996^3U3guKBuEd()p? z3v{xCIEEjw7Qnk&*$UOx?`ww*Ub2l|S7)K2&CGHwudlvUhqkTDwohCgEr)h? z$#!9{4&Y(kuVs7gT<=ST^+n3|+k|~oksKrp8+v-({W@$!ENryvx^E(E{9)Lq@7IHJ zl9TIUQ_SHLcfx1L!b>#5zqp0Xk;%?S-mE8wFV1_~72YhZ%dAY?sIM%CuXS~l`u$n2 zZ7<=G*ft4JW{%jkiC}cwo{p&3pWhoByxfd}L%~V0g&C(RrMk$Lab1lFqM6%gjrNO$Z5XOFr0^ zkvWi-`X(xRabNUWRPSjw^1?&DCt#M)Ql_& zXYRLU>bmXg@zvLB&%^hthxd-J-=Ux1 zu7B{Qzu#|fFI@BeKepN_Iw<}xaQ~lL?eFf$x61rKYWshq_L`qm{|{#$@h@J#5gHZx z*Xa7gir=|UulKwx&)^VyH+uMTe>g&Sx_x9p$C`V^!XP1|kv4exy&okJ?IqdQh z_VW^UYVyCq^eg{_*H`{Sczt*0A54!6uOA-nV0U)02Zz|Buh>28`M)szpJVLNKbZa) zd$xl;z4!;x|2wAt@eiiQIr=}?zc@*M{r@XQk8|@+|HsY$e{=ITBLAnGr#2`~BzT)! zoWK|noXGs&bk%pBNy&Pvr3lbp0Kk9e=5tMDCySF9DS8niJ(UuOmsC~32oX=1=vc50 z8*&>zl1J zHGI%zx1)YU)?+^Xs+W&bl9hgAL6}l-x9gYc+Q;VP1p#qOZlOBUZw%|S$Vao@6R(C4 zS7t9sR-pRm9L7+b2aj)8^+;A{CRaK0Q+)&lGf;hOkiX(DYcWOLsLWo zT&tPt)ra{6-s~UPvKrL{#g4=ToN}B!I(drd272> zWPqMMwzfBGDGGO+^ZIK|%U-n3jEs^5m!zm?p zCVRPg^O#=EDQ{Y3ttt9ot;Pzhw-I;ChkAllmz4h);uhmF-m(IUZe&@Y3s1M4Ou8Rkib&=)U zFQL`Ap6jcA^!Q-x=?REj$xmD`(cApmInllA54^iYv%3dcm1iqYWFM4q)?dv2I$~|G z;ZCba|K(W#w1e_p50t&~1a(MhqInZvEWdzUC}*?1#G}z$U?O@Q5fAsi+Q^o*MUk+FP z{G5}${jJWcFnN6*>yjP?5lVl;hXif92tTmUd}~e=YSb^!nUdIT4?`kQm$IsOob=>i zajFT(le+`2v!=Mk01OHAE-}e8I&SN*fTAM-kNyY~Feq;R!?m$^@xBL4m*LO5-Q9b7Dn9Cb>>6te-gaJ&s` zr|YDs6QU`Zr5hCvL4ME1B*c^!QD~fi*e5-F=1S7I#1e=7Z<1UoZaJ4r{%#eM;7CH~ z?cr8yHab}=YK7{Se1Mk27@C2!j%u6B9yM{6BY>t8N)VshD6W3Hm$oHAo)r9Il%Ap< zEG!Fvzk3aKbU#hLT}0@Vn3NeJj?cS#Cc$2UX-(s1yXsmMc$t{ zI$Op9mPPMQE&X7{6sgfQYuG9un@y0tWP!-(M%@wTAbx_GFiASHQ_K3H8+VY!`Ymj= z)_hLfh32AyeY5JryAa|;SJ$jph4Q4@>2l9~v(lNxqf~tkifu27=_0{BxZMO(v+pya z*>X`7h+krPYofW+&zwc>^$Tfy@+^WqtFGXyLTFnn*8a4gmrH(3E`tksJUXY})&12? zaC@poU9o`Zf_C~y&f2C zr1=Fb(~o#$0l(Ytm%JsCeRbiwbl1?m(Xc;{{3R?|lDgnH;*z-4U z9B==Ab&@o*mLx^ecr41jw;WGrXs7@=#2C7?X*{22-7Khf|9oXVf4hW?g*`#iVKb2% zjc&P5_3(zyO_g~E&;E9sk*N~P#^7Fk5a$qx+VYt;^*fl<>DyZN;pCq-kn?@x8zTk!79;w!FUBfD41RKhObiNIWinS-!U z%|`i(XH>;iv_hi-+V_f0v`9+O*V4*~7J2-Xf6tq=WQ&ptEvv`UE=I{jj&9FU-^tZW z!-m|tagU}IkD|Q*o)_xRfTS$&PV9n`t2M2NOm&xjOjF<0P*#g)n4YAugDG+Cr8`L! z&zt+0R=%bfG6_&JO%{FpDBaWKwnPs3eGRkO5CKn0Tv6X}t+_15PiSlQR+lM#Sag}pF!!G=}g^Jj=tJen@$f1sn*`dQ|E2? zT~LsVN61mFCqE()Mkaj*D#0AEQl8bk*~U<*4mpVOJ5RB6f6T1uP;?GDZQECtGpFj5|HiXXIh5M< zT`CDGZ$iZrSc$C>(TrSrNzs%SbQfFVijP98ZFlU+<%iG^0pS=$jJyx)OaiJ%DBz6+ z)1mp7)_D?&z{FYJR8OSpkEp3cj%%@iUk<#C1}6BV;98=4JZyxcf4*ILh|yf&_vXYO#gql{Yf?0`3^wadozje9dONmiE(tt63JsgEW!^?i#!5gzL-@3 zx20vymx24I)5(M!EDKECa$Jl^94bYEV$yAG1Ib@ynSDUO95*2Eg9uY6p}q(Li*$&$ zFzkb^`?(6@v|qG#15B+8V)BM2+u~~Bpxezv+8k1b4<2Xfiv;(PXE7>GYWR9**bK*FA~5Io#~q_V(E2CVIW`TOb<Fu~Tr|qvkk|%QzqL_<+k0Xm&LBP6Q#l zq9F$K@#3MfzwttVk*tcW@?4B|vs1sb$je+WpP&a#zIFlx(H*W{buN z`x8RlIe64$WF$-MCPc3H1fGs0c$iL*E(~u&d*gk9S`kPN(0S<(o%$!{{zMlM zg^RgkU_lAw%YMXN!bDCRkRU7zyaz}>Ifqvi5||?io=v8bHhAyde>&eFkY|fe?hUD{ zlXo5@q}c%FA>ICdcs3l9g(s4EKO|G4DuMY|CQ2e}ZQuW)pS{NpQM!qP#fNmKA7*tA z@OJJ&_OlQgpDAazS;KdIT3isi&t07MGzHlZFYAE6UvMA!GN`9=Zf6qVpJdSY!lH2| zUk%MX2=$mGNWq=Wa1xiE5Lh4yiY8OR9})_4vbr~j;%)I0($hp+%(R8G^Ed1Xjb0Q6 zy?D{`0-sgz717ILHFzX`kn=5Jyi)Nq1IYGI*DnNaRWqphY&>CImt|+FTnsKT#0fni zG^uJT&EETO06tk%pf3z+BtSs61;u)Tv zrHD$%HyZPZIVm;(Pm$Y$iI=Jaoy*S4NtjNA&k6-L01|-nN+N?_0`cUe%mxPF0`4zt z0Z1Vcvwabu3*-tTe$WCMzQi@Qxz;dF0z^gaG#oSn*gOWHOYlhKtHH^_B;MfqD9$J> zVEC!@pNM;yBpNT)o3mW}+W+y53t<`NMNeSK^1M0np2*Zs*gGVVNns#U9nt#}KGz=p z_oj%~GcEr;P&geJH`Ws39GQn%ws8;%#S;dycq>3KXx>~IB`g#UOtp*}>o z=@G~0d{N#2B_Co+vQY=GiN2)$S5Bd9Z*KfSA#+O|HMTn$I3avvLB9Nf?a+z12MI5; zCA6M|II<8?n`+tq3P2=h@m%mt?ZV>Hp>c>jnnI9XVZBkQmcA(it) zARB00Az$z-dFvv1cm)fgZ5_n^1X{2AKzpHD@QU1H2Tu5bNYWNWZ3}He3&%a^PT}ab zt`W8s7;tnSaB0tTt?3tNGXLDm+Ehm*kDWw5d7wSEXjypzE40skZcoMNO9W@hFwoC1 zr|86M(XdADb!+0P#c=V7nJyEkC+-XQuyXeWlN$2)t~{RLO*bVK2^1qR|MoI2Jn z(2|F6;1Ha-tKWG7(_%4JX%60~(Bnpc9q`NKl_sS0UW0HAsy|%%E5ny!y}FEdYk*hR ziR~|K0prTptXuPxOMn|}iuXlRb?m5H_!QYP8@--G zW{H7#A&43ZxlD{T&zk$=%WaxAikko*Fge^<7ernMy;qjdJ+}C8dV!U2F(WnZdFodZ|{%E8(u&<7IKn(aC^u4fz z!hshDu0XUc@Cqwk21-vs9?ZvjAoN#ELh{xE4h8yoUW3z{^j>DyXr%|T5m#?OZ3`if z>QV`V%$QYlo5smI)1l&%cu5?DO2I78hjp*u9Ud0WpZnxde)+H$7uT{F1qd*} zcwR0D0p*m3;xK)MG$K|PAbj}_WWEORS-bt!rDue_H!&djJ z4*0uI!?Vr{5ct|r@#v6)`y#Jcz|<`G`_MUt+nW|^yH*&8o$Ov4FR?Rer%T#{A6vq5 z;YdR)i}6#=hYC&kW4)G=#-g0pH7N2F1?!X;;Stf>+pbo<^Iw6XJfgVYukPYa;|9r^ z?O%g*`(6vYjdM-eOX|lv-GQ_2nv&ijdPX!~RS>)k??@YT%Mf}b5BC~^*ryW~ETw9% zSl26fxQ*p3H4zEwf>0QuFODZ^J`MIq91Y7lk6CAZdbK;@EBvV@ zzV-xM4E1{I?ukEu#8Apq4Ad`Yy!(S&U~@R>7bKldPOwJw~lzyXz5o00%q-193qUxFHBLU>p=Y8&;(nkd|e>DH*~E`0Cnf$cZeXq;gZXT&tO8*LBR+AHo&AZW{ zE$iQJ5xQdS(S>0}{LKcci7i@PmZ#{VGctbyTm$fHJ-GcR-mGx^q&K>2<8n9toPPvi-NjP$xptJDH&MHAif%hY<1 zN@OXi3_1)RlO`^zhY*`?50S9O(;U(Y+s($2^WQe6xmZmQqoF7X*L;tacj&ZL0{L!% z^*0oZz&C=kReEI@gP48tQIo?M@&4xpf~%e`N7NOyPHx6EW*?WTY)ni|+J7JU+^2yv zhxj`>q()}5-A|$l*Z=(^XG`bMM1G$Re%x`9#yXH&5LQG?V`~3ZfPI)C3)*%`^|Dr0 zUvtV!;jjAXMDhGiD+pMmDkee2#=VE-nwA5_;37k48n_~Z9uoP{8(SwY}r1bx_%B^ zJ$|(1rfF*b(Sc%ND2qxtH-GI&eHicAZbMH_LaNSZ!7_+$KaB*>riylS^|KfXbZ}3$ zspKQP1aimxsTsQX$9D0SNs9L+3sP2%-rZmJGvaRx>z|e~dDPKpbOugypA%^8CvCN+ zjS^oLGBf&6{gW%LX-klG?c18*6;Mcqo2e`BS9#6HXPK=r^aN%S1{$E%$%Wd3)iRTE z!0Kv(^`EV&*K*bch?F(d8)F8vA1#Pm(_?*_^u&nZhJ=k8>gWjZVDOPLTn)d(h*zDdP|NBaGDNvG$zxh%8Wp4@ z_f(UTN-knlIB$O|iZbRM9Sb}!<|pM$=F#njj{Jz}V(PWgz%8T9#NY+Br2DH>fr!IS zV3t6y&2q5=uh#E2X&Pd`RLWEevqlctyOU3K+$i`-N)f0(sHA(z5Nc-(`;NOh54S3c zbn=(7)#9)~H$cEwi2?C(wD*A?fcJ{mi*HvfOSAU`EAvjQ23M%=PZ7B52 z=T(EHV;^s|O;&^ZmoQaQ2+@--4oDn&)XREn4dRN8VRrxvY$L; z>!qe@>Be(xZdo&}d@g_Qv3Dj5l{%5LH(0l_HlO&JlXAfy!}wCaH2rLLqtJzEk3aI% zGSDYpe|fbi@@)z9E|0_4S^bDLKJPk%N#mj7aP;B>O$#~F81eEJkQt*{%^$Kf%Z7#4^Myd zD_SQZ0`KmpLe>h6^w;_PZMvW3p==w-B5i1%vUMIUedP~nA=FH(@ttQbPGh7 zj<9JGZR}(y-;Q|l#m=yNF0Z;VBMG>ELY`7>sWtgkenp>?r9Ae5kA6S3u4N}JqNriQ zl`TGeMFDXoG}OUx_q*y5;;wI_I6L<89eF_;j`{R(I+iop;{4QxK`7#n9} z5E_eRxVM=$HXCz^hhbsiLgc2)+F$<^^kLo5{`Nd-_oA?2R%8p+b^Y)L4_O!Nl*|k+ zn3rdMIY}&X!Te0sly0Ae=uO*k_udc;>V6#{MpCzI#fUfs^H= z)(xEwaBUV8k+pk1n17zy#(Rs%B7ziMT(PM~m}gX7P>bELcj=~SiyV~wQ2%@I=<0!^ zc4hi^60hQBKV{Ew%!%R{`gF(qv%$jlZTqV4FKGsCj`Q_%qu{##Eu@&<9 z@(t*hVXDfqAz2G;UGl(2QbpJTMfW9X=+yr6!;@Wshu_9P)&*x&p{4aH4I|+~&HxLB zjO?U$GWkDs)k`P~_6eb_Q*TNC)m7KdX`QMP@-MatKg7BD**4i9UmrE|cj^B8#K86i zv$^-hPe(@)@D6JKS6BUiyLs-gf9tASpGI^^tTJ`krCJsr{YN)%@|YF&W z70zVAc^uZ z8{0B4MOk<|l4J!*s)(dJL?SL)$gVqe;oS$L$Xx{#WlYCA34-BmX}T2Dt$b8zC|bj% zn|ejI%|iP25sLX5#X{UZFxve!8CulPT33Ri4+FrJk{pKeoMFHl26?uWPC_VPh1Xee zhA+_9-A>=kx6^r-Azws5jE`91OIy#VUU$0v2P|N!P@(?eo}$8DH1UHSCSk{S(xttJ z?C+&G?kQa<+`A_(tJvw^dq-ZnOh!QQfL|dwuh-L8QJGjqO_NO(+@P4>w^`kn-PUKY zrKpuJrCUm;BU+|MtduR)?=ak_udifSDsECEWqed;7N)e4tOW4&8`mgVe2}s1OS1u2 zS%-Dn3RF$;4cJ}ZbJVzN!6d|xwE${t zDg&QQ#j^W@k>QZk8~E0H#c=75M#Gq|_PN+6&xY1cdjek$WhD=#IlfCiQn@>(@>GDH z)-5B$UsXdRK@%tOU1Co!xt?F=Xt)6Q%~JTmXwBfh%&Zc$U542$lyl8+i|s!QKlef{ z%P|(RAq6^#<~itly;5Y4`FDlijEY4{4DQn#<9hQ8>T;7{LBnL$Uho?O^%t5Nc4HaF zs_K9+faC$o;}m{#8v&pZDLV4TpIB~T6c~~s4Av+rO_OHho5e`@ z@Ev5c6f}1v2G=%+qUGyUGi&6E6?0p3>B>RFyLJgETx|Xl|AhbniVh82Mn}6twF+B% zr3sAxQTRZgrYhF>D@1;1xV>Qv9W!X`B0p*g)tnsZEFI=MqK~_UA{uFtmY|PwheL29 zG%Row6pfD@tt(BC!yV{tj9H(Ie^1dUq5`*50!ULdfJAR(eG+Ji>2TMH+lLT%Yh0Hi zQ$RzpiZ72e)fS~DlQ3YAIAE-rybA_27vSkfNiE=UY1SBALi=iVAS^})0&YBBPTCq|#2K)!Hd9UQYT23v2BK?$P)U9=`k3|JR^m9GH=k4gEad=UkVU8u3f zxX%2(nu8++>LmJpb}8-sDLSWYGgbpSl41A}gs{1-r>_kkJ>!7ZAv_tMpqfRRCLrl% zQA#>FqG-Iym=l&6yxhsAX8Brw^>zkB{7J)~mlFg~bdRCI#!L(@Gq06Rt#BoUDol{y zpWYCNGv3#}N3Gq>OR#=qpubaK2EnaY)xyknor|L7p-<(9)H>3~+t>kALb37X#Hs(V z5ogQ~7BC(ZjY==AxM+`=1P_4GsJclo68OL|MIDg*o>=niVxlb+&0`OdmLU+*M4uFX ziU~IAO8z{-AIGRQK@(#V`PoRuBU#F6Bs$>zH!8HH%#=Oncucdd_c091u{#-q*6|c1 zGcJ^zz&Euc$w!K#1*9hgq~qp}^q@m90;@#_7BGko9Up6gOkkrh0_sGQ#-I3oC!G+0Ud z4M+aDp?dAjXVTdOYui|PG%)Z%^D^aAEqKMdOcE!RQJAGz5eOuX@&IP=9@|wQ6gKt zzYxy5@;JLcp+Cb|cNR>y+*^Q&!UsUO*%(BOCR!g1eLC`k_RJ|kBYovkz?35ZodW@u z6{i!SVBdm;QsVWK4ph{5zWpV>frn1liV4QeaArmq_c{G;_`)Mb#@|K@NsbT*<pX zbql`C41pL2ln@oy~&r6NbCPG&yKy2r3PUg=U_XkWw7a#Q}!% zAGV$gz$130J`^NtvH%B;{ck2PT2MF_TFqEDTJPx?l_}C0z2x7-M(JdvO}0n^P{wKeS;frFI)7x*-i~pi z^|LmjHa;7RsW6;=H#yOBt(}UV286fw-fFNMLr@FGOELrwpE8Aielp&V)fhk(oo26C zuHElgZw+%Gduu~`xT@!zp*b{+1<`>C80^ZjF~)_{?f1|~VYKV6Ig9p23>|o6tWDm? zt`$7*kh{;p#CdD4O_9c4NN97(3irnY-k~;hiqq_VzgMO8)Z%9B?0)@Jz8o9^egj8? z6XxuL)%j&Nd;@nJCc*U=>tJZimE&|Pv9lKh?GY#1-?J+I)p$_PQ@q0w@e_;UMhU4Pw>xrZqOn{HK1hEbYODy&YajSiALbGtIvX{HS{X*U6UKEP zX0o%xcRnn%zRx&(?+N%W9Gd#);dfrk>0V&8nA;;)&1KD(Bk*5;Lh6Gjy(Rn&rcc^9v(`!s(^u!qU>?6fzW zN7u6d(4TKNc-^BL)XqdKZ}uAJ=6`gCUYL9@8nVE-`2ZWa)~DkEV*I4p+fV^JSJNCRYbe4 znmUV*@UE0YrWQ^VzW!6j99%N-=R5wU&Uo89l}i*88pR&+eqD~kYW59td;WK`LC>qd z7JwWY&7Bf(D$`mw6Dmg++-8G3he&TXU37~fdv&g&TJXYj}Iu z*lXnY`Ze?@Y$6glNp?fP7(Q)-oRPZ$YleT8L(X~K;Dv=RFe4XV-vBk?%UC&_n-Beq zbMxzR>)4xXc*JIx+}54Hf21OIUd!#;{JnIG_~Ip(ivGLrC0E2ed+_w;1tI!~8(B2i z_P^MB@1UmQ2VeW7k_Lv33K~Fq3mv6}-ZAv9bZJU2DnjU8X#xV$q)H1Yy%>5&q$nsN ziXe&wMFgefjk|aE_q%&{@4Pd2?jLt%4hD@Feo^DUH&PJpL9*{ZE$2buBG~f zKf)2q++4J8DZX%@dCSAK!_9g8FY)y+Ie2!sxQ{rwzjE;m3kxmt@huDUE%OU6i-V0_3zr*#3v9VcMS%rm#<>lqI zwY85QKkn}C{#U;KZ%ln>Czaet1MUAksh-Byw;y%3QXBpUT;JXIpTPBVQ`D(h>iit_ zj?Jq@n^vO|OGKU05vIHqy+{{gN){6jsU zQV)**{N?Lu?6)eai^DZTnP1QCu8HMXdA1G15?{9dio$x9LPU~V zp8RpxdY&_rr+dC`{#bby@e)!X&GOW5$~nnqj~NKR8>-D_R^Na#zY69j9t=DVLcu}D?hs8v3$UaM;z z*LOdo_x$Bnmb%<^0H~Au=#@tP^yge-Tjg)>w5NYK#M1kCUVYBg;30^nYe?DEKYlU$ z$E&@CUs0raJ@ck(*2_z_>6HaJd7tn-Eahd@6|JMh8bMT$*LBj5XH_PWKR_f(;TenV zJ_vgYxeK~(M|@ZS-kGRmJesH(K7FFx6TeeLCpf5|wwyg?SQ<_oMb3#}yE#q-HP%3D z_9up91ty&;MGL9|CI}rK_%ZQc=VWMy+Jj}rj@cZXE7=F^b|xP<3%B5(WLx|8Q?{8N zjy&X{moe42bIW|muvB@ss~ccW6_3+jqVFfQA1%?f&l9*9zHj%V zFJ6Gv@15?^a*$g0XtSP3rw`Znsb60?A1#N(DEmsZ`0=16o*-75!cs&G)BECTSA@27 zhek_ZitLG@`I)!L$)d`Ee+)JTe8eZ0;a87-315Vk>WNUYt%E{u%ZrDM&q=WM4EBtc zC80&h+XKR#lj!D=f&$y!1l*mcHR81_&y=zG6lKG2Z?qz_kF?)jp5MJTS3B_wKSP3h ztU|WaPFzOzy{tCA+nf8bj8)w_3a(BD%5EWY`j9<-J?PKf5nbA+6( zj>7cPwcUHR<*wjuGLM+0Ttvp)(#wm26RV?8m;550uH8PSCQ1#KvX}@yTbn`1N=9*% zY$u)C1QHd3mabsQ})vmpsO^*nI69uE`e_|tA1TP<{R4d2@Y`b3T=0K_v zwWVJYNb;m8h7h{;!TaAlnNDA>2D>45e@Z#VN z)X{NR>g)Dx#Z)zrP8&LW$XhF~;7xZ3V~2%i6iha(OjI5R=1?+a_hKnKt-RQG_+>WN z5EB23NQkkXHigKoa?|$;q-=ngT&fRWA1Vy#+mPSgbqRNtx;Uy~H+&-a$?|1|B!%hH zp8%j-@|J2(h_O-m9=j|90`&=`rw1EflVz?Hu_IG8LeI?Quur;$h$9)hUr#yXxHo%c zh9qMPKNT^VRBK@Ld(FMxn}0C;AWkyrFzjB1@Zlba8d0VM;t4Qi#)2FFFhj%;V4*Olc9?1KdE<3m))d?6 zhZiJ#17d{M;3F?C-5%7sS+85wAdElX3`U9JEA6h>Kl_*-`v5`<;XWePSOp;3Oj=>L!0fWHJ&|)upoGSe$i=g_0PFUUvuO&5tJ*$fTb?o#(iQ<7>r3$PW)|<-ycze(0mF4#B z_ggReL`LsOnwF&+cNK{pTxK!d-WYo>32o)vLfDu)Y=$lG=0! zZ>ML!p*QbZgo)ZSCYxr{+AVZ%CcXNC6}i)KsgJBBV%Zlu9_Pyuxpw}y^T7{;gLmv* z?J!aOXTRD;ZaujF;J_3XU_4M1&OyzJhGr~XWr@Zi>O5czYOj9NI}%`~99u6c^?vo~ z_VS(!aN0WIytng(hppHedb)cCCKlF5e+QwpT%ng<$GEck^y|xUwa`S~#}qIdL7m(B z*>byo`7gbmTVF%p9K4~6+=oj>P=}Kl0NHd7j>>~K*yYrIPJ?~8&|=h}-sSH$ndT53 zOYpiv@O29~7g=|mqfwsGY&~GK4V&18hP*{Lt|B~FVHPBqB_3|$2XnyE6#?kM1an9= z_IgX;3=5`?M91g{V)Fy>bAZ&+k*!!J%lNRt59o$f5>_yZ#UqNNIx1B9CN;o#BNTi1 zPPKsO!WC*ZCZi^q4wiN_OpdkZBRJ{Fc@OvnJZZhuw%`_-fj*HA9KB$4(ETft0R#Yr zMMOXMp-Xhmm&K50kTf8UO^`0R1aWN!W<`YgY$M5(0PA+Fkbq=28D&lcv2KH7{SYzf zP(~t1+z&ZLeXsOrParPzyzYy5Uyg)8>x9s}gq!=ew-8F%RuNsTQGIi${1RxHW#rdE zBW4zGSw(X5;1!eAD;lBFKegm@v^k=205ToLZGs0A1?gwvSTd|w9>rJT=^SYJJu`?h zKU5=tN?nDyl)#c#QOCKSjNcO~z?jE=2wD=fP6@K51l>$P#o}p!%dlGP)sY-KR{vDp z52$eu*wlXNGljH;u(YN9q+e24m1-^1#Wd<1RA|Q1%Id~f7BHDV_$|9a={vcdfVks* z#v`eK*xfs={2@2YE<+@d&WkCh-^!3^_&=FWAQv5pi$}}_ayUs|TSKP-a2FyxZ5!1_ zO%L&ILs&V&uB{>;ImTruVBM{Rd&np~N0781^6s3x?K(8B9T^#-Pqku<43q4`WyyGE zDb!>&P_k4$B2fq*_O~&Xb7mqHR|{Pu$%*#XBUg+_wAB2V1{b*_COy$#*Um^?M}QCz ztRRnG5F+C*^B+OPM$(vn5^AK1@w6sj0#Qb>Y*&&xP}?=DhUx8k0AI*f+f&%58f1~mfv zOK$R_ci2rw%G1A|BS>Qd9$Bh%S1>oV<%WO6o-&gWsLG95@Blj@(Nugq15H9my3e6! zeby8SA?GE={Pgw{wmCE8%Cg>l!RYkY`+_N;vD*}w0bic6-NSZjVevY zmRh(M2v>!~dR5b?@#OL9N2}FY@j|t-!sgZJ{+8>KFRx1{t1sQXQ9dU$ppmTF$K63J ziVFbl;<1smg#8&HmI+8WkBz`p#`Xi8rhgOmbGEr}U5L-dV{P*)Iipc)dV=uu`on}u z%xWFoc4Y^J&fo$qPrs_j8K3ln4)fhAhnB66YY_Mp=t(Ec0`a`Ol;w{_9ds~qyK8_Y z)g!Y4YfDh+1Q?eiD6KvJb;V^xeXRQjNm`V}QL-)73q}j5@3SoAbdkI@E1yp=3zn&U zjJj`7V!GLOL*!Bg5OBP*@JT`FHeCk}Q$wo!AdJ21*cgT7jl#v#1iiK2 zRd0VkAUW34vh_EU>u5#J0tu*fy_VzXN^N0GwcmBV*@h3-&9{>Uf82<_@Sq-U)>{0q z^vc-7Gg-22Ge~D*R0=KmXRn$iL$;RPA(9tO#DiEIL7XILF2%kJUY(wAP@vHqe6!6q zz3oYsY?)`%MY%wzqghu4ZS8A|G&Q^g|AD>mPK;z1XP5}m664iLo zNMVfDC!lJLj*f)CxmqzmEJtDi?5adI4j59zMA35fam6o_D{pN->L=CR@Ctybwchl) zR6|15%=D~m^{i4`cyK2H_tADH$v|oIi{ouViF7Dm5-dy*)#ca`JkXZrtRDwv3ynb+=M%yHY|^IX9$p zQq)b5$aEl8k7rQ?JM^hYDyGs?q}w+co0VRkdj(J9pKl0brEhkTGP}i?2ka45b8{JB z|9%EpYYtE*Wh;{{N~>TXumXZE#nRc%+`COqcs*3y{ijvJv+zKc7G;iz!y}lzK)iSu zXi`>E#Me(T_X#cx{C2Px7&0{+x+xg3aIZ9hO?o#|C_R*%?*|oFwLEQTqg{duk1;>6 zXi}iQt*yo(u-Hs88W_;Uc97~ky^#Yv02)B>8Dgtx@IMhrs0BWB0;NiE<*5xQ0Px%z zqr;B(r=vx?v6_WNJ$Ey7F`&W35q6NB)CUPN9(9cZvs#6vuA;grQi%e6OpJQI(k}IW zNCFN1$0NF9%&*lA!hKAhObYcWO%8=mj@gIfCMF2&P9GqcXQ_~@A1!4Fv<{5W=JN#% z0}bfy+*qc(p$lU#y~ZGF$nzqCPzs&zOQH3S$GaC&;V$vn|3dxOl!zt$sG^l-KmOdX zQQ_TpkQ+{(*zlnkb)#o*qKneuR@jn}Zgj%r4V%<>HX&@SylS%}LYnFb(kwyVtP7vC z_kezv=XIDBpoa_f%uX%LzRK$W52-M}n7-r&g2k$dKWOa{#%_ED{rTxYx{5sm{uGjzEr z9p2$NwJgH^N?9)068VqlU7mtJ@P~Okfqkp$w;rH${6K<^2*1EE^O~vhW}&zvp+d32C4JmAp|n&vENWJ)0|pg1&#Wb6Oq>Je(GTT ztR5p%4ItvqKOS&I!e>%$i51V(SJ4vyiSYXAt{0=Xo?WB9;t9JdICekdmHzW6u|>N{ zt)x9vDgd`8!My#l_H&$*mGWE1B$onfnn|J1XQ&tsPy)#yqjm1CW!ZcX`tz5SNx?TJ zeC8Vl=6yR3xB(R{97L=A%7`0yeBt)P!2*yj3w&n=Ciw{AcYWAs?D7;H9li?^H3p>D zH-$fqCIesZq0x>2$q_g_ti?dyUNU-tbb7(C+oRdrqn4d%qYq4b51yr;t$v5DA|vb_ zX>ZzD{vV{m>mHnlVC*C!RMH{wGlnPWt{*#qfC$@%`Hgmm?@d(JEsCO0d2>4l;&u!q zy`chnIjHn%aw)9yv?HVys-k)HR{PwT!~WP;>Wz0thA*B>01k;`VDfwT01cqnG{0Ij zZp#yerP)z4G_lJyvEh;Z3y!o5rBNa2+V?77mx}3)$Yg{=I?NJBSB%X*dn3$t`jh=7 zM2arLfjz7nsMT=BvT3&fVClR3fr}4Mn1zkltZvqnb$TiOjsdq1c89L-#g^NO63XMqX%-j#Y z{@~2}ir!C4p4hvT%r^z-m91yk?@@`Iv{zr6^(rg~M^;;sEqwPXIBTlzXh}U3d7cQ; z-8Q0og^EiDvEyM|zigo@jf~%>Sg5|=Ii7mMQ&P@E&I>*?pIT3=ErAM^fMPJ6{%o67 zT9VIIz6d(4_1O+g*Kew>jFYgbu{?E9|9W8c@c^#gLO->dJl-F6{k74jH%E6^8CT+@ zR?eQ7<#>b+DS){W>F(oD4XdaM;$Fixs@)GQ`E&R@b-VR^pe=8EtOBfZHT0n)Lc$Mp z20&h`>j=K&ah3YZUv)1yaxb`XFZ|75Bo*sLj9~OvBB**rM3^aQUv$;md@h8op>zSX zsQlGO{rI9s=v}k@g|{DR9wE@ZNw+j1Wb^VPa^UBLEw%%TK;bGOWWYA^ApYa)8ow2) z^|SA%eyhQZ8VGdO1h^~J4}Nv~$QL;F#nJ`hkp3?SYhR8s~@@9pzXbLx>pU~38(>;7nNB#POR zNDs*JXytHLrdTkta?4GY+stiD(eud6$T&&IqR!Ue*!_cO7Sz3~VeOkI>D|ZU&Cu_11tEgqe=hwAvzPWf0 zj*gd$CX0>ju-E-YN=%>BZ0;4N;<%&KVUuF0nz9zO|5`UjFvJ3p6Gv1E2cSWzZCW(Bt((yb!F_n9G(5~g^csZT_I;37M6USm<;wc$3tgjJji+3i1ARJ#2Fq#3?zslUlB;8J z3CusY^F#>{Kl&SLt`ql{aSjuigdcVs;2~d8lA@Bu?jk!hmy7Sqi{gGz-XGxJfy37Rvqn`jdug7Zg&`(`RPH9` zjnwNnWXwJ1Iwr`SQz{r8mq^zg!(I@W?l0>E|8T+HC_-C;*@NP)AI4~z4{dRzzV}6l zajZzk1;()MQwZIQu!&`NgP_Wt>s>$RA~1`rAzq&iB>%V#`mB#4lCR)~-p9Z}FHk~c zlID>}UuW#Le024?w#@txe@=RIpwlOlQ-~-`A^~Mff(rMVU(r$Sq&Uj07aIHI{Dzsj}0 z&ax3)uGG+kR@>DO3tGBgev<5Xty;m4I&w%JsE6Z(EWY=5T7`FLt=R)wh2RHsGb ztkfe?oyeVQ2WNi{$30lo3Op~dt$ zI03IIw#|O2CC93t%i$ZNh|eIJ{h3(vgZumuGoarArkD6g+=3^9EbyR#C$bO6joqB| z-%rb%as!~4t4?+}BkPf@DKhwGA>}MD*}A7Xj-R0T#$(tKZcGi!_?90ec~+>xtiO|+ z*^xLh@KMt&o-7u$-Qj}wR%ky%{{u9^*+Y+JD4~iCHY|ASs^?Qdn zDQK@1<%irT5omGZf9yA6_*SEKXL827QNP*Kbx~U%W48~AiXotupnnGJD5*OqaO^EtutvX~|I$Hx&SQSIr?4iC z-W9-Fwb{MZXbzq5xgybpn~JCjih73PZCi!WLezI<{&0NG@S6I4Ga5xWa(I@pySOD6 z_;_T3$x5|L>}$>*{vC@Zrvp2)W*FGf!tgFp%ha>Ttcgl5nE^d3lXvw)3cic$jLN%+ zjyuktA%h|!Z0$CM%`EcX66CJS4~7Ej&da@d0=jL<^6n1vL*RS^a^EjcQGA76V02Rc zQs9lbE33ZA;J zK5;tth2PltP~d~^nJe03L67aOZCI(UTH?|JTTg%ga)W5?_NF2DazjPDqi>b2R&V#i zW92U~bTxB)Z436gN87eW-3xrnVXe~)x*D8Dwio$Q15Rlc#eN94qS3l4N~9B|Z3B=q z=?TxORCZ60W4O#!Z_E{6+HKM~`ebzZ=Hi><-3JmqpD$A-ZmjOS1&U87e-3?m^Yz&$ zd+n;nUvu9aeyA<_-N$~k%}5OY%=>0<(p}p)$iD z0eeV!_K2Y3r>ufk!*&x`mX+yQde-JBY~elZlLR&yH5T(eCRer7ENblU`#8D@9EWPp zU#Wd$?mttgcIsyzi)KGgR9#I_4pFF%Pf--^?jIUZ7h6^r|Ew-?s9p!rkmSr1<ep!+bZZ(;Y8owT8h_Tjc&JIlXqj+onTl$eDQTG-YFXH8 zS^8*Mg=<--YS|QO+0yv>ZY}#sEr(^TOP{qaA8I*bw4FG$okg`>WO7^{51u#FcK6Y~ zGB^}_UE9;J%Oh5^w?JFnUR!lu+lO|%8_4MCL0#T#6@E;gf8hu!RvAh|oe0Vtv1(kReRtmLzIvr|5;}I)zCZo2 zXD4e^hf_Revc9gm{r>!UuK_(B*A@*^*`Q9vQq9rHx7s63x1A84cVd z)lJYXPxQ}8K6yVejW%QePj<5y%A7NtEY&}wXgDaNF@!lg{Qlu+_+&-xWTo`v*ki*- zL590O41a-*ra!As9u`jh6nn-wB_?X*tY;*tXtdy}@my1AD%D7}(8w{`NGj0iRiXOw zV*%vB6mNrLuMVSL<=^t>Xg?fF2R+@JZ~8v^bS?X?mDA&o z%NM_vpsJR-+vlG)lqBoZv;|$*IUz%-zGOX`wm?y(X$$(gL~uptSn2Kh8tpav{7k}M zZGmo`$R+d)wy6qQjiDU?XHe#GD)~2UK~Q&JbC@ZZ1Rga}Awz`>%RpRkeGV0txEY=b zBR;)2W*7k3gs35)bXeffn*@=aI;qT~LYX}Z1o&YynOG=zQ5BpA6~9lU)@(xX4yLRN z87dT2M50L)-UL7ZYUxjT`Lq~=$G_~e>wJ1j;zke(>{dLLhc6!X~3Z($pts} zAU!>8wlkSwkBCJtJYl&yyBt27d1xM80_9wo{b@dP=}`O6;anA9{_{7nh6bZ;LLTqO zJmocIvQ4Iigu%&k_GELr;91roi$i9T%3oChFf_8@y9X8Jvi#-N}F8W%X1z=Inu3*PDyXtN?6rjvD(A8V4hRsuvp(G*#)5a=~$6e#s#+z1`HOS0Nar0?HFKH6)u>hk0*i2vBAnF zV1iYnANq_|9NTMEh@V|;$#Xb|oe=D03z>$t18qZT?zAU~H7aXpDMJ@#`+CW6;grE$ zTkqgAY8-ZSt7aAzL+51ywSAOYJ8{_B{E(NVnwM-|@*Fa=0OukRMw1B&W`y))wlwvq zZM#EAY>O7aGi62UL79_nm$|H|hc`(zgt*FE`YcDc&z@YSiYz~5geM+ZJRXI4xvdPt zW-96}4+^L2M`5(Vw*i`8!{u3bSc<8 z(TD_)fH;KJF;_eRO9Jg*`dGhEGin7}G>yi_f@l@buQTj*VegD!s0K%rIFr5DD^D2k zDOhNNJ88rS)+8$J!(~4Z_}sOQRty02S|sXKTiSEI$jG}CHG0{h{*;H2W0XfL4TT@% zia#HGxo!W=SJHDR5$$#KhDUNPi+-lcTW*sJY4By0v1R3<;OfOM(<-l>4qe`U?pd}K zO|mDz)JP=hBXfJL1!~l&)kc~*fF;3zShh0=X1B>9P*xxuBP`~5-zgBe?^IkuS_aEeaNvqclD{*87-te!1-EL1`f#nN)|eU(BGV& z;WGW*^72JXEO=(t9c`_TBaQd0WkM-}t}f~eww$ahd>INkx@%u5oE`)h>fSb!Gm2|4 zBAw28w!QvN-WWja$LQm2p!>-(*O=tQ6ZPfr3F)q?neKPy; zdty$q$?z$vIS|YIWzC5Ug@nyWSeT^^FTrtu!

    ej4lQim%ov1K?KhtR`~kv6YY@O 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%0D1)Ip5L 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 z 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

    +@lgud|f9Jx$ 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

    8H&`1!C7(iZ9IhhnqUKf9L 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[H>utSla~v zLII=;;TWxd3eP`iFr3f#V#{7H#kV9jG3D_sSz*mnUqT{U;t`JcFy}de0Aro}05Xr% zFed^6j2m?V5Z7c3oYW0$^~0#0%Jr4A54JSj+YGY2SWQEE$>q^s$}_Uu5R)1@Q*eXa zfYYzx`ESf8-sBDEM)7baWtOFjm6&=u*c>_zBO-pz zclQOB9dAuYuDh3zE*q{d8A7hMQKyfO9kCiNJ4ViwTl^(wc`6rHo~to2ZWWiJhb|F6%!t&RToYpPB8l;Edg8-6%Pc#aYHNxHQ#>mu zZ)__E&`t&DWZXJCd3R{`c4+*~pQiWTnHt4Z{E%VL-G3NNX&N|975nw!ii=suUDHr& zGr?+xW053`!A*KSHskk$bA%!@+Q7M^Dw=o?ibp@q;#A^&-^D!eHd9cVPn3+eb8SXd zFao*eLKvph7;~zjl&HH|7dGV)^I^H$^Q|A~u9Ai7H6?qyE;N+TmHdSJ=9N?GTNL|S zl&eIQRM7dRnHAJuxmmWlru_a(4z6KWt0D+epP+l*@PUSgw_hn z_T@$Cp+(U^{SJ&(7pv9bzGb&0rGUIupA&VD^-_zIe&|)Jfp$})!G_E%tC4MtRY}E_ zt+^5TrIomH?(bF;D&3=H$d2;)2@-4D-p+P(;PlU>7fmJ6W}S1ROO`v~R0m6oF{YRJ z!j7LW4ukQk0&ka7{l~6-K%#Lr-6W9N>wx6qcHORL_a%O7=; zmq~2Rm&4Yq>3%R1K1r@QYuMJX0;JDPD1j6=M#$55;V`oW@FHQo!FsX_w##qBcdxEt z>C)`hk#+KRe46W5?ABBL?PARA7`V?cK1VV=wVP?SiypLNwP88kfjskTy@Sj?iou@a z9y8}tB$w_+mH9@N|At=R26wW3ah|=vB~!4o{o1m<@bybzXS*%NK{VM!OnB2!-r=r9 zhq0v1rpi?ZX(@Klh%$5Aozp!rqEes{y?0_nsSUfMj~MXR)-MV>@)eoVzO+`(PM5v5 zRrNKx?9i5?m`*j!v0_MGTX!o(K$m*OQU8>a!D%N$VJD*tPR6=UCN@r&t~r_Bb25u{ zGS7ChcVV=<~7(F%y`=5*9Wm2U@ zVug5Ox&Ngz{ddSzJ_)auplQQb;#{ZEgR0 z^Y+)4@Z0BKKmX!PJHK>+pTYlY3rJ0?$yn5@a=U_&)cjV1 zRe3!Ru$-Ei>ecyuQ4Hc&mjcu8kJcM)f9n~{0`4DHEN4TGh}?< zEDhB@evyL@MzLzvm5djtC-7T8t1F#+tY4s+rCDD#{lu*H>hiPtC$p8dJ&~+h4dwH- zE|X=}!wnUSjb5A2va}kXF1H38yjdP@tX%CRz{pQ)H&w0ogi{OHj5Jkm4#aV4WotLr zY!9c3yRD2g*S>m@s}yxwr={-oWQoxeo6(l~-PtOK;cT7OhIflizPl@^`EGz%}Gyu z-+nho4Oh@VQ`1|6?CJdz04#%0qrj8x{s%S9u6h%}js7!>lpCa`)y71Sn)U$-f)Op zp{CS-P*a`>!buh>AF~jPV)$8t3;H)|Dh^W9%t6>SZ3i8x`QNB%!wEGd|C5@Y|BafK za)j)#ho8Om8#UcMp{Bzp)YNIRpZxFCRP+yO>MwPzi2zd5-DA7IQParZsHqbtNKMKA zPECV;qo$32P*Z^kfO&=`G(d9tpQ)*6-JjGn>F?AOCiYL%RJ!V4QPTsazf;pMY=5Pu zdMDI$;Dnmq2ENva{z*+=5g=4v_nrRdsHxaLQPcMX_WwXldBXAVKd33g+CKZsVZ<92 zpQn$k4cHYj(@<$U%DnvEZYDqS!@3!2#W${bIT_Eb*>J0fpBf2mZ&jxkZR*>Wg$L2t zagHpdDyH{Q`e`dKZ0!#s_81M~2wH_(`Mmvc+v6P8T$}HCXB-xF;&1?upwS;G?_T($Dv1? z$%b4P;f8X=Hp5DIA2geU15|nPN~UKnIuaw+eM;`31(XLYW`^?oBO>8^HqsJtl|e~G zmWwa7R!gdRENH7nl~+_a?K^zg{hUi$`wcdw8(eWp_j&K;s(ebv^?}sXLC4KDbb+6WebAljIRokBGK2mu!wb|l~E?xRmAwufudb9)0X7fO}sst9K zrZYZO{mOzK87`JfZ;~53vU*R4SX$nzxg^J@IP}0UamBmKs8wP6>B1)**@Z!{ja{aj zvH?dTdtQ->aK!9A&Nm-f<$FK8AWYoM4n~uh3zyap6-|_Dh>iOk+q29)^XB&IkG;mu zW1$7YBCpwg-3_j)q`}abWI1`q?o-A%MXGQ@C_5HHrdkC(^9x_)yCR;&QSYww#2e$_ zwE^Se4J6an52BbN&_72GMUs_1xIi@PmuL`;_5bl;J)J(MVwnKX1*z$@A~;D4K)Cf$ zUu+zY`?S!#TyL?VoVIpk)-pYeb#Wo=yb1#;;f@g^&@Ql69gMFDL>YFWjQ4>dejSfFt9_YdEvyz=t3F8{ZK}E0Z4=}7(!}E?BQhSLaL3~ zktvyVGcv4ix@FIDFpMC?%@l&D=h*07E?$6%p%RnqwM=t zEe)$(3GqA0A{~69_vvcr7{@3jzFyTL5n~9)137Hs5~}f6^rsftyll9;I1EVnxB|)i zZ9}*+86wocI(PL{=ox;9X58r;9PnOMiO8;Cs&asS{5ZE?vYax;b`3w?8m{{KS>JQ% zfffhU8HOI#Qy(<6&tqvjL24Rn=Ma2T^ur~C*5y0co{kLm3r6F;>L4}E0;wsOV+OEA z21SF^lp*Y#c)HmcH7G`fc)$fW2=Aoaptv*GjV-h#1$e}kZ%bMPic(#4TZ1Cb%ms=j zXV^M><-_Aw%zs?Hu#n*!o#w1}o1UTTdSj3Eo?oLJBj@5wNBNg0Qt~qG>!Y9OWUbj6 zbHNtoTnMoBoulAJtq=lxJ@AeT10?_mxvzLob!t<&mMGFru#r9KD1Ucn4oa1;PYSG# z@8A)#2E$GmYcD9GB2L!7AP~*Uc7Yy|>2zEKdwoG&X!^J81OGx4hR6K@J5 zax_Ry!ElR?0TmPwpvYVZQd1nH81LCYfc#EP!H#wY{FR1A$kPW`&)B1WnVJ>he@iFD zqI$8Wn~xwZYA4i`+KYTM2m%t>M*S0N3Z|15VIkC2_d)Vy*?2o<_VyVPwHQ!<;K;U| zOp?J0c_LgHOX5#||0ez2K@;oka&@w2?~Bys@?gt>T;DC0;T>XT`^sNI^qd0*LAwaQ$+KpMg)~a76IHvaaRg)!e!1V z&C#C_d}*iA#QKR&q#%q7hYCI=hUi8dT&!FoK{oTFQ)@z@?bn!uPEc=OgtF6r2n zHquAr4lyrYiAg9SAFUxR2ynGr5->V0PwM{QbuA84(?K9W<2qCz4s~u`EeozQ5iSv} zAsag{7B8EYbTiF})<}(>p@9uT#ddx7FaqcDpx)GsKQ-PZA_%EK4nqdA%A!d1gQ1XE zE55+1udnnoLL7@R{3XfN(($-CzlH(IFEerP`+}K|3%oW#WV(%PkUB{Njb}3{+wu-t~;7PXWH(X_o+A!W3K`tE}@^>hS;*kzI$8*UI(r=i`_0NN;<&NR07p+(lI3Q>03hgGneDHR?rbM1Y&I zkpy7LvL*}hXYZd{plnRkm?eVmZRlBjSToMo8WpyYW|D?NhU$}LeJjm7S9U>4%`8+s zzc^8g56emhK(P>J9IC-K@Q&*PdJD5?i&W}#9w@c|Qv#VABjk)#yb8zUuRWA*^1naF z6XTMFyHyaIjve~ObI0XYL*rG5e#*38>7#?fz%ish5zeD=BcAAePO`iswTua3I=de# z@Bl4^hw@gT#&eB*l2XeGD}TJHR0pb{yGE`p%0+e8?)~OWH)VunKxeAyDRnCnDth8f zdvB5>ysl=m0j_47Q@DLiDVp^ z4;zU(9&X`98o#eq=UPQ2YB)ngn+~F9@Q&~YCKh6wJ5$|lduBm77YCUFnR+8%lm^MGOC=Fi#FkV+tH2Sxr-GD+cBD4%sA)PF! zRiTi9<=JHq`r6!!jemGf7^J2?rSTO9*wmmlC{?CO4mo-=-3G%fYfxM#!~u(nkrbHP*axU ztF^H4cm|M~y2Xn$J>W7t>61^F!4~TSJWcrm!_Du`wSeiQYc4J7QSQ)lF$8_GR4;@o z0j|DAa>t8Is8^c9u@%=>-~0r{iHDYAttYV<5*kd47mRBR*2d;b7giZ}_I!{&Su~!A zh$f=kCD3S19wh_8g%yE>`dEbN7<2od3--uHdUUlyV5~I*HIlzv;Nfrx7ojJHzKA|tIjH? z)G2dSPaQi&AeYBOrQ^sgTYLs`QJTrH@gz*RgLK2UqH<$ZXUTr2JN=K2L2mjv)%|EN zlXQU4)#Ou>xgU<3~4HsEFSA}P1{yTR)_nbUN+7}4vQY|yZa;;%DrEO zF%k1%rfj^U*4#GS{$se6cBIE@}aPF(d6P9p+$sRQ#Y;M*JFyI&s*%io_yr+$wk6 zdaX@xrhnkh^ZOFjR?pDQcoclIsTS?PHmhnW}Ins{5gnB z$$RKj7@m@F7t?#1ysa%x?bNtC#mpXmZeeV`sKtDm)X2*X5e+)yX$>%=*8^^hBjqQX zV9y%CC}_cZ(QO16UmTQ;;22R1EhC^uahQ2+${LkHPo?Qg9z=^QxY=E}4Q8hM?2HPC zdl!q}znr?u=V_*P>l$J@{#i|&4%SodQV15Arca{JMxw6|&$fnVS;I3iBqq5CYUj!H zW=iL~pc{s9V4)oPuo42=n4$WN!Thhp`3%;DY}SPW>xIWZou(EU;!vKNDa|*BvQ(|( z^S;apC`<*TWm0~UKJ+4uT|?d^ET5Fh$1TqukCLVmy-S4jA1v3Ga$1krqTk4eGHA<> zo6S4WBBwl-=k6{qE-%l%L#_$6b6qN@h@7fk>ePOBE%F_f3uCC(zw3yZ!eaz^Oq2W8m1)NzCf#(x>onKayL9HRonH!Oue|)V zg!JALbj4=WI-WVAg&VRwo~3;Gj@pI8alQ0)M+_y)g?kzuW&RcRXx;86*mk1Br2%(8 zEK5z4&aKyn93g2bV$YXgv1_b$n=Fu3E~{MQzVx^s-Ho@mX!FeP_4);}bQ_K;8f}Z6 z-%ge9U%jce5-mD^)H>ymO>;$fi+st5>o|JW6#>uwDS4t;RdI$sbl=2A}5_4)^V!lG~Io8gYisiD&XGf{=>c`Lfl&EA||f3yA8 z;PE#iM>~gS)QyPV-4OZRYc?}F^(vQnU;Cdb?u6ejVHzslV@r{;cRtaktDfiI4GZ5} z?pPa*#mzjGoZE9+xVJr+zdOG*DZEtp=K5R4aWya93CRk%2Fs|674`Lul5g%wysX>H z7JkP&u5!@fQBu11%u$c*%>JuiyJt7vT-`QhSW%9*TFLmTOY-5}^`D&^G@4Y$cW5f# z-L%wZS=FkvnR7q=D1DDI|Jp9%{(eG7%l2{RN1dI0j-dVZ+BcJ@sbwxI>zAFEr;zV| z{zjGZ(~E)wF3(TBwQuN-sWmI*v~xa*>M4b`e^m3HHSVmhTX|!occ@OGY^|qc(D~Y~ zQ}OZ{C8vvu&J>?qUnqdoRPX&c&liX5*@xTFdn%M)H{3|uh{3|teK8Vu!U!kTq|3*y*Kx(>v^>=Do^anM)L7eWrjkvtB@8`ZV zTIsxcVc+fDo_Cqvnbq%?zkhtC_MrTvC*Im&= zrq5Qm>uE|fMZlhTUAd%BmD=*Ohx+=MzH7$D&Zzn^6QlOT9+)D0mLs(=!TD>Q~eM2FL6{M!R)1iE}pSfb`L27#H z^D^o3VWC5aET$Ra{E$q%Vxo&YPX)0``*N1qJ9Z*Q0;IgI&$05Tc z>qO;N$ih4-n=gymQXV6C;1HxPwnre5lK9ot>oy#%|Ab0Ck^W_`&kXO%`+lVum;DU{ zS4o#}W?&8)dL?)wUR9(U8v_5aMyj|E!P4OnmyKVjZCbLE9~Q(|xPXVVY()62zKkB1 z9=bYS5(F;}%}-Uqqfn?Jky;%|n@NOAeL4)l+i81S45(V)!O4~EO+p`Ut%GAO4K zaL7&HdAID-6?3Qck!+kyY^wI*c9DjOP#Oph&&Tgd^D2UZc_thoW*8VmUHAymT(!w+ z^lC7D4#z!=?V-4X4YT>=$=DsxcP4lZMKeK>%(SaRv@xZ={+cTg@kygZof3c$@*gcQ z^wB8<;vJ74jnmZ=@o;Wjq{vHy82QqEnrg}z`w~SGZuKG-SADhDA)bC4T$+Jp<542; zJhJwq9ErWgXj3=@;uvmkhmhgB9$J=4-AeX0wwc;t0?tGY;CUG$V+_C)yG8=L&Mn_4 z!>J%Tnm7VHzyuXLQOo-?B33drFcO=HFP3XkAY0MEqzxK{_e@1d*j581iR^@eCt)JQ zle6tTIo&KglaU&-k$rJ#Wi4}MiKgTb7F&ii4n*Ts_QX=U1iFGb0$hv@m2ir)P&6}Q zTZ}i`wM_!fJ_ix;vx8BO;pxZMSiFtrjMvpk>1+X*U@@d^$*G6lZolh74*Rn_mc(O& zB|*Fj2b<1H+=lf6TPQe{MIcMaP|Mr!+jWV%5?l&Gd?Ao7kqLj#Ua)Wr@p`#JV;q3d8Yzp zL#2g78yUI)ZFjJsekosi2rQ`YI45d%*PDT6FdQOWjyZYHF`89D#^%Z_!Ge1F&n2zr z#3D1W!8FWGIDdINYrQfF+^G?SWTpbO?je2#oKW{`8u!XsQ}L0VMBsq*G{ z)FUQlwxUnqygS5Y%yK~Bot}4)H0J(dUF^*F<;!50{cGZb*Awdf49asM9&q2a!Gmd> zb~R*Dm2Hy|XY0v+H_C^M04*$OD&)iy0BQ#)a}lsqEovaHSGOqvky@(ev{#>8s>3%% zJU?q43CJBy6wNj1LucRL@0sM*xzSd>8IgTxuE*42D+5j6k95M-@H|qPa#n3oiB`9L z>$EDTeRbR^3JcKO{1ttFG1I<=r)8<0jexjtJZbU}x%k#7R6{Z&CSiumX+ret%`wJ{ ze!b}Vw%hGw+rjxZ&n8bzcOrwSI)Pi~Et);sH9k3WRs|Z&**A!Y{0cWe6OcLveM?7) zUo*9QJADtz{KO-fcLz<4vc$#gB&F`kgm%a3pn#~zx^&))v3MM!7xAhrbmd6az9f_- zs%eZttVq13CzYAst;S=Jr*PwOKjGYN@P&%km=k$ACl=My^qEtR0BH*fjIi4gjL|H$ z!~xR>aERH{)5^{0a2)Wd+_IK`<=e%FA4MShk}o$fYKzFD3^Es7s8Hlpey=9qdx@!dsVpsZO`7mvHW=~pwz1RX9$`&=Z5%B2FKFoI$#UJf|o#}*Li z3xSFjITQ|9%U5`@FXGgyutHSAaUei*%GE3DXfLg;EbYKip!ZESE+0=TfqpGeL*u8k zJecX`B4!o6j2<)Nys>THYEXiz8m?1&F+U+8Gzc1^FAV!_fat()aVU6z*iux8kzmeY? zOy)9ID^yV2wTod+Bs;dm2`vYOX=@iFw^X+#xkW#6dx@P-Wng&?lL;>v$ivr*e+uOB z3Vjef@O_B252w-^h&a^~4#UZcKk2cu>LzlMXl!W272tp-N%sI8kP8U+hS}woL=O_) zMh?1tLX$2bk)L=AnhLcw>vYda=p1zC13g7@Vl`W2t^fkJ4`JsGzN{YRY+L#H4bKd& z$xKTtJPqdvBLHy(12&0M2ldgYXV-!|EyoDYs0c_bN%a)MPL$v>HFR6K_*HiWBo`=Z zlT*)3h2EA(P`+^Z9lp*HHr9(sL`xDj*?ikNM71B9`;b^tLB(+}QEaeS)94aSu&6%2 z1Ah#j_ z$Cj`$=mq)&na1UtP7Eh%T-bIzz23`R=A(>e%ybzH#1bIZ;gyqiLpfe#Ww2lpGXSm+ zkRZnZ69A4JI|YQb`n9NiEGaQ8@hC6LxWJ_7z|7R?!;w-SiyE`G zGp?yxfQ8}l*PNT@nv$l-EUjqHN;GsA7%(U4uZ$T!H7?Gc8=J$iNNtJsAd4~wbNdP9 z$E#cuYi;^Z&(qRFjZmXw%*zwF`XSsSgE5AO##=f$g7c(P3zTD8gA=l-yAh$O)!$2x??bH zf=Rf9+U(~e^U>#~hf|h930D3(Hp{V>-%Zmp&g9@`Eb2_`m#G|C<(-N$oUJbj zx?YlIopwpOB#<{_*gDg`e#t$H%A?58lO)so=Os=uQ$~K%1-z+m{fzBdW`Ft20FPOf ztXa`|(}6CqFrMXzF27 z=zNLn1=x6)@**KhC^u(%KJHzzD}+R^iq6}7p&^&<@nMKhb2$cYQRHOtL?!BRQL>MM zdA<;pojF|<<~M3eLiY6C0*k1;SF=Tfhh<~Cg+5lQjx`}yD4`|GvTbxxy4kX&$h`fh zB@wgqe$BE=l2Sy-s@I9STgR$Rrz5~sw?D=zW00#e$!a)@!ID_vvNboXvb0iCF1Two zF2wMnEWERPX?%K7bDj$}Oqi-)dNEiMUD7$5v}Cb^q}yCtD4M;*j+i_0n?U zw&Ar8;YhX>Vjlq63I|-O9vIrBVnScO3wK#Ccx`Rw;WB7%pgA~dsxP2)E%bOBkixbZM;2E~$0_qmlZ@k0^oQK@!J+$_uuNS5bzt@G=VJ9cMOnc1@E*!NO6=r%aB)46Omu6x+? z{JO*&Ywwz6&(D2Hpku>w)LzKOM0jsQ@25TPp1$a52LXNuahrAjSp5x&r}PrnHm7eo z$k?#RW^Z_B)KL32PDy=(O#_WP{j{GUdoUhT`Hnxf#i3+-osiKZ$Bq^@r)~c$^ z8yQ>Dqq0mYj#?{@x_gd#zy5!z>Gnl34u?b+4yx%mHWUm7%b@9V71 z>jmq9*Oqe|*2JUB|8-HO|Bjf})z$r5Vmh6Yx|LdUP@TX0S7kaiHMO|7_?MRZf$swg zzZR!|&5RxnfXa0Fc;jCv)8nnT$Gb0&Ptr`k{W$5m-#b2db-e#KX!`39X!_$X(DdZ} z`F~{riD~_R6VtB;JCjc?zvyWH{$+o2I7hFu31_L0tIEfC3F zvKEAv+F1+6s`9Rf&|Gp^4`sN*a7Ows#B}KoVp`YKg<$shz3#rLpGo%f&gMh8U%Z8} z*V_I;E&N&}%1Vr3^lUGrPry>}0c z=Mld5i!S;#6YpP$DS74~)WbMPk$5X%DGiUwpuZ7Qfu&F5L1P|bH30=6F*Q}&lkJuictm6hXHJTdnzc&!`tt7m zy<1&&5AS`AJYP%bUV+#C{PxOsxMNDHVe>-OUaQ)vK{k$AfqH!X>Po(B4LjL2VQv02QrsF4fKS)1;NWPdp_G=fsLm~ESZ#(CO_)DUkNchqF*3%bXOpjci z`u1)(=NFxAhlg>&{nx|#KWli1FXYP!J6dbH#4l|K)xAKZ@|l-GrV8YU*lQmJm`UY# zh>ul-E|a@2ZK;>kr9c!N{f(X>Ng5RCp1*Y&O0W&TGT8c|Pxq$Qdfuz!@K-Ho-e8p# zqs=kCvvqj5yNlC+HxTE8Q>Ks0{HJ-ma|M12&#|;+e zusW8Pl$T$<$%h;xAK@E>BK@NsSzTR*RL?yMjDtDx7O4-#t$TA&I-cgK=hYIqQfQU^ zHl2TaQ1dMR$E4xmv$NN4;&_g6_FS1h8DHu~U)_rpkER#1LX^_XBs5V66MYAws+j-B?dI~9#RwpKV-$xBxg-Lm^i)7$L1;5UQ9t&bZICf=x7YWC(I`SGx~ zoRd`wGs!nT8)qVyKOK@}P^3LIN1b;SSADvsh&G}~|3=uDJKX=_$P-m@u@e0py2482 zcQ?{q{=U`*vC74+G7aV3k=x&DuMD6=xH!g@7vxv`&#O~EkvGm(;2tW zS9U_vI-_}KgQl{nPvjTus`)ts zW|0TX^j-uBybp(^8R2B=AEqfP9A;yj9+;}knvH`Cu-F}wU%|oXBG+J?ZAVlDtt&Ua z$i-b{C_tP!!jql2(xu#ivx6$)M=smLK@6i;uheF&3p$@$Orr?6zPRISy`$(|)htgLjh$7Y&p*j-K%B1`DbVgSsMK~Lx zC7@p-JwDnvZVe`dQ^gypt%&!av!905m%DnnS?#9J#vDn;1piF=z~NXa$SRauz7>H5pvd*Wx$BRm^4^=01_l98Iecnmk{W<`I=d%@nb@$=%W|PA2I^t!N zuq)@u6lgX)Lyll)p02@orvf{2X};JEm9A=Cg)ujq1tQ$NqF29tVax;+@);LDs**dd zZJ@u;H4>4v1=jD}Z^$hb@ZK2n_rtBL+){+z%cmo2-+@!Ud*B7)O&TH;Nd2O6?(!!~ zwC%16k17n%kBTb))+~|${~zq#_g7Q@qwo2hNL3-~^Kv7Ub zl`f!2N4i*O0@5*b6jZvQgP)f->ogZe-%$hZG{{aF?)?RDBdFjs!P>B^M)r(YEC7T76-2bgW(YeWrkV(V_J9t&Ed41!EE)9(04&=t z9=Bw~>;VU2*kNK++qZM`^ZJQwh=0jaD(tT;jUq$O>_J0)Nseu?nIlFN`rP*@*D@&z60S0UN&zF#frNX(PwW zMPrxOk#P!)ySE}2$$xk6GpU#HVus3*$hvD`!Cxh3-IT`-E4y+>bI zx9W)cEv%XvOZrEa0)J&`4PBPTq1@=_``8qwN#JHj9DFisk$|onz5Y?o8>q@p8Y&N`!U!dbSd$y+Mj~FCCXP`DhZLzLbPV$`;Gs(V{cy7hayB7(#f< zK{y;(AsdA_e=2w`%8@pvVquFH_yHAE%cY7UIDHZb44iRP07SUH<3q+0Lc=(L&)XqG zVE{n5{^R(+$x`4B<~BAdcRkxCCVm1<^fnej1Ob{rMr|gnwiyi2&6h|COZ|laph8PR?X&Jt@DSc>;VQn^8HH z`0%EIOTJQa;osb8+LMATWMOV4#noSZef$I$`bL^V)j3{lzbUS0LPA=6HUksJB$ivD+|&o({U@?zFTGkKbuGg zxNeNcaiQi&ppN4bk7`Z_ArB0Is)@x=!5HXz^6(yT0|DZ@hnWT{1xb|vK8NQLz*i*H z(}`{GOs()`-nK*ST>ybDV9`GIaiTZrvNS>kO2jebU~hKZxiaz14w-`)QO1mBqvQav z09}@zlM|XN{Zkk_IA|QVSEY5TT13Jqde|SCmWthrjEOJCE?#7%2Sb6Zi`qarA(c1& z(r3f8y7M_+J}9Ugh}R0;!XR$9P`h`&w4|U4-Y;l=Av=X88I~wv*a`WEmAWxl5};j#YCd8aREZRD6qMIbQFp0kJ2By>DF3LIk0H0MOy_|noY2Kx~g zmH2=<1n9w4k85RbLuxpH&`##nQ5B_xgh(<}@ZI?ww{T_e z03LiFk3r0(J8WY=F`jl-Z9F{7@a>Y4THAeJ>V16)Y%P89ell~Dr3xJPp!8d1r8st| z{3`qRVtUHB;tdi^jFH-nXWzTF%m}p7vP*SGG2@ISTSaxuKg1+Y{aw6AA?n5Ab5}3m z>9RB&fa&f*NNx-{Va-n&iu2U4)Je1@6@5D56l4mmvIpX(Fd|HXxlR^kx3rr5Y9-;C zZPH!Sbvetn@4zZDC%GO5N>;qOhoQ4lONZ+=Mk&iUjBfxV7Klmwhm}5gim7{D;RsRbGRw{t%@wl5C}5L5g5r(p(^E0B7DmOb(&zYdogrbs-t$ZGo_qU9&-UrZfe)L zrjntS6>_Js$BjU6T6r%vH9pEvsD>UfC8R>!8DT)Yi1EXlOD(CVm<1{`%cNR4rf%;V zDdv%pJ~*f@fnIa7h`z3~vrJk{>%K!sW*6H4GlJRKQA&|AT%0KVEZ-0(w<7i zKFvK{u~aIy#0%3&h6vywUBnuZYv_A>o=QX~+EaB>nk9`3;q-pkO&Zy1>snWM<>yY* zOGC~?+IaHt-K<668XJC4(wMRKkyx-HHlCCRnYt!YK&D4bk4=iPXOnf+J58ml3=Ejh z?22i1oBE}j*84CJiFEl0izWs>8bMqp(^)C9@J)m#_q{h>CJrW$I3LIW(P_S&Q4|Y? zcN2fTyVu1w-r_Xg{{HNvM}KkYJBA>}lH+k5d309Fgl9xLT(XpSc!{UA!wt0et)#Lk zmGmfcr+e)Dm{83gz@`dd%Wvv*$9HirV!C5+o=!${bvv$!e8 z?4C9Iwt*5o22qEuJ+J@)TuL{kI0#f9T!(jf{i;p;Vzm8(N%V(FtjrW!X^#ahaxBHv z!oTNuHS9#$w~MN%E~*6cmDI<4{n?7flhPVJ!LtmO*g%jeR1Z6+hlg6rK&|Mb+5RIZ zgWCokIpxlw6bWFFCXfb)pJ@5teCZrkiKpUm(a5YhAH~WUO4NYTQ>JY-bH1jvN&W6S zKC>5o3|YM$B4b>%(`U14XL(vI3h^*=0A`Mb=JG*v_@LPzpw`)NOnX`C1T%aVJ=Vmi zGzsFJ1mVf_pPx8Gndg2$MGaE3FbnkLXzt~O!rldjpFKGnFRv9n-A=aEW>`LRd3JEc z-9h46hz=rdkKwx8Usf6oteht^T*0oqpsP~1@RH0KzBu9%&CTgq82Z&pV*Y{w0;Bqr zK6;N?d7-gFuU}-5SHyX{yH;KfAI-em!Sdd!O3G|GI$};Km6p-C0I^2qhOPJVA{oq) z3|H3O+E$kHX2x61scx8g;<>s6^NGk+COtenYrVH;9h0?m>GI5BFz1hFOBFBIB&T0V zU0EY&EYmbt)O$ypN=^^nus(iygip5n$GD=836?~%np9d(n(IGntmdMuk1d-z#Yf%$ zHLn$vn|am z>D7~-Q$x&xa_U7%wUCJNp<>N(8t8WTx zb{+TMdxh*e@tF?sE7FY247ewreq1=JnQkhZrJ5H#hNp`*`0jqh)nsihh(>t!ZLXG7 z3+8;Bmn}MUF`cu)(-wADg5Hetf8D^ODSmj*p*Jpc8AfzPEUR{VyTL5(4|e*Aq=GKmUl> z&vw~YsrF^zXVau<>R#VB_@wjx#~HQ8{d`NsXczAH{^A6-Jn zjtzd&>YqR7s(#h=g0$@n+ z&+IK@Y2ty#RC?^E@4jb#7Cy$+u9?MOc`NBICxiRSulp@q;nzrlnGCVUs2>wn{);2= zn|QSx5{H@)l73G6Jt=TBedcJ^^=RJpXgD4S3j>wYCM8>iq}B!gSiO=wz6W<(M{+g& zes=Zf{o0?8v_CJ7$=D3b{3Uvu}88Cb0WD8MXgUQL?% z*W5i6U$LQ`EvT2}^?lN;EqJN5-fLm{^?#bXUzmAoQGU|e{J#G9vngexJX!C>*?(%L zni@NBCO9#4)hTRaVCJ8>d(po&)0X1ahWfO~9mkIF*RmQruh^dYOD6nl?*4Dh^t_sq zxAIV`wJd$^{<9~&W@=*oAllI-co`8Y+tZ=&>Pdy(b^aqR@6EhRYK=ZCi-&Q`-H7u(IMuyy~*@GwS_9LP$41I8jI&J^+s?-8JD!r7;w zTsANIp~5%!P9qxchYg_akB4b9oj%yp!RoMu|JTGc#&bevt#w?!pD*x$S$#~%<_Q6p z8iefxUA6gdp1ZfDMNUbCdmc=c@+L)E8B4WATK0qHq@pD|)*pFTTj z^}o;Ed*<0bKm|-q%vy`}l7;_m?waMqb;4|)^T7jWLruL`ys4+n_19DHl$ z&d;Oh4O6P8&dS^k$D@5Ha86P2+fvxD_cw}jzbJn7yjsmSm3<`*dzYy3nQtqXWP0-{ zmzkwi-QuR4k@ou|&eX?o%=5MzkQawTZe-D9rB}aIM_zblvcneoayF&ZymTxyEnX)p z>N|MlpUL{6dCQfl)#pnX+`_l`*Oo)~?G{wmTlH&w&;53@Pjs2r+zwpqypx}$xU*TO zLVF%?cWJ1oqyF0Nsa>VVZ_M5=kHNc5TRcs89<{w-Y6*V19%2^K-d!Ej)~z<){Zabc ziHT4Bz}s%)euxxr(;&m~EcXiEk-L4fS4^JN1jWyUo;xB}UecU<)E`*$R5X-n|2B*L zZ)Kw8=t=PhhXe59o3%414g^pT${Zf@mAPZbDEd!>tC!Gtmg+8_YXrtZGfh*qv%N_I! z-EU4^=M1g#*G#8a?&&-VJG1%eIL1CLw)tl*a_zRc-^d`HD+W=EE zg_bB!(dL>?aQ&UaKmp#2+Q6ZVsQhaKg+UM=yR34*kT2O$6OK+)*er0MILQ^>)5`9?Jt9?9qU{Bw`S3>&N|! zl!Vm9g1PpDu{+s-Ld>d`6i!S7EGNSMIw9=Y-pcoLm1W zUk8}GeW_YfIhiL}EgFTtNT)obOuUDj6q~So&;|gZsZ!Y5!vsx> ze2V=!b=XA_{o-ri!D=p9F((dc>k(9hjJF4X9O4nAYH>7cDgWHip^H&OXp5P6{I~cNOr>UJ(L86?_ln#!BW!}xapRBL-8mtySz*QtD{pc zXRf4vThJ71E!et>9Z!L1y911*8}sf0AQ41Jqbth{ad#l6$!$jk{)Degbp_w zK!E)Y1Qd%HkHa_#@vZ}z5#C;G0xqdaR(WoYoItLJNU+dj$MTOsgWNBg=qG*Q=nr3- zx@p}~=G$o{KcHNqZ@b}&F3k|WSa;5=v=3$JG16^B`d?n4R}We}oJhgCu}w?Blf<~) znDSrQ)vQZPC~Ue}H$jh=zyJyKGLUx8^AQ}|qLRYwsw$T;u$BuynX=(nKn4R$I2r9W zW{-@Ff&%IOZ5u^lI&vN?@{wLiw@)2?y3zq(G7}3Ap6(i`uD#N?9nW+gi((m&tBvaR zgMhQ&TuI^p_htG46Fqp3XsKtpFfvRbfya^;U@Q7D)E)+Luus@c0|WLFbbY+BnmkaE zomB$bBXf)ou|W_739o_IXO8PEZ*rU*#GkSYroIB$ammV{6;{-|nCe2)h)PCLiLFp+vXSqL~mm`KiOIB?+SEcfV zEtnS~R_2(`-PmPPy7D=RZ-SMhTdAam`Mi`z!7Fe{Fkx5nO+1c-xgEH_1myk`9{wCW`&GUgsi=w+QXsaPJLp0y}3$8|KV%h+4$U*V5@_zDT zS-;Swcz|Ql)K;1HaJNY@N_0}`tEtt?8~OreooN@o1cdcCch*{diLSxDZ)ir}J`uiu zN?9(7u*NdAi98wK5CoCMr#V*NdOg^b+6XV{&KST9Nx_}Qs^3A-yuw|4tQiel4~4o#k5%6B zu7m&VVD9!%o@FG1$`w+pRKNb}>fh|{H|c(oTh~006eJ0^zycf7{j2u?@UJsZD`7>0 z#{;|DEK}t`L~WLCjBaz+Hu-yM5?&sncx(0uAa;$M);%5|L2vtBa7mmOKOZRj_QX1Xw z_xE?}#7ZPPO8_L{x=`VhrZ-#Nx(L(S>djz@=h2#cEqp`GT`V4{tCq?3+aSK}IJxhz zp$_;VsIh81bx*43Yar62{K0Ix);Gsg51#s4oTml6kXlthlTdv`IB<0CrWFE!q$u9P zCxN4Zv?BccW~0nKT?5{R+lGCSyW;YfPDU#Z7i0C*g!Bf%gQJ%8UMEa+48(^^5FMw# zO4fyY!@KgMPH}&^sabBaRg*&CT~)^KdYVqsD9-ziVR(cgUtUE0wdsu6MWLS_NSc3v zqGZeo${>b2DAjRYnwpzzDxEK^)aP-pR!R~Go*s}v504hZlN?6{FQx7#z)p;TPK-gk zv-LivRK|J@cF7N=sRB8_9;&g)B+kOE!bH*v8rLeN0kU#17Eiyl_6sK`-%DY{)n`nM zOyJIBkSSunQ;i-b8RyoW#rB-@GAO4~Vt@5nC=S07uT&VLpUy&DiOJraa!2mTF$!8X zEXGZpb#5s7sce#FM3ZCHV9k~eiu53l6?Seb**R4|O3?TrZ;w?p@RA!qlt1lE7)t7I z)D`aWV66JHBQxui`baI=EZt=4UHa*VCEjBYJ^+lvCg3?CYv_d4_s?i@2zYt5*%kG? z&zkL$M975i;(w3er556R5qr|S#O|vD}?(Wi=TW@o5EMCql=EQJH!9H zyUkux^T*O4xV$PKef!Q&W!!5^)Q72A%X@E!Qjd9KIxKabRvFQ5lO^6cB8N$;`2&{0 zla{9ityv&>?vf{pSTzOOULYojr(Rnloim@jD_x&5C?oOUrl+kU$E&zAez4_!+d`LH zpVBK8ia?j%LQLj=Zx&EAH!LM8HCvnU&5dZ;TIm&U_7vI4Fj+g>vZdNO#@aSC+d2%h zoLw=n)!=q|W-GN|`{T!4GreY7%Hm!+?qbI6sWC5ZG=Kc;{0`a9_X9RSquj@~IH-R9 zM5kTh-aPM$U5GPFSg@FX6n8k^O92V{Bh#0i;r3DV3oAw=dbs#f=1a~(`@Qa$&nE3- zmAS4QX+uB1yy{#?e%&0WL5;U%j<2^)s_%+$ruy2-9DdKIr8i%{no3H&%yP|A@MSeA z#Q7-qUWoSENytn4ziggwW( zu=9+}^@=ESGT%b^VNSH#!Z33yD(vj<#KoG+Jb~^U#Jxn{1&#*2be|t*E%t7Wbdevd zEH-E?H3LgNpE+vk7r7SLJyIPzOC7uF9kcu#+b=Uu|Dta}IzFZo(?drhwXNqh%iY7= zK^doEXD1~ir$L#sbYl9X)aiYg)6=8u?H;FR8m!|hPQw~~S1Qb3@HrQX!$N;q(&uOl zB4qr%9OmYnmPyhQG0uziT6c9#$LgI&qHaPb8W|^7XtQ$}DfbXRAuiKxNf~?im&&X0 z%6T5Dy}*MM5YFJuvju!TN2VWnr__lNOUR%bz`@B6&lZS#s~K*!f_!V4uanab*zd79 zA0F8|;a#&3K;-W7cW3T+CbLF7dNjxK&$Xo2$@*zaYoczkhoc?A+Aur&tr}N% z%T;>NG=#kB&P)MO))<+NqidHy+iq@cK+wfoDAH1fDp0TNPJi&tmDL@^WS`L?#gx2} z9k=Asyiq>vo=$P(v*YD&pw~>@={3_ddd>7ak8l~iX6n)8;F0R*A$E&fJPRRF=23aq zqkP!I>q&~#n^*Z$ujJsHJYPK&vh3wGJ+q_CJeA+rsf2j?UiMUl+tC;A9qK(#pRlD9 zQ@uq`O>@CBe>V4!URs)b+Ok{yYF@exJbEr$EvW-(9V7#$a{V%|%Bc*c26vMyH;q@l ziu<=7KI8ClaIugzrO9}+Kj_?^^|JXdYo@E-E+4&J|9HDG`MC4@c*y#AYQ8!Bzx3&U z0-pc>(5Jk-y#Gm`#)K$c3O*GXa55(BWURNGj*gD8v9XPfjgynp|Ez2Je>Xs7y@#fw zQ_gk}=bhun>e2tDI~Ao$a@)$nh zvVS2KG%9j_QpTj%lGsiRYYcLHde-W>Rq#}h_iMNR)9&>D&FJ*T{H@$KH#&Z{*B#dW zd)l=3h%z`hI6gj3cc;tC%m3M(9t|zgmS<`66F(;C?sS>9`TF(i|6DhvZSB%_-_o|} z?)1me2f91`@b7ig|A0>a{P{zp(T@Hcef##~{}FBapI?NoPwW4eKK;L_Pych^l=|=b zw7IDwnLF@b`m{j*Kj_n-*5>~)aJujx^{Iak_OCwu9uJi$r|VOR|52ZcixB>g^r;nv zu20*Vz(P%&R{vw*)EFUH)b|ho7leHo&f(O3w{yQqljgs5qKNk*5`4ohz`w5N>rP-@ z^82)RQY_UV32hmry)?mi^sD!{I9;g^t+RH4AKIus>A_7ePMHL8Pm);QSj>`iGI^dV zEY&}H|7f?NdqwkC8ra`SIJQO))NdG_NMh{ z?(GZNE-m_ufiHvFw#tQ__BRgsZ8JM({hoJ@U%f`xr*1Rp7gI&sv$fZt-A9+UqsIGg z&bFU+`SG#)8_001=Iv4IhYr?HJ%fzp^1l{xRcJl?qXu%BU&a||qmN&*3aD@|<*WBv zSlPcniQD+3dF6+wfMfT!_4ZFce~IqKYFfN|{5NoF0{mzY#2h`jesKVT+url-J9_7J zW!`!n468e{&o>#vf-YTIzs9z%hfhdYTA%syMr+iPDbX;-K|uTb$r@ako0#s#L|U>s zL;QA9!_3OAN51-TkL(K@n-v(^>BPaRVf+P?{R9CHyN)v=*kD%Zd5?zE9?4_K*?#I^Zs~Imgy9IVNpG| zi%%p~!h{F5xaCnkrt(5Jaw)A?*`w_zMTJDVK7Au#@Xk1O&k}dBwMM%vHODU`^W1!f zyXvu2vyZ|13D?v;T3>O|j4wU1%HizyIPpo3P@0L2dZ*-fx-->OfuA+|lj(_G4kK-A zh1v9>nv+J)rAGs`XJv_V!RKl!*Ra1Vh|PmEUVngmx7iruDmiYV1FKZ!>yF^ zd;X#SVr!My+@|su(xdpwmRlEY!VN15tukIIWkbeExWCQ2Qexp^j=!;wWKL1mOzKg< zE8K8h_mwXS*(BvVPY?)9S)Pp(xIbAYkZU%^f$g>|Mwhfl-7Iv|K90rFr%?R%KI(@|qt&BI^5bjA; zXAsITJ0kwk-E8znN)nglOS7l`6*zV2kY#J+-IQAT2&Ag_fEW!B z+SrFc(nVN&kQZu}gFfg=`Q?hYDi8WQw!_AKqfQ0hbS=$Lb0wYZoUEZ{&1fgs}<^h?|v-w<)1Eq!8ah!4Juqm{k^d@JmI0z9!Ko|I2 z60+4KsfX7Gy8Pm%4xD(@%$^ejmRpkBH5+qt5b;f#_^I1sHzvLK9nwq6e^9xNExV+NoJ?x?CwZsQ8u^OV|6lxM!Ujepm>DAWgMj zrd&Srp%#QwDXdj?F|9q)rFsKO7w|aQ@HCxQuda-JA36Q!GvUwSu%{2YVCTbXv~c46 z{jb?QD36CkIz+ushp1(r0U)*#S5AkhiI&XNkj$Pe@xf!?(Wz$;LSb?1I{Xby31Sl< z%JracB1veX?v3{x(o_m2EyoFVQkYe+?m#hE^DQ;auEgK<7YED6`Hu0@kLO2YSPvUE zsu_HG6+bKtd=Ad88Erd2|HzgRqW^cmiN0puhj_Q*m=4M~I+({MLjZhwakpys)#ya7 zY8*^a-Q%8IObq`+98_!!L?Ir&l^d6}$$c%vDoxaLtU+aZQgNR~rL5ZoLOH=^#2q()90L*TvRse7~8O0&U z$OM3XiD3sPqk3OP^Ump~Q4kpb@|Cjf4KhPS7*u^7dg1t0Zk5XucG#yd%t#YDI0`eb zkG?}kaBh$hia}`}vnrjuBNDa0D{xsS8Wbd&_(eWFACUMN-AHGsL=*(X2!w%z=?rx* z3i27r+abn|!?w{GsvAlmH=*7D#VH=wLJ=IGQT_>>ip#!e`U}z+vg4_fNSGg{1xPp< zjiojrz&^&LAmUu z5J2f3nu3{3g<#~a?Rax#U)&L9_5yP3yBF&VZs8xw_Pxt zpg%s>K-t&BMbQiZ@EbwCATBHL1<6nzHcvsm`!0C&?dFcSY%2~3lwbtofzxBzz&i51 za=Z#>6dPB}*JR8f4n2r1h?giJ8eo5M0O4<9UgzVfDTenWt*G8~L+0a-!_B?%*?#wseUahb_F}P?)c#PFTn#TcVEb0bcDc zw>cBeN5^n>#B&wil1Ra};K^8O4xRj|h+|(-^H@4=eatIiBKuIA;se!U*tilZQ)0NA zLz!sEp8i$!q!OQd>FbWjIn0#vLF$ha5BRp!6SM< z?bNlhkd`v7$+Ayex7RpHNuU!0ct%c2s4WtBsE?)MYL}os{}VWs4{Zs%%GnggpjCburX#|Eyhv}y>_NlU5r)Y0L1iyq zOUxt;GaQD(W5GBg;|BP~?ZX^{giLr9Nk6UHxF}cmXS!}cz-2K`UIi3$SX2zSgd;7K z`xLg7{8yrumZ$Q5x%8th?csb*xIPLR2I5sfcQc4PJKXt651d*sRM+`NF(L1w?aL}} zoVFH4+ys!308HBrWjAB@@JQ;Ob(Q2!+z%=phWgH@x za<`1}UZtdYyp1ho?55ej>Za=eC&1YDuexbkT*fK-XHr3zsPc>C<8Bzt7;?ENYkm(2 zq$W6jyLNdxWdT`ra;FX%{^07sHJOJljU2%FCpM2xsWnBUp9_PY@V}4+oYQTwG>WjT z>oOI##mG6RjN%}4A6$o(ZDTWWIo0&zUgodG#)!Q}y+LcgqQ(Hp@_>H=r?18T22Ll_ zLRHezz=CKHHEz@&1#b!{#sR(bz^RHKD9Nw^z@pYWb7s;?-b<$aTj2CFnkA)POsKrE z4u1nchVDVNDG(BYAq#i4-ROaX5>ccDJx)O9>tpUH(#HfKxF*ouNxRMbB8%dG0;lOP zuKR5e6Z1fB&T79pm|)h+)Q1si6&Z_226Em}M_yVA=EYuZ6&BRq-T}ul!m;(#y-QwC z9!}qD$lNLYqEb-yE8iV_f?hX`xSKN*-B`{R+hG`_)dag37JFS0DQf3YxmC^u!rZ|^ z)X0qa^L9Ty(SE-`cflaqzBUS=ukTw1SC zU8m0vGL+U|p>i6_=Kz8Oee;C0V@=mYgcw2pG)}9CfH=KzN^h-7MbR6luME2k1DVe( zBwWTJ^9XPPj{bJQE)tNETPH1ayQQDBvBq@^0N~m^r|I=Vt`d|Y09I>4DUC8WZmY=Y z{8Klbpzw5Czw!5Ad2sybZ4_LLG5Y5NCc`^L_tP#!m$XqXF;BWYc@kF!*mG?Et((4Z z%cd8g5f^TO!yjvpchc@ZMp*u>nQP{{*Td2}N)fZoL1Pz$ z-hNK zB=Bw~yJ0SY!GZv@DTkfk3#8nlzvW0ebxgWd`_ZlmEtvV-4w88uLfLa#xyE<`2WI-^ zAiCLhC#L6nz<9@l@t)s-9k7W3(+R`b>`8rC(g~j84bXq+4Ga-L=lIsPXH;{A9?Yz_iQ%k*L{IXUnG? z_j=r_M*=g7H6@y%t>_K_f+K>f?=sflAy_+bO_M{ar)(ST-ZO5MDRwj1@zN<$)0D=_ zRAaYp#`0LO(}O#89-Mxc&UDWza55*U4fD$9oO(LxpV(zu%|L7lL`Xw*Cg*gpP*)7p z5@7H~ObZ?jpr=eldr|ZZvnT~*JnwfRjFH|ZHy&mNshg7O=MeAbbSQILxOp#(lTYv1 zkT<8~o5+UYvo_CW(^gnoUQ(f-ADw1LTyaBMO+qaup=Tx+&QKQ4G%c9nV7_7D%)u^t zN5)0o=sF^Ve-gxxh17(hZ4el$(@a>4MM3>S`N~4M%wl!$qLy86R@`jO9ijc&{JJ}{ z7NfJ)AC^TxCo;_zPQPY|r63}k5b16VOJ)q`X-y2v^(z;N$W?KlYtNY5pw8n&^m~n@ zGBpizlW~OS!pqW?rTUds%<5t@@*BMuS@^l^etn&*lXi2WU zR>$Y=A=or0vIrYFgbg;$YRBDVt|^B*YM2?fBvEA>xzv-a>1VIvH`p~NI2$$woT-7P z%Zbd5;p|kRG==S6+J zO-NW5!=SzaAMqxmi|zZJoWADkHp|ROv{jbb%==Ok0}X|RLiNnIq8vDM-{u9(of{&7 zx{a^P-Y$A#7*lpyBYGms^mdDqNn}z{fUH^7#{m<5p>*@!3a@)H_HI1kJ2uBNca*kz zAXj^!)6nkMQrZh2z8cyp&kp|FVG4f*$uXGt!#pH=wNLh~h2(qDFOOPzbXxd*Tw&`x zpWmCAvrt{$pKbZD`FdwwR;W1(|JK3O+<50!A2#3Xtx|BK^`DwczUh=Je&t#3!Xa-@ zrf^FTJ&*yzF;br$SbTT(+;&wy(hUo~04T zc8n0QwXbP;@KyMrruyIm>wE5FY~}*G>th<$S2c)@Z0HyJD_M(X#}34Y4ot!iU)(qp zdvO@A`PNkH>vQ3+cE`Trw!Rwme;pG3c2Vcs@ZcxStxtYy`%lev!)|N&Sg;Ai%V`aM z^SgS$-=H4-Sf{ELc=wT&H2WRbSZjIgd&-MLqMW>r0E>^#kKRAcuD5@vpZR|858*uQ zXL;54oW}iXfdiH~aQ)uRnp+SjYJ@3)WE6n?RQu`eHBdQO;~MKQ9lNqbQzH*`||>Qiyc_(UWd z5VS>|+BEp9PemM92-->Pwhdkj4+ZrZgQ}fbRVUw=m8eC1-17TnAV(~+p&G%&=&H#NLiBSB-g1n|AdXACn&Yizzr?L_9x z7vHC)wv9gZ+{!-jHQq03otM7Sf@|`_h376u9E42w#<8;hp`LBqc#CEIr!KgR3nL)P@u7Gv1BgU^P4lu)15;MZb_+HqyN z=Zq!qw|+5}Zkau2BHMlN#RNad7GbI|uC#BeG-DHCrm_^dZ>G9=Gs67TZtK3e`u=Q$ zh32n=eG3AFJ(8%6Qa&K+veNabr9My8fu*5v9$lZd|E{+(P47~o2Tl(Utc?Q~*=(#> z+1V{W7~8Vnu{;(WHD~IZ6KHofu>wyVc(PH5=qcn(|kY*A3hA4n8^q z1QIDV%I$_Z-f;Y^OUs;{44M~kTMTGiIq&2muL_WTD{S+qW@NoER$x&%ln^~*n{VUs zK@Y!%_|bdZHS%&y=Io+%8&EJ=u$!d1_+(Z?+#?gI;{n0rSBlLK#T(t_4qiIHd3G33 zlvW=>>wsuR7kFNqIzLqY?a9s;rK=(MwYxbdxa01*uHswb3>v!LXL*Ut)fOtCN9y0b7>{a!rFrAY|iHibchFmODUIg?A} zv-nQ;hDVcD`adR>Olb@n(5X=O)( z;nzNuomJ4m>W*k9%?{&muvwTj0Skw8|Ut3?lu!2 z;|*@pi1>INE?aSWmEAm>g{Pe8DR!dchMJ})2b_}v3DA0aAj%@nHRPmRu9ab3K!83% zi=YukeEWINQ;j4n-acT)I7n9{^$?R4*|yPM9q~yn-(S6{d}owa=xZ}Ov29-NYgTTf zDE5L30P0hgL^@A>M0Gc>lgMySi7$nuknxG1Gop>H#c7{kC>T%0VWEd`MMT`0JK;CT z93w$fVR|gtIJh@diMx-u%@Vzlu@jkf^^{;$MV){5)6ZeW4+cp0s}1Pc)Ag*AT*>Wz z;WwLI0ytaiC;-!BDv02gwHGPMmT$oC|GgE$*U>L~P7uOO!5yE(`vu8%(GSc$X>^}D zAX(7d75H5nb&3=(-BeW2a3ZY%MoobX{1_n)p?E6jv=$1)S?V@%u;b`eB<`iS6fnR} zkr=KPeIA!l>B+{b2L+c~SpfD*8~{aH+no#$$~h{-$S&au8S~Fy6&d#@<0WwbiW<*x zkx&2PM)Zv-LED&d)g*~9ceKM(0GgJR{A%kREBclk7u;sVbd?k1LO-6duYWGMa>2Dq zV-t*1Bgh2hPNVSc!l3U%W}4wn*KOQzZFmBRq=tPDE(byngCh)tGZ3*ufXK**q9g#I z+^E0+g=!XLNd{$8YxcO2;!ei$j*;5k^PHhDx32j<*(7x(TA{vTt$bzxn@*q6gHX>0 z@F5(0_VG+AT!9p>hdL1Y{#pgD9=Dsp__eEL-^4g{*LF1DqFti37$&w{IL9AYm+&ouK!}5$$iSVr zY9-)GZ2|r{`}Q1o9bEb2nb^lu+~(!GC-3r|?|Lpyj!e}CAe;)rF7J^a+!8vm+rbw4 z@?;<-UMw=%|Kf+>PXU#ea4k53nV!sUT=w3XvAZKQr3NkZkDn3vH<0>5zS&-`MUjNp zrv*8iIFsFee{4>=KMdg~cm_Ndn%OhGd-n4FD~kx8=~IQnfida+L|#hQJVCLQ>ud3? z)4&~SbaVSf1;**3mMXrywz@dS05u^l30FuiLDe3ccswtACE<1BVL@-oi){7h+exC1 zR7PL@=No4rxA6LLaf_$OTlg$o#F^mq2qX?%0sJsa+yKC;(VSS4KlDooCU>>48u;G2 zaxDA8hw^2ysyZ3?qM6;to#HVi4P{EbdwYV|@7t&EUb1XGLEKN2CHEl)+4CpU>NFXy zoHdKu&{s@H)J+K=BXz?T&7+Ga2cGc?62wTfqIS&12$9T!cA?d+qohAXw7Z0jfnz? z2M9WqiWPt83qNh{6L&rfOCFf1_n(n5Z-TE}x@94*gbkEILsDHg)CQKsKWrxg2=WbZ zn~88L;|#^PC3RP^?R}ueXtu)L`wvICy36=d_r_rF$%jarfcn!daC-H0aR~~VY!IE5LhUudp=1(gmypd#c;sCeE8w%# zaB`-@AORpAkhsvL&>n+#J5!ix)XKoxLaUx zm8_!n7?WYH5}nl~{Ys}%NHPOV}q0?OfX*7TM@JYEqI5DkaF5_#dMlO%Xc zhZo`QCxeq7I?~YrH4@aT&GV>g>69j1QQC6 zt(7?OiBgw&8Y67FY83S=3-q+_4VP$Vd@+REVVmf8i1PR0{&i&|PrEK1=#&`A0Nw)~*j4w#*G1gQ@H@IolM0%?4}Z`n-od_ zg_E)U2_+4|J-7_^qmA1SFqUNUW~D?Uw1;TZ%3n2p@rLk9r3Q7m&)!;f0O-AJ!}w*p z#0#6izaB@EoQ%f-&EN5^Zg7Z{eo_Y4I}k_9xqR!$(IADiomuhg(}acc@g8|N zHXPkBILP@?xS6 zrS`-nb8iD2V=z>w1$bqg&T3t@<3++GMG5i9HloPbq{ued#Sp_YVezt96M#v4WaA84 ze11{T^67>s1B}rR5BKzgkL)1fdU6bH=u^7MZrd=|?=V-YCI1mjK(rk8^jWPJ?;q$S z(DpoNk?Fli*GI$YQgjxj^3?NRPyRHIi{4ND;85=8mP|is@iT;b6O%d5;wpx$$`LX& zJ$b1#X%u%E^br;0lAB~0_e79W<7o+j#Aojz)| z$(h-emO3FbB|1E?yF7E+dx~(mW<{du(67VnNb~!}j4wAk+=phz1E(^d%(VYT+68BU zR*F}+1g1fAH5B?(o3zvL+{jR!rn~h)P$BWqRs}Twt%}Q5bY4MzUM~sjV>{1v(XJ}n z?rq|{tJ(a+{`r^D-6ldps{Ywd~IgvqWe#x%YBMIonJ5zg$YS z?`^ifSjuwg+4O~H+_BGI3NO4=K6*(JB#~b;$CWB4$YdsJkdXc)O=r?j4(VDiGcBba zmo_(krJf|)NiE$YH9RF{W!mMyX0J#r`D8&qGV?IlVm*h# z;GEQpwu^r3(Nj=k*s=1tg;M97;+pGbMrXg1&Q@tGvVj(WB+e2(#J!}mN`f2}_h-vM zgwUwf^=_nR0Fgyh}8raGbmA*xAI}qqQ z1gH13-HJ$cXg_53@aLfG(~)4OQDx+yh7;e#-qwypO0Uzzv*qy*P`?|?3i6JMAZNNh zolat%5@ltVah`K_p4YfO6THHjV?`}>R=McBc(`n5JXO)_y!uS$B4mk1KiN5XFKJU~ zbcNkz{s=Q|thg2I66ar^nQht-wYt?i!jNH#Dqmga%e?s$0h(Q1tx3w6Y~F;eC0x#P z&+Z-jodTLP+Sgdjx^f2)^J2EWZinihqgni=q`6;W+ zdRki&Ae#!1)Rw&0YZrRGyZ=Svmq+7RV0 z9E!RnKC&nQPaUiGc-#5v`k04I8L#YDgxsH31IW!RPEUnCo_57I2qp8)R)@_@KhKk^ z+^QiRkP3M2y4RxF>Fwu`-v=2nQAmtL}+eu$UHWiP`Kaig*= zg?nBmS8%4!w`87sntz=$`{Ol&^tSxUVLfv~KXO z%JF{8o*y9L>Qq*X{^LE0o;(F}ao6ddm^=qlk1+S$RioKR-C|7j^nfJ9J5%a zHyHG^Am1d1(3HIVj+|m*kZ59{6xmlSDOjmrTZ5*hHmt7m$kO`S)u6;!pZF`$bB4yx z%`Lt;I(#rP-gESs3lBXE3Z{BE{NcJs#(3&RdNhz&dzee(tpa|f7$E5%cicsa{lja zqAsqSy>c}!?kagJHi6zmz49g@EDy(!haX4w873{T3;WH&Qu2{CMN#NKI#+NljpSQS=!?AU#&X*^y>&+t1i(t|E-d` z^@{d>i}relw!6DU+x$nX{;j0`C#`z$Z(8-&;h+DNNR8g#Ss8C{TzgE0p!iKYnl=Vg zSfyMhI+`~}vxQB{OgkUG9xqS~T%G7_dHbSVC!OD{tM%PXo%Q|yjlKI0YU=$LeZLYQ zBtRq-=_T}{^e&drivj@zQF`wkluqa!>Ai&B6lv0>C{h# zvTAm=9<2?gUNIf*Z2P)3R&u*g^F{l~?o6ZO$I%xZrw7Zg;x1UVx;p<4Bh~+!NUbY% z@29u>CsMVGr2h{h)xNUmKS!!n{~D><^Z&CM{6nOAgJS5DdZ)%E7m!Fje7P&oRGy<nJ1Zjfo*4SJ|E!^2eU^*wgF3v?e=Vwy>^jfsyJB%g?f3192a3?jD>PX`CyS zb^reL-4Hly)=v19FQo9bg9W%nTo1`Pz{wt&e5IjlgE5Q+Wc^$u%{Zs&h}JD*9m79F;t&!Nogw!-a{OTtR-h$Hy}~j3}wHz9x^R`PoXJVE{;jWMvZKVGMBeam^&d>e`1XGmQ8;N zGBL*5=>c`VT_epGO%A%@Rm_vY?${^qEuEPbSe7e=NR1KZrWCc;{X?YE-;Nyi_)Dac+uRXl_xwwwGSVyN7X3q{DuG1m zF@^C~!-hNyIH8!u!)z+gT>2y82J6z(G|yve%CgHBT5Rf6xi(l%W#Ovp(9h4p?@w?* z#w$^e)ZKFi2sb3|(~l{+jHgBA+1%v%fsGYCMvrg~N|5~+4yQRT8Cu;GMk16#(zP>z z%az`$$6|QtyKc&_a>x+iB$C>lHZr9FBni=98T*^>6W8>xw=RO#k{OvRUYLUNaWSuN)?=l3dGnW_PoQM9cBwOA$pprjHG^60IQplEQCU!Spp^=1sz- zhPMIb5>3fSJ6;0%F};5Aa`$#94L0M+WmWUn(ng_+k}Vzk`>wm_g}Ij#CG%<&>Z>`$ zt<7RhW_yBD+skm-x*~+q_g?baF+xe+VhaE7^CCO;1F<@aMdz~l68Ml<`sif>R(uFw zO1)8oyH$s1n(Ndj|BvUNTe>eK=5TSc>IapXoOS#B0khGv*VZAIG!NxaUcwPf+i3Vr zTqyJL^5WOx$pT94Z8?G5_}g|p1groAeiIL&KZG){_0}O(-@< zBwoG}Z<%I6$kGZCCG@k8>1!i@-sN5UXmQt+*nh?x(^n5MT;6Mb{Q^#ZHEwA*$za?N z{Y@V(FtGsWfsyJw07j~HF`~EEs2n!`M5?xyl<^d!6m}Y8L`?Ng@m3rDMqa-c#yJ)14P4InK&h zH#b`lq0o8bv*)v)i$n;q7ljhDpKVC}OA3-A3M-XvKe{Go^s~qi0{}#I0PrI)d0cjp zh5+3$9`_yq#^kpe6NQEuL?U^vo0BD&T^(L_iMj%qBV2()O@xs}3i-)Fd#fU;j``Pd zXG?~G){u);&muLiF4`|I4+xGD9tUigcAdR@9K@_!^C0%yqR?|Z268w7XnyxM!UI4~ z4-&uZ4Lt;k-Tay{5C?F#>^oZ#08nFXzCVOCRyeS-lR$aBivW;w1&GHG{mc4mI*=}6 z5+X3YaU)%m2fqzz!IA=a@3Kb}MPmT@VKCI3%;ePnv6P{-o>%}59*c)3Vol;NBfJ4( zr6hveb-wwE4o|!_hb5ffER#tRdyeAB%E2LLF{31LfRU_y@hcWawcu?4 zfFy1kKrY8{+X3Gyk+0GIL@};{a3BwjT)>hYa>te$gw5e%amBG(1F_<-5wvGvHzoC` zCg9!~1Q;~T-p<6m(&;T{;Ty5(3B{GvUq(`@)SXQS~Q*JbrCP7Alh!HsnWG?+RJA>4^$rTD#|6 zsvh>0I3Woh_>Dln4(=`N@a++p0(;PUkqL}JRB6D8?Op2cuu;eY`aMCrm)U}{P@$A+N0*ymh{GrrxYc|dM>_1$p z8(FCtN$Fuc2gWBlRkP|WRVT7wsZVn6jNmh(@C$u}nhKqn4q34q`$cHsRH=efzDzK3R66XM)JJ*6R9%s6%%8M`Tj<#WvzZRY_3gp!L(qcs*Sfw zH(34#e~8V#GX{&tnk-DF6jh*Rg^kCP$XY=hbQw~L7EG0}inA|>lql^jQ4cUHRh@&W zWShT=eo*=_*sqtZ34j>1@bvf=Ra6uaXp`<_@qqDu!5~{h#p7DIBYMZ?IR>EVVbh}L zHL(XH)o=Ob@KVrAy+@p!^v136yJX8N0~{KWh$7Yi2z7f1J$m5zVdb~V(pr6QLn&_0 zE|XP&U@@AY&CQeOxb&kVSe;@mO<(iUbS6&*+!Gxs-Ag@-%|hDKLLxjv-<9w9U` z`ITxL<6OtWF=mhA0S_5#y%SmkpSv})=t!YQWMaz@b~ln$o!gr{DeY;`6k4D0?mPqL zbzi;_*BMNMvXMZ9flcYZg{q&Qsw1{F)pixb!kRW62?9ha3U(79#DG;M8gaExijnh0WsW{| zNJsH~k`E_=MB>PH3;|0IwA0Kpe52{k+Ol)tC1n_81FSz!P1(Rs@SvH{Lq$pO#JxhCG(YRy>piLm*-6GlM59PqLE4 z_F6gCpr4dmdW#1DeG(((5#Iw3 z3fX#5t3Q#d`@tGJQbi#wz&58r{fk+#%33D}VXC-qESUs6!?9HK~L!lmib@X}04u zBN;d(Gpeq3zM^n1fAYcNq#QtK$~vw8b}3e}s+FOtn?9?!k`(yw>hc0pZWawx$<1^M1Zcis;VcTa-H2op~*6MN!_ zr!*EH3M0@LQgbmA6dWgk6B%Tiff3`_>DRjp&IF4fuQ8vnIH$1~GqxyT6xsKq)Fou* zX+YcWeYW$bGv>wYklz$Z`8or);|T~531iE>!*JwpIC5#(tor%NQwoH&+8-+w@cdqk zrSDSNOK{@2zCzBjLiKq*^hJM9AYHt`LJjRQ;nGJQeO<}X3F4)RksGUn{<6IsdVQP| z_pf|Nr(VrWTWM-)Uecd5|Fkx)B4eR6++siM>%R8A#zbg!!hdLnt}XM|K84utUc}OC zg2tB)S@M_8^%O@bGOh2ODmPmswmVtn3Vjt#iV?T3U8b$2lNp_;v0GMipT5=Aqq~ul z)3(WQ;eJ2MyYMKikcDl#O?}&%rQG9pPZ`afJBbg3pRdMsZncQt-hAbQ|Gk|p_!0;h zEhXFu+t;eN_M%`k`(3#4+EYzUy-(wBKgqj{+6YLrw7V1>tG2m}3Ye_VMZlz1aQn#rcD*!tf=RM2Wq=pmhsg%CXu#&713|##2?XSF1-~w$53iM_g7eQD#hR zZhM$FFNs`w5_jcN)TrR+gG<+z^fX`uDom?cVJg zYst9>Q@eh==Iwgm(EUv(=tSv=?Nn6U|J|v5-f@!0sY19a3HFJcyHNCjD(mAD&u$ER zR3VubWuhP|l=WM{#n*UK_QxMJ62a+QmiLMt-#ZgH3;TFBvkpbG%E^nJ0qbX(-RO#7 zb=mHP>+V8A=%1&lr%?w#B_C@D;r~FXj_C7i2ZP*ALWpG&5K8@TL~8J_KapzTuh$o$ zfTJ5E?=O_PZu%EW#lwv72>QeG_uan^Sueiax)>)Hd?v&ur;8B;p;X{siB!QmbZlUo z3UK}hk-82y3ss2x8>t?ygo{r$JC9HO&xusIh)pAzrwmWT)kd!V8jh-1LFzA0n08h|cDH`XsfG z$?QKws#f_OUy(Iu|L5*v3ukU?Z)2}K<~DBkvP*w#_~m5b50P4LO`vz(-m#T2z!hne6|0B2`1l?Wm`3=zXGRV43c%-yn#OXw=nC zI1WwpJ2|;$7IyiefrUsr=H6XjXAG65ApGt92PNtHPe>U6vss(M{D+1Qgupb_GWl}) zJq9up-z0K~-cm3A5^%=LRX;*l{`Jkhu@pikNY-Yyj&NklWfo4@|%>_eSO~peo$F)|$ zQOBo~g!3)+kFLl%iM=b(aGsq}HoVhf9{2Nk+sAJWpQjGL-Er-BzCK^qO-kD7dWD#E z*sT}Elh+#AV)&!`UF}<&*2&uX>#djU{Q|n)-qTfU84_VV)@EA;=uQ_(8G~f9$ zlQ0nDcP0*ooie)s7#_8QzxI!?H}l zRPC*uvUo9DS2un%;EAKLF` zDFpGv^9vSDlH)-BntmDXj29WdsrU))snwSszKAM-XdXi+8H! z9(U{KQ%6BjV`jADaMRBi)mH^rH^x`ykyjJ3uQ_mXm$SD+Nggdnn2rhhxvv+|?Y=@l z4Emt`ZV9}E%Ygm&xD?!i+LlFVf<03SH9K7Hie(b%&2L9Rs3%q$*IH7XoCxSlljNy8 z>tao>hS7DIy=HqnMq;Bn_E>W-*TsXYfHAg#TRMPR!W#G@B%dk}s=q1%^AAYeP`7@A2SL>EE<;M{$@EYm za1%I8!bo0*@C#>rl<0J69-=<`DtV5Kug#rO@c6P9w4@N|fw)klY3NZ=+Y(}AdMn?Z z_6^9)xWV|qAq#m+W<;!66^BNYHv=|P)2_*(B_1Rb3P`RM%;6)2D(k`ojzj6kiWaV# zifZ4KX>>=97m4fgzj?M)N&}VdVKlWMbDUh|ne4N>9Sd%}fOB-FNj7B6`Kbo)*D^>f z_P|_vNR5X9LXoiu30~WR%uDG!ePW+zn#W>oui9QP_Etj4Vb>;m%ucla?DlYez&UTi zsCQOjyiDM3&2k(r?+-*<-7bUnwCu+p*XvZ4ya-@qL0_MRy z(nl`|i&sjN#iHfnZSJnU$SqP9szeiU4zJ>V)z?^5a3{1qSO=Qj5NZNuMzMrFR6<9J zZdc?(GG;(SwKc+}oblds(fE6g0X0fwC<_-=g^tU0b&yy#jm(8&fB-J?@O@dbmf1Ad zhZ#lh=PQfES?Sq9YFm;|AV^0#N&3ADjnyD>+K-ulNc82-NV`xUqyzeHgz@(Xh4inl z*-oEQ0m3~Fj~oFXZ(Vl6?~2}_Gn#7S(_hr1$7@0wJJO>^EfOREU{=hD#g|JLgli$& zPZBJK^~T7?1zSsd6D)AF+f&WLj~HxP{QZQ4YGifj6%yW4@Jq=Mo|Re(=@EMsd-U{1CJjI{6Yp}}9nf^M zp<4bhV&}^&C`y7hDnj)D0mIu#`cY$mPmi-bdn|+yO)c*3S(9}Rr&?{Ezi?W?`OA)X2u{M( z-u_70gPM&`-Q2ljSHIA%^Mi^Q=W@G0&na{#k_Kvr;Z;c7_w=X9E9%f%oElKr4SFui)Vv49*DNI4F0Q3XF3_ z08qToQAzB304h8~M=s1qxLTX=xc{t#{qa!!nhEp1%a4U;FEC@X+q4If%pW_Cq^k4D zsLF3Qt=^I-`&mniH1#njhFVAHq;trjHH{eCrpDi~_2|U9<&|0yx6K-Z_oB4Ifjl~K z+s#;8`qcanyR}4+s~0`=O)i|XHnxso?|dM&)pP53K{rRu{iVQ5Mm##ZYYyLZ5^Rnw zNM!-Ht&^X<)sfRZQsc-n?Rgw&z)PCWr@puKO&@l3htrrAMgxRehBo65spjze_19On zGQJCwc0?N@+9WyBKP`hvDv-R|q&6Ro@Wf=PURR^y-^vXs_3s?cxeoP=5vm43NFq+@ z(vSx*2RalUO7@|VYO%5fA}kg;D_w8-VgY_V$uq`6_-P7%o1rky;{ze2vX&*hmSnjO zxGrD-mx!isvEWE=qr`Df)GrK*$D=xP@jb71(*EcCy17J#>fKL8fw`aVCVQa6~s|->&0>|Sv7VYy;E_w zqD5dPe1Pe0TYRjPx;TvO72>MX&3Dqzx!3ahvae6p%5RL>eI-TocBXCk;-S{#lZm8xUVTAMfeCF0SM#dN?M>kxKtexWv`eE z4xH*;#oZrqcbu-hTvjYgy?I0s|JEL+Ck?#{4KuBbbi%RD$y~j6uKbc-05}ZCrbJ?+ zZ@f-bAi=-NNUFEKB4dcV0yoIdCKXIxC0ml`fX&y-i#58iUtg^2&8&-S3DoV0!FIyYY zW{0aMkwy^1YauuszE8H?iVi+5zA+xt=P$0Yr#fJn@G18W9`!oI4kkPk!W$jRzYTrA z2Nj|l5&Rx%68)s6vsz*zeX}<`t(upsPgUm#p=Ok++on3>Go0bZXk7_GCP6NYvm#lm zdB%NTOYG%20I-n`c12O{2=-78I^M~xZLRZn^e#AxJxj zaZltaZm6KL8jMa&v)DORLpd<~KRe$Epdu#@6~8rcMyhqqIn~^@lv-$tDPSC1MQLTC zwXCtv?9B#_K511L#{6i1W(o&`)dCx6O)eM zb3~lP$J~A~arO9J`TOxTtghn8ge=A6F=Vn9BvMZp^|&tS=6C5EPhRnz%)?LW)!e<$ zOl7#pW~7v3FrvpltG9KgH;>Xc`-QT+QDCCSU~xkqBvP|+`q@ePwt6UsvR3QYiH=XF zqV1=ekEUj3^j!q#-O_VC%5puK?=ezLUmuyOQ2R@yGT-o7{BJ~R;EQ_!fysg1)0HdJ zLC(p+&-Fu?XD(M|{Q&6VhsbddgYdwqr8)9Ntii>v%9*eP18UzaW$y$HIodmTjs5R4 z@skEr^#-Rt)MqptxsshHk>N!%8CkQLNGg-rHom9y`T65VS<|`J`s-pS7kpC@ zQBtw@ES`wM+MY&pjL>d{rb>_0w(5b#cbc(wTt&iM)&5*V-2>Y*nrP!W#+7sn8N((G z!{^5HiFAey`N@UjG|&DLsn0gTt^DT&cMOD93}1jmsuETA1|=cV2&_{3m>>6Q7@>T% z`vVt5?;8zH8gjqj9m-z_LPmIhy+6FaFj5z>{6IPRWT9^o`Ho%egN8Bl&!HACT)y7o ztIOm>@pU9P;}08TDGl(SjmGbOHN{ufU%cN~^bxphiFpCZi-uHURsv^vo@an2>V}39 ziL?o5qLN)%*p`^p#4p8{-7JJ5R??j2!My8!nq9!f`32OJ9kmW=LrWlEzP& zr%R|aHmXg-1?KWOGv+2u10n_*Bjf@7X)Rq-bI1}DG*K}(Ea-b6z(*ow8e;u^gS>+_5%_}olqJ9D$KSFXPLB!C~dianP^*y z9W-a=W@0J-L!@>fR%1XSRhf|^;}4Pg^u9%z_o{ZtDtE?eagoK9{(DzPExZ>k1UL1C zep}cgEk$7ZqJoz9Z&>2Qx%DJWEH9iarD!;$6W54xEU#&@$aby09nI%QG;u0 z+ke))f7TZNtgruBKk{<(0pUqcXbrNwH3JLwf&d1#lNgA-8}wW9}ix0{r}sw zDeOPjrT{=jMn*+N#lXPupGi~^Z&QA6Qw~Q{$%ke<-e&y17CbJN;!YN_o|Y0$<^m7R zSrio&|3OlXjg9RsRIIG592^|}iBJ6=xhmci?4W0Ap(OiX_NQQK8X4>y9%LI9{OEs7 zO;7D?Ph8!=+7ygZnL7yST8aKGIE8UOC*W)+;(CGLZzdFb4hL&f=`Kp48bUBQ<*(uY zr#TgUDy~$6P-?hjT5(yWnNq)##%Fxr=w$wr{uJtQ(C^#8=Cs(p-l zL#zfv?02Vl9EYy>j!XQH{b|Cx8{r`~kvQk*FsJYk&k$T-Oql1~3!j8ph4eYqoB{c? zPuQwW{pL?59s3q-$2KM3&7Qr#eLnAUJm<1E>bE=U^J&cgVEo~?dH3Io-sg*cKW4ml z7oCT8Z5Kbe%xu`d{Ndbx>^Sk&WpU4K`isZby35{%$J(yP-j3(yrrYtV*Ncc54aJo0V&c*S}@K7@eHh*OL@!?AMc3xvSPw zZa1)%JjN>XZKR2JVg5p>P(lQ+a4+E{>7Je}s|@?iY`gNR%^atcDqI%Q4Cu-8nzG-@ z_t~u4DhT+705VNN`D}8-X&mf|Tt!h^3|F`(I@FmWt6)+l|?LZ zJLMIWaaS8_s^|C#<0bvDq=;emICO*8mD}i4oa|8RdLrrPww3ZLE^X_@Z(TZex;k9i zmi-)EuTnH=Bc<;DPD4t~HYM*jFOHHv>-@xhUfXsg82|YdvfJ@lOa1jEWhtn+(^HIq zI4TYu63!%w=FD{ZGQ?Z)BO31+pDl(G z1QMnYqf>{Czb#sB6+Idf?YJ;I)?TcHNR4@~Ir~ib%_HHg_KxR|Virq_dRTC(@*XT2 zthK%q@iigtQ>xx;FV`^yp=X#e z#C|g^tHNddUkY5iZA>nC zT9*0v$C-Fb*Te6lsRu!yMBW9AoPWG14f?g;QMmb~qPh4)NZ~CN>rX;E*=*wxoKqvq zw|-g-jAb-r8n+A)>$?s-5cZ~=-4-phZO@Xt zXda0nl%`E-+J@`~kpSN<1BZjyhEg^GE)SJ!ejaRmebEBQ>HgG}hAgYw8~wtP!`Rw8 z+3v$uaM~H%z#qfqKw% zi?cXV#c57dZ7`{VlB;Uvj)O{Q?bDpO?MT`db8NHBXNIvs{B7MInqjEt)~cPw^k=>= z3w3NuIOVQfA82d4B@U&Gz$&sa6~R?7p%lqz7XFbr6w-o>abYG>JR>>&rC{4y03N6Ke1B^=VDcVZ+mv4KA4D%OC2NNghPmVsaJ^Q zXQ0&UbZx ziPnzdIbSAG`2Lc9bc~2?8w1Cp3AtP<-V&?yMNX?mB2_Wa%USH;2ESa8ULC33Aa!y) z*^#}PlLd86)@zK9d%SIcXzVw#jtTnL06#81$*hVB+L{Wx+Nl9!5^3O$Q)KTt3`0Au zTwIFbRb;!w7RA182DjzyV|nXf8692EIHpR3&_olMsFpB{nMLyHU_u!=35v26J+d1g zNlP@&j<{u9$={FPk~fgbZhvvxj>_U)m{}Fu!VQW?mpw?4y7;#YzS_JXj;IMwXTXoS z@#z0DP%oUaO2WUQ!eI%oNf%QjM=NsB97TdMY`=fxGfVOm9hbWt^wPY&BoDQbPEHDp zle{pb-(H-971FYcu>M&^##=M;j+p^XNzSZ&Cp%f6IX{`_vC6;9b;U|2D!HG_%ZuP- z+`$B`SeXboj0wfD1H{si?N6B`RC{`f`5qFYe~&e(iHD*L#^k8B$D*S>BqyF;oG%C( z9ELFRa@2LD!?@Kk>y@L)EmR-#UW@!DO7QFipFGc~RD%wB!@m_6u05|tvfsr~ah9-t zcufRgaY$f!lJ@?OC{Gbwbaxu#03HBbl08RmuwT-2dr8mozNz9@2xa&T6csrdU2OWn zyKt9?+W=4Ed8L_QxDGPnTQsPe`Ec=(tpD8f(zk?H#-A00WD1XN&>C6c0ncI#kJ$*) zAshHVe_ti)LsW#6_yzA|Z)`0`zrtQqpcGg28sw_<>4ZK@{tau8BC6ZD|LciuNa(rUcy6mf2S7q@nlrIaUnN3|*y z7I{o5oJpD)-r^$LdXWiMdGbV@b-kkO+dAg_*^9At@D-^bX4|0cd&DU`&Jl7*{YN~+ zNq_OtI>@VgJdiOruhlj??#alP?%c|unh=%KePb22Zbi;0_f{P zh?4>)#t`KL$QB@Q+SVbrhX;S?O7|Msjs*w~LsOOA1-^>gDetqBKH?TqZe#hkD2=-3a=Wtlrj1UVP9LpEQnsB$d1zjx~_cQH{`#j%X~6@c*lh zKIK7`m;vDZo(CKuj4+akW#nL8fW&r)GB1h21v?1?4N1O~_dE}(9d8bxNH`22)MjC? zY=L6*-2pT2{7Q+p#6Z4V^Z>@3vmxyLmg~Y{m_KFsuYUGl55ukx2LA98O~6`Q1O5n> z4_oi@W}{Z<1v8K{s%KaWd0TG6;`?y&g+>T;!{8&64{GIJhwiH0Fq6 zgyE2gC_}jL6pik1kH?P-Z|D^>l5soLDQWELM5MK4%AIX@{-G2>MCwBxx;8B2GTOap zBX)1wADr0pRwWLS9RPPHg_=RArx0NNN^BMgEs8o;^(QzpH&TOWv;+`Td0)$lgZH{J zymzSd@lkIT9XuB0-qDZlvAK3g=m{VSVGg2*I}EQ3J6@6f@kY@;TuD&DOo`5u)Q8k* zzEz_B_9={+DLB5YBz(dnRp0d)-vMC~rez0R85=@59$GC!}}?S}lWS z5D6bh+pKS=eHaZY14i+c)%Z$0)0Q$PleOS$yrxRa9j+Rzm?r8rSm7+ z;(}3#L@Y5DAiRgpN;FeOdKCs*`#|fFV>ps4Sg1%3=~lC*Pxduu+hX48;;WyEMRxKX zkJ!u*009QV1dz1h{GIqv7iu>2>Tv|_q*ZD>1ZHK=9zA|GfLJ*63;mABjt(Sk3GwkD z9rR5n?JXirF7*oy5ukivMgtTq7r{dkxbMj%3KKsp&-cP)t=%hSO4gxoLjF2+9!3*z zUf`gWSfs#@#7 z16CEJFtb1gRH)6hho+}q`S+?B-{g7n#rav3wezERc>z4G!uLn8l>&lhnsDPe(Zjl+ zcVX5YdZ;-7c|wewOG3U7LxE2hoZv9`Ivp~JVrL~pB0xOaPB6y*^tHlMpQA9U2Pi+f zvIXI4NOfMm8*m_vsz(6a(Rn{*NNAV6C)^+~P!R?2WYMv1YEL@b)4Q%^GT*PK&*owZ z4JE8gYRj>bzc1EqdZBDO`=3bR!W-BB(U8x>Bb4_5!HoNFtfL zrjZ&e#U|Szk8MbBYvAih3z72&{HjT}3W21ij_SPMbpC`Cxg;_uvup?q{k$F?NUO?T z49>7m!V`#)5a9yy2g=``#eSd#XV^zE%0BshT3?}uur(v>HfXr39Mt-}VsVH~Hei9`fGXu49O*x!rt?18ECOF{%ycn>&y^f$7|j z%I+(@AF*8V2nLHeg!@Y(v^a7~W`lymkR3?`oWca1Nd+I9$to`DOeNe57RR0{$9Cp6 zcIIt%j>+ne|16I3r6u0QS+rG`{A|)^AThV$Ay-9lN8#>JY!(*Ze~(LLBm_y=)Sm>(C?ZdE{GKgEPMXfx zA*py0ln;QOy|x7N-(eJT8b9dn-+z?@UbFBfm6WjV>RSxvZ8I6-m5;|!9PQj|SG)8f z_<)xwPd`nO_xc?ag_BIM8C-LjK%nExN&-9_iDx5d*DnZ(Ol3`K1p+=aw2%XA7^QC?>y4XX*vMp-a#XcAg|7i{p4<9Qb0`$xAe} zuF5ZgV!scY{7W{ud^qlEOYZp0$B7BgdI@|y7n5^b@%7{Yfj}z0IW)x#Q}P%;fwqlj z3YXaXt8Zsfa(eWsHH&ktS%FfuPg}U@6IWH|&o-?uB~L~qP@gr)WWUm_&sVzqEB~%F zMsfhzA$HdgDe-m$lUu{~1gSWGv3M^?Ph3(;w|fFREuaP2ND##i| za;cZGO9tjrcq*_WTPt&eWr20cU?otMCul%e5F_y$eLLuuh9H&JsLHLbC7aFVQR)p5 zk&TU#4YHRTqsAMO$qOeVVkTW^v#wdC-;`D+n*y~fcd&&9sIY1Le;)0ucm zjY|6_qW3MB`_#+yl$hvSUf&7Ps``!I(~7*Chl{5nrYdcLU+*3%sr{x?)ZGa>ruORF z3kp$<(PASPx}2gsizzx4Pu9o@W`&iirjknsbyG%r~X1dPiAfx|`s-rttoU zDBDkZxu4I1f3_C>Z14Wr`SGW+OSa3c@1eIoYKr`zrTnHPCth|yHE4Qnt99PR`s+W{ zrvE{rvi@GZ^&6~BH-mp~7yka#{d@1@Z~5)t_C$Yb)9j0h<9Cb<1ZR;&#;1jI6-5`P z!K8QI9sjpaS578;dGN;z204Ge!Y}{+$y1o|i<}bZg#Zy6`O;2vUZ@rMNF?*ka60W( z#YiSzva6L?FiK^<@o*h{!AtDIrBR@mt+Sz?Az<7UPOrOpCr840sV`f1OS9mHKgq&+ zLN2yY$7fnuaV$l0^w_5M1$?KfU6`0Bg6&@$*mz@k6tVarza`pFz>bYWS zBhH%F$5TC4nwxH)em3a}{Pi0-Pg6IZ9A^JXBG2H+qCe~+q}{pm%h88HKB9a5dH28C zx6xtbiFS7+Gviao;U-<$jC{k>&o#{)KV8W3PTf{t8%?pyaleK2u%=MUS1z_(E27+Lkc)H9|v&-RzPG{}8W zW%J}eP;p5b?jLk)Z!0fl*LV}Do|YJ&qQ>G*sLSu__2koqfP)VumeDzYlV6>^jpD9fr&o1yhF!19byy$XWN-|>A8rqtH*@8vi)sR-NM&uwPMd6NR)H8`BJH?YgF6NQW)?mGrCStd)+I{8@9q8O!^L)jxXIJuUY;(T zvdp%|@3#zz5e;oSp5~L;&@)YS{sPNH!oXR%q%OX@7avFYrImTJ?>p$+ORElnrC-(* zHiwy34}CQW@ML(N%bs7w6~nwN5q4Rl-zSq;G~E5GYW{uiZ&uG_&FO*q*Gm9>O((rI zj%2ixeybK?qL%BBB|;QI^*J(xwm8nEc|AKNKxfA(oUeq0f6#7Y#wOI4D~3PC;5EI| z%EBBs!wVDYhI9-4q0LsClp5y_d4w5GbNCyKIzx7)YR=H0w#Ugcxq14HLyC+N5!GiH zLu3(zSwf5KR|enEm6rPQ%Up@r;&iLb{POI3(P(zEB#riz*&M-v>sQ|Gv-1aJ{Mb1E zI-*0HquU?S`KK#eyvYStYNo2^%4H~X!kz2Xhq~QFa0C;3oP(`!K^Mw) zN|rS!z}o|Zi9XF=kH@OED__W?LK)ACX+?!0;O20`m2{HeGs6@KeTqooC+rO5vO2;| zV_}=-W4sGr&2-(8L!i+K&|FpLsO#Y^O^+i(Eho6=W$*$?5EefLG&ROp zO__qBC3+PK@hRki%20#bFf>KN7~pCWsW!F;+8~AyUGRw;-S1(8Jx5*UYuZbu^Q8xI?f3ce7MzI!3Ej_Y#zfTFjXPW z49j$BaxsD=!hmNvif`YGn^(t9Uehgwv9t+C>OUiwh8|J@hi*yM)g!I@Qp}s;V+C^Q zI@J@%)TZoUSC%AT<_2M!9EQ9{Y4&tlt)A553=t5w)NAz=0QJNnOcaB-<@#BdT9PV) zS)mu{u;50`{XT*jf{Jz5$3c%ulsS;-STSaWC@pVNUKLQP%cA7U2YTjIRnvl@cb%ZG zc}Ozlkw$3^;Te_}cBSi_ob1{Yu!i$RxJ;!^*7locMsJi~rvXCx(j1z1=g>W??K)55 zQ=t%Pe(Pf&$ZVSspy2&hMA74}Yo$AZ0^1v&OJj&4Hw#Wh?KR7ylm-Y!i5g0WlY56y z*IJ%nOlShgwZCLE$vq5^+2qxolHHnAsdm8(@xhSe?Bmv#TH9EKQbH=AWWK1!Cj^% zZnaW-@Mg9drPNJr#>ji`ZHjhUvNsoXArCo&{vr!9_Ezz(WF@CD^b%4R7dJD{n_d>f zJjAdhK+u2DupDcjR~o~o;c6W&pI{juO7M`-N^PM6vZ#C+u$zofC3FkHF6at^dwY=L z7&6kH1E@N;Luyg=&87myM)gG7Kw}S5Sr7b62LTd3&%EJE#YgSkhKT64NRuqME8i{k zd%}Y~1eP6Rp0a_)7N$* zpe3BaVa@EO>X|18@c1I}`+GMx{W zh->DIA(cH1rZu$Hiz0gBS_%+jlH=sq4F-VaBek0eDTWI^P6U+=EVpV@G~E;)bDs6- z+?Kx>b%s*gd^s2S-aioo5aI$Ay@%>$5=NRfr=MCSsw>IHzb~&-!E$sciy0LW#!Eb- zpQ=pp&b+_Q!y?$dJg~_nYURUIO*=;ehnc(QOBG-rCZ-;q;v9 zaB+AxfWo{bCaG!2dHzO7?&M`zvFoRxvasi3I)aQ@BBB$k%et#}(Y7OpjcBfMUi+%X zHA8oM#`bRFBpIntGJw9HYOJKSCm_xNP*u*Yyv8ZeUlZg`&8~nZigpT@QZZ`hP$&`} zlIhC*@F}kU!OqO2sbq6~)pSkj&f9_1 z3qqM@Zipj{tjE^{T?U;Fh~tHt;gnfh02*9%hBl=Ow9j}ye@|`6+~{%_`N+YwX|zr56K) zUZi)G-jO08NHHKyiu7KkC@3f*Ad1SH-`=O}v(Mc3oSFCDxij~kHIwAeBx|M2`mX2m zJd65ivsIlRjKbye_Lz?i-6THx%4}XRI5$CEe4@8B!D1p%kE0k{av8f)#_p(|R?H1= zY3$`zb+y>7F^5~;Fk+BvC8^TQrg#DG^9sG1MhCs8{-T|3QCEY+_=5{NRy$v;l_H*e zYqSV1FmuS~Eduk2L|LF?Tqe2f-JmXwP#i>>u?}^2bG7xshkR$U^cMf#8UcwsRXw}=-yq7v|n z+tp@J`g4M2lRX0T6|Q+|I8KTF5`_=oU; zH3b$2qeS}$1?8jh?o|HQF-~SsH`|gopmhC~c-A*DR?FpfFsLmM zV`n>zBZ{%L9d^T1a~I?Neii+OJWuK$e#?eqV%e2VTlQeGZ zrym?EzaL@k2yOz2=YKmMdF7+|CnWw=SK=!a`3>H50eIHS{`iRN@otRiG!A30K8?PS zLHg~;x38u=D;pcfX-qYaB~5F+rP3zQmfA$T+Qc`u=bD850Lbb`N zwd-BSm+J7Vze-l9(iUgOH~UpL#jk7>l5bP#B<^SrpwK&7Z|_*?ygAYO5c-xoNe4WO z{#d88*ZDS~i*#%C?b5;9TZQN&)C2+cjPN8ql+m@<)O}*5`^{5#Dpc24Ecs`lu4}KZ zd8h8#nC{>)icS$;wn#KSjJ*7%>x7sbV@)6)NP;R)5}g(ep|$EK$;*au!G=l5WIgx* zBZ=|VHdapPRsA0)lTTK4%ZNxRyN9PgO;SqGMFfhpI-=;fM!(>ue(WS5WRdOwKiQ`K z^P?%6asA(nu&6y8?mUjm$>8#lR2=sjQJNG7nc8%+>ootsbToE43Js?goL=C_npZS2AR$Q8qIi0ypZ1iEzP^5YY zBQdL}Jgao7sl29@>Nu+!J^O@qR;}D<9nct$&(fHi{XrW|SvadrJV&C<2X>VuC7m#HU`=mfo^xjRmC;Nh2c zP9{^s#E#MPAhX+Pp7ZXl7;$mz9ocyYCIF%);X%C6O{;;7n|E!+`Y109ECSwwrWU^i z0<{(bt&!&*3$B9L%YcGG-K>SMfy9OC1^=x2rk#a|)&vLJg@?)}23(8La|y=Ei~jXM zi{oPaVZ3?RqCXcFRkWBafw+5w3wya3Olp#1ZKe-1#|dIJIF_5Mb9Vv@4Sqt9*b14H09gIcUDUl}Ya?OBR zWAy@^7f~XSuRd0zOux#X7eLimKO1kp8ez{+HzT3&F#BcRZ^y={8(i^9_kyfkx zfmP7t>bR46R_~nUWWB{y^!x;ub;_aDthRN6_1b*5Rco~Mld!d=$4hUmtycW3U(c;& z5z08m)=R|eoAsviOzVLX){f(A+gS_K>DFORHcG$O_L$6y_lR`kma8Nz49nNUWJf>O z+qBlG?h$VsOKf~o-Z(MdICa`M^V|3yy>Xtk@uPg>XY0nrz{an+jo-T)e@-_pi8q0m zIqd%+n4W$Pz~8sO0Mq|(SLy#1!ThHxy_*TMjp=I7@@?Wq^nHnTl3zXv}l(P%L z-vJkWj`$0^?4}Z`ga0#jS$)O2l0m73O63KuaXXVvEtOd}2LZeE=@N1%W1xNw`#XFo z*heAuMu4FGRPAFl9pToU;&B@i_8b!noRj$*c^UeT=Fb@H-MHwxIPAU1h_D2l-*`vp zn+D&6dDYB0?W$$dtWRc@yH@Ro?w!ZpjmPfmL!s-#!5aesn*+h`hJ!EGAD*o|?EmCF za(I9JFmz$hum2)w=*)liBy{CC{Nqm8_NTCq`{BDE!jHGYe{VkAJPQBMY$ZYFNnk58 zGc)t^^Z$d)v$N$tvz7k_RuW{M>u(~rM{s{OaKAR<&(@=N4kHdeMtpgXJ>8A`^A7iW zJK^_c{I8va%lGlW-o>BpN5B7u`?Zz!cLejl)PDZo#b5qQq5k(@g?fT+^k2S#{|`S9 z5X{#9K`{T%5KNYTMle_Z9l^}CgVOyYg1K0V;1BJEaVk;ViP(if0;!r zQ|T*JtAG(a$FN*Fqc<=P z!g$k9K-crP(%T0jZ)Deca-&2FX zJhORZ*2vWBbk5AB{&e1|VHz>lh!-V+@N(80&6LV8`7L<9IFwwuqidb8h+?fjnFgmd z;Th|@E)_=jYg3QUHgPmPBTTB687Ct*^OBP#oetK%Z$vP7|JXI((0?HzR3P|KQhQ}; zgsrwKlH|P+VSI45#v^Q)tujMFgUK-@d{)v?iuLDg#htaEE3X=QPCqqG*aS?sHROW9 z{zhTapPETn+7C=rS;FS$FLc7@R-Ow=9XhoX{?aQFWBJZEQ7I&QHs5eN?E6QOjh>6i z2GO>)K(YE;pA0L7e_dKqGM*mzbd@?PGA!bupU+Hho`8-bEGUaMVR5g1Md$=HVvC?1 z*V?O+>pe9)ikL*(dnug9qlm|zjw+}sm`zULYCo~A@x@V*x1nRCP%FO&U$8SgWA~K8 z6>naC9_sL-CFd3R#RiXZRbcl|iDjaAw}2g1qMWw7uQIl!uW)04%S1oQlrw6p1t!9) zGoE-S)RuNgZLq}WYm(dQCjE2R09p6-6s`wbWYm3I8b&rS(`Y` z6L!2uJ1Q^tmA!QJ@jE@bS8c5n_gf%#Jonu+HamnvYHYcLkpaqLv%YN4sh%zs?RChS zIA;1`O0O@eb~~yZ<>Vl@#UwH{y(~TlZ1!7Rm@JIlWAD$OF5IP6PX`<1i^Ys;IZ4C0 zFWdcN3>bEQu}FV2myPThe@azcidk;gi}OAB(Bl@LN^;yi>X3DYI?(L#;-m* ze=5a4trDj&Q%qO=0d`|gzc#|CjMu1G<4e4>P094tCNr*E4t(Ts%xT34`D$h75rh3T z@yfm#9yXfB>HIdMFoAKxg|KGT6}l<wjpZqnufnShF{icG(veBiz zP_u0PHS3OdlUJJ3SQQ?}Dal&49}b)aKd)!`t`}P$qEpW@?qZVTxCbp3otaL zk&gU%P&^+9W$4T|jXY>AZPm6`ezUy#sj-doi}i3&a)+F8*%nn4jEDt&9cEsrfUY^Z z6Z|@8EpD>eX<<@DvZNU0C}l=BTQmp~3|We?aqNlPEf3S}CHZ~4@Cu+la^TpTKm0pB z8gD$f6#v;ExIv_!^=uP*jmVDV7Cw@4l@+P5Dc>Tk?H<8&JR{3|L_f8OL#m-8(OnqI zH)~tkv7Suc zju`L^@Fw0n0t6;p)u5~*N)*=8*ryJ-nr_lZ7Q7iHSZ7CS9`}u`urbyMn+AH@A16^C zfuh3#MAwFixJBe43I!ON39QRgWZx8RA3a%fn;4Dv<4+9d*oB@LR_|5^I7n@imMwyk zlW4LES!CW&PhG_aG)0>`$dh6Bj#yUFIEG)gq@jAz6;}`kZlkA_6PrXZmCZp$MV?zuRGV3AhIg_rZ136#fH)b-1X=$liWl=etN zRbY)ih@6YiDO1G-(`SfCa5~$hsxpvW_0Yu(I2px!w2a=;`Ju>H zOYj6lLD{4tgsSe5ju=GIieS!!s@Qtu=^2Z@_7vutMm#7NTie&mk)EsXA*nNbuo@RJ zGfLci+}p|c9v3h?LaQ1N;{3Qu7e6D;2>|L;juap%>~*s>qj!%ZNu|$0G&)TQGI1tX zL#iT4GXWBXs(?zz?7Gnh5n!@0Ryu^7uQ)Y%q>IaoLu$5bz-^YFQ#pT5s_%q-x-+pr zfxI?=b6Op9@<#V^|2abZ&=cYzbnR^c;KpsSOL@ejM3C#BpM!A#;Mp6rWntt~WvfV$ zj)xkZYx`8h4KO#_MsW!|#CLKU_h##nd=Twwgz-$mJp(X{7}8NzNcRimHzFgdrh5Z^ zvR`jJJPmkQUit9XhlkHdu-TBnh80ab{)*c3ydf2e1Mz)hOZNd3D@h;erLk;922~T@00HjITh@aU&~5kJ z41!yV?^?9eqAwVf{4OVK)dw}`gL?KOzu}Dqx50f-k$XE)>c%3bA{y~9)k7wg7|RNK zX>Ryd)xc1N)UyS}a|DW(1aqgtT{?`Z&y3q|#=lfgDceMJ?HAyA3-2#U9?sFUU$TNI z8iRPD$+m$BA7XJ9uF1=oJhM1-n{6~kEi=OhaN@6rUi5Pgm|e& z^cg?CD^|QRBU|B9O!u;wDZv+FM(bmb$}R#)e$N3my|=leKj$H%c>yX6{JlDQUlnL? zBpng~ji`ZiYDi~T%gqAIfz2mc!GKOa`(X!R4`otK`L~&unM*5)g#c4`F zFIyW1lrqG#Pgf?YT1MbKsj7L10Ql%I+lFcSQXpsslUd`BB*KCiBXiPybDz|p9Y%cJ zKl&zrkL=L!(%NNCgRDf8=;--9`WP^oAxo59NuMTeRc$-b2q)z11sjppepS6R z0pq5rGm3SCBM{lty0m4}7{eU@o0;(xMf4)@c3T{n4_(PqcF<8yY=@Mq;Q z=dc3vv}J;2GAJgKBr(MvY3tt5MxTk4&rF+65KOoKL=BX5kdu$-LUs{RtR(W25E*>1 zNp(S(n*F;xy$8G2>Wb#0n_xo7z93c9>S_rUxwX!vvcwys6sFo(HYACkM)QVSbEY(n zGA#f>r}5pd{l<6SE&&IzLtS6Qea%BceY`&nh8tPN(AXwIJHt`=fvbA8;vX6XNSadn z%8`8NnaRY9zWIvRn61KC{sRO-9$S+}N_c(30u{MCPSOcO zseHogJb+AF;ADh!<9n{otuoZDHjOvFjXyf;=(v5@aYRRXF{Tkd7w$<2n8zk$y^S~+ z17mXv=E6Orlqb!f1WPo+rw08U%24r_7obA4*TYeFp^B<%0Oq;b)k@txb5W7=pgCkJ z@q`aOhzTmNc*SQ}oAx7$$gT{0l&9ndf^NS0$Oo!ZW6vT`sEtVwJ2Oeu;>{8IL+3Y4(q{k6N5)ZLzB&otnbBYIq6iCeTlP``I<^gu|*g}ahq%Z)M z*hG4&I(@k49o_3<)F@poCdWo1RZi_H3dKMP$`9h5*lS&b@4uA+U~jt`@1 zv+H#9`?!BZVlo^6v4S%28LQm6C5gEH zLL@CV62u3e9wt>-#0w0L)DN>~iGZ}E0IJ5E*H%IHh;W&Ga-Wg}m)arin-Woz#Ikx5 zCPl;+sl?)!)-#p>@zjN!V3!r}TgT$6O(z~qsMk*{!E=wm+9u%KBh=iaXbdub8R(!M zm=+?P5w)I?OrCl6-3VJg{NSsNk7(2U_tv3Av=VoL?-=>*jv{Y{IW1n9z)2Dvku1YE z5SdMgzt_SoRw8XoB{+7td~W7QO8edJU+6m_UXSzlyjBDsB`~o^QbzM*Ig|_c9~TED zF9eQ5Le>`iM&^iyQp20`jwaCD{7l7_~fi(hQR5| zN_Ih){2`fnXYF}UuXRrHc_x81PfCMGR^&tUM!3kvx8Ecuzez$^k%utDK5b(JmEA-t z3ak@1tgg)`C=&_5zItt(9Fm|uZ~o}s=wDh3wOe+pU%t|0?~=T}nY@0Dl!9)>- zHWO6pu7L}0f!?_$lPT2 zk$6bKo=|abPu*cp|DZS9`l4F@`p1hWdi)o&Gi0CTPreL1`}ph6{GTU>zqa=ot{=_3 zF+Y`?vpe0obUbRf>P$J}!hX*-G4#_|(tA$lufn@qPiXg@qEuly z<$ZdB1fQBbl+d|LY5eMRUFMXM;>7lmg!LUti#unA_s`JBr|w_ANpDcPHJo`~vfjUQ z<|j-UaODjB>RaxgGoMGNLQUT-H@?#;oU1lSKbQo*tW&b2i#s3HVy_$oZLr1(pCnv< zQ)XLoygbX>I8W#Nk)iA3jDL%nVo%#RD4mdudBm3U=tnK))=j>1&g)JM8{Z;`ezNsd z)J|v^WPxd4`~au@?CAM9Yxn~-{lmRMx+MzwMC{|WH1QV?)y9O+DEcnCCtj2l-Q>O0 zt0GuIU5~ymeYurS`JH-Nln)QMu_F9@NQRF8{9X8Y^0zAekuFKUuYenXzCwi=0pd65 zqM&qiTA6IG`*5kOlA*Ly_Wki>Y}dxjzLxZg5sMZ60J}k=#7o|{~R*odGV-aDsoIfyc`CFC#tZtF$ zDlk@Vx$xP#>#r*P3JqY^I*jQ)+l*0{*Vb>9l&nlm z44bv9JA%hA76ARZK{t5f_<8-KDfp6RQE~}_5z8YZVJ1X(r>H#H}n6-bJ#S81e?W_PB=Z*63>&`El zZ&-Mr4SctHSV?-mao0<|>P4i0FU;aNfOJ8 z_OT+)xm$6vlIGiM7#*ptR4@5^wvoN#c;UkP^Fc08Le74C=n}1>TQA@c;dvL!^U}3A zCR<3yEs;V#??nz*hr(qRdSNwQwgyHu0d%|L0 zLhp^=*a)c_4yh|Rc`bis?dw#5Qrh)yws>Eq2~(P!Z?kldC<0czOx85l11`G*HvI02 zo^Qu;uUqcqd4|9FkTWFtlcV~^bnt%l0Q2zS!vnbx*H<^JgWe^RTv~j+r*%1aI$_%O zoBmyne)#v~a+bl1J7cfH?Y`fcx}*Z7KJ1~ejYGgnAY^)`@DnuT)((bv84*dGUlhzo zD{pR%mZg`uLUMiYlJ813H*SaS9f_jROWHSgjdT@^C7X+jub!#%@~tLhKWU-$Kn+AI z6&sM1<7%oiCvn6dX~@|YXn`7anOhViWV?#xEcQ+hC2^~gRq{n1Xg7K1kpy&XE<2So zSCU$BaaEa8GQ_ylsMI$J;4drsv*^R1K8>b$^Ih3Axrvu=mhI8cHf3+mZMumfD18T5 ziFZAXPiJ+|zLAa8g-9{I*EUA1jE$5|V<0imXyWCGYnCp3^rNIg-Snzr=1pR1vQ!?RdawA3Y)wYzb}dmOeKmDiK=&rG}t2I z?zk8Vu?|(o%Vst0@pBwa0v6(+vTLP$Jmil%Ln>Np=TTe|RAL}QwFK%W#94T?&Z8aHj^0bN{xu_0Z zd;Iy}6ySCwH02(%CXBFJcJ9C~pFdV+c8@NPwHM|&5@}7Fc^e+)W@sCq>}ktEYo8lQ z)prEfpoY*Eoja2&u#tLoq0@|(9NYY9-jsub^yYvj61@oBtm zag{_mKlSS#XfVuTVy(ALq$l2l8Xx~w0XAW}Yy@Rt7 zY)hyQoFmBJW?3}}pS-`kpJ)uJw-yI$>KG;>)=%)m{tt)NA zMp)$SOCW5UhbS9#WVf@vqQ!BQX2W!eJ8lcM`yhs~RiD(>3`Amct}NDOZ;nqeC@${g z8;4e?Hqa|SwQS`!^k&0CcAoPLZ7vJeP^|mWMG?SV0Qz#!pxwgBNH#Ra`<4jg&QTvR zyDdn#%5F(|zU?}*_A{C;G{TjKoB`jiKt|=UHtgtc`Jxd6dT-zI;w+gWWE;vwSU3Y| z;VGW<=8mO8DV2O`bZVV_F)hRX+{DCHL1d(lP+Ty(pApo${>jOZSxquKKc?296 z$TK9>B)H0@f+Vbsbu=n3lyyxU4n9!&HK%mVzZm5%@S2#F=jbXw$L;F3mGp0URIV2` z(GDAL(-`MQlD~|2qxe1mJJa~Znhc99siKCcKGOs^^{LchOG4DN2qBan*6JW`g_%F<`+5;Jz-+^ErE?^~azl>@`D**6J^M!q?pTj3-_ z?-qxy?A_=L*7Rb-!WuIf%zJ|I0`K0nq`!FX-u-K__mc5o<#;GMdFPf7l8*{cB6sWz z{*g~>LFy^4NNayyaTNoa8#z9S5)+Hz5dFaH3fhoz`Zxl07Y?m1{- zTd4wHNouToo(AK$l<9t6T+9Vk6h+g_02}-bLwll3wYMPeZlyc4Nd|Qlx3j#O&Jhge zw1q(!)dcihpZ)P+I}m*aQXsc10+wnLk098ux6+O|5-eG7ykrH`&TmjP2?yVA{W`d1s&=4|54P?vLJVSI$#3dRFd zO8Nu8vHg^(SYmMotB#LmPV8n=l0TlgUD_CZ`K1&ITD(oKDNP?jR0m;FpM1f4>$>`D zWL}=^@9nzl5r2tFXJ1N{7PWT;iYs}(<~(RSR+HSmk9m`dC+`*Wu!ZW0MBX(Ja88xf z59(vJkc(U*?_dD#aXcRVc2i?f(sPK5f&t~bptAbQPI2MiZm3=r{VQ>DiadWGQ0 zjEo^ zYm5YuW{TgwiJ$;kt6X7(RNn%n=&V8-a|XB4>sBn~jpy`uCJ?>^A5Fv2?B+B4mG7}g z`fyDd>RQY24Z}AW{sebdXvIhbJ8hJGRSYJ$?AeimK2G5+XKt9d_>9L5zdFsU0%{tp zyq&4qcLbzM8pQ>_$vTMCUv{KIGtT%+*2j*{OtQVC0+r+b`;>E3mS?jZ+CX7qmD!tGjPJ&&;j0&+ri_z zGHDvQ02>2k=lOi$Q2W>0B|?>2FIKl}3GIuH!*`MUjMEe}ygaMRx6H6^3(jv|QzCN+N zjPQU#QJInVUY1+bln=8E%y_kVS=>8r5ajOl|?bMdjQpDG=G|o z)GbaA*BINQ$V(10A$HbCNw1k3UWUT7Pzj6is;Zm5#RdWI>W&eD9A)~?js-AWX;7{N zLmP9H~L| zVz**elEGDD;W>myU<|hcA|`USIu}pV4BdM@=68n0ewLNg=ukw*m?$CS_-){4Xz?*{5sd z*ZA04=BvsU_-{?|XBm96O|p@`8s?Ss71MZ6FyXZV@ltP&En=-0wLPDjpQRtBBk*I9Fx-`Pb$XR<$%%IQ+~+q%uAez3 z&s=+J5$H3|ce+|IZb&E>K3!Wf+Bct9T0Dna6#u3w2}>yVOQ_JckP2GfS6YUaSX9+h zRm%alH5X|}dhakD%OUZF~`>@cQ! zsjS~Qz|u8tnf}|7oWhEN-3rf@Ib%mL_VqfK`D%}>m8QCtT>@s%*lHxqYPdXe#%=Li zBTcs*kx@7Kgv9Dt{nChRx?kEVm%8<|p!Myg6%i}OP~x=30jq`R%z}HkXk&_jH?sVs z6qf@{Yb$=4eeYJu@>vH}f_EbF;|vvO8!S$>RfX zHf8bj)jyIy4y-?#T>ti)_K`eYbo_cG>&y3kHr>SZ7u|P$jodEy6iJVTtrG%Qi|x z`ZD?Ic6k<+oE^3II}39=b6z8wCw2tY=hX;1hL{ZZaXV&{cg%m@*{5r;GH*%lNHbou zFW!y$w$jC-jP%6X|$DG|5>eX#E9S7MI35Hh3DyEm(>pSBRC;aY^{<zLc>%Vu3 z*|uv_b|tG;O~t8AI;-!!_kRDzUBv-;od|1pg^t&@hzhgRzk+TJb!XBL4e zjzLdcs_H)|^|*vmTZAz?hJSX+|Lr10<{F`59;xFHCAXKNy(ePh8sp6!n{8hkm*T3E z?+U4MP5i^2G{2WDS)B66^`Wy%+WJzekXw$dTPCx4md$>uyIT&~wcHdpnS8f=X7+-f z{VOAGk5gEmeBKBBbSrwsQq27E8?SrmTjnyIkGt_WeL1BHGI=l9zDvr-d!TLmGuK+O z$6nW5?#6tqPbmr__4uA<7hmh%tmDyYHpKNNQkfd^zrfs18o@f!{{-e)t9%{Tlvv z7+189T5Lp+0OOjB37Ed-*P9Sx8@WNqz zBe5azxPZ=@2kj-EGd&@3^V%6}W*IYv>04$w$BtF|E^VLhz5EtXb9TRZ(Q&RfZ1{7? z;Bn~x1za2RpT(s;U9JBF*Zz~WbgnPz_eSdZO7hCb=)sGqk?*+GZ;A6Ku_IrwJBNv% z4wCmjB%JJ|{Mvr>bw6eMYx3bi+SzW}pPkI#JK2Q$laJ}Y_OpI{$ou_1@Aq!O<$mt> zcX{tm2=r|iL4bPsx`S~0FB#m~%jLgexYL)bJ1dvlJ3BiE2L}Z8>E*v_Q2(0_)PE45 zo)bQS|1WL?Ft_r5z}){cF!zoGy->ehENhI~dMx`#Rrb)ie*<%C60)ATj6)At14<7 zQ-f1$RGF?wT_SiZTjt$A)n^40s9ut$Ml44q&Ud7-g39BdY4}?0LGzg8%0c7g6Z-@X z($uLjaf?4n^)hw5(f(O`AK+RwxGPZ!by_Ev9erz;2stD}w_&xBnqkg&|xu?BCM z<3xUzFMG4KNiq_P9OW`Ry{2En-Yi@Qm7J_S)a~x3H2sA-TViPq`|&<8C4AkkZbEKQ zBS#_dSLSoZh`j}}I zQqwH-PtbWMfhh;LlLGsj?ewX-DA^Us{BMK!j$Ew^)fk?dNlGn~-E}pxX1>3u&`dt< z=%-Y|e(Fzt+xJuAMB^QWlf_i|@CF+vEeCefHZ@7fboVnv^bsqs28Tv^W@Z`eOp+Td zLWWCh)v{HUi61e^){5i^;hg+zrg81bv3FdpJ(aO~bBOU&PHchW7e4z@Ot5|qy_@}E zMO!acUCZ{EzLf6vS1r3{itHJ2C-QOgR_|%@!i^*cJ`P@SH{WAc>#-+-G?AC%iLM!s z>$EBuUhk`{q-8ugRQez*cA|SLKf`Wxh33Ygxw;%RF6>jMqhP80XqZV^aX0Ro405?4 zo-Z@)Cd5@%vqA%V(CtFe4@s^qi3pofKXw_2Xw#8DDwZBti^s4j54~_0i70FxPg6iHh zzGe&SpC}9Q{aifq@jA3GD03%?W-;c9j=|aa?YKelvSO4yZ2M)utBROtj{388-{Nlf z!&wFM23=S{dzO@tZ`P-=_fXR2{r*F5iQ{6bay8a(#%gyr5`_(1wNAY+1m#u zBCKq4qG6tPN<%8$+g$6ZIOd}w5;F{hz6Kw~aAFI;PaB<4O;5PocWOU@hLXx1MNm+I z$#IRnS(+k9$8+*77`d3J@r^wNmYY+F-Y2CTvTj2vv(t;@IDi#MN_C9C0&X-U_F-K2 zV{dbLTGf9QlUe*?DKqY@B}DJgqw~13{k>)wrKmaek36;?vgA$V#|bjuf;oi2 zN&rzKiL}`Em7w>p``{FJOS35{eP9H@b`!eeYfqJXS=3J-h>zl$jGz=qBrv^+?xEhb zbbXB=n3hPQGe)s?d@mX$?Um?!;6=}L%Kg!kX(}YbYKQYikdN_O-<;QsX}V8*#!u7B zqpmn^5|YxE$j@w%{6uI%mE-mG5-w*Y00`$9W&!(P@9@Z$4?QC!!5Sefw#Aesll_}& zy>MxzcTn}f*O3Dzvlx=XhLD12gt%UmofggOk#-17t$uVmM!!pJg67)!=Kws?h6;B> zX6x#uLB*xz3e_LYupDVIdw#0}o4Zqs#O#T1pa`HQNHF+)FQSI*0l%RJOgIPxbZvcJ zIVk3yEh6Ho>ZQC#)x}lU_>*|(UfrXO?aP1;Sicb42%G-D{{ALJb@P z>Bkycnxe6i5~^xeIYqeC8JzBLutfg@0>6yyMfJLHlc151uOxsih+mBxgbskbBjGaR zreZ}m5!9`$NEQm*t4k8(odD3=A+}eWA%6BiYMkJhNEDS`90@vV4o`ALinIY6b+d{j zo@7jq z^cCP==9)nAm946ZyN1@EXv*(=fCNB;Zu2~x!e5B_NDNAVMShx(Je8#R6v>1HKn?SSGF7k*+?O{#Zoy&&)%yeVSw#2(r^4wu^X^h- z<(O#BOrk(ksEk-Ac3W^XI&;=mjQ-R`lg8i)on=-~o`5QG7CvuXyg(ElqO?!l1c1=C z0jI_Z9z(HjDszCzG;g{n)B={CC;g!hAjgB=;mJ-{%OUxW=u~l;6Nx&Y_2;~_FXVFb zVGbfErAa%Ie8@|w@k&Yfy#(Bp)lq#Cn$u_wGu9QS&R;#wpFyK=wlLgeI05X;3V869 zTdhf5;&Z%t5&G%3c*tqc(*Py6pxuJlG_F^yFxpKY3pnulERBCLtr^HBkmy)UAyIEA zQBf?O74%dJBq&Wf29#bmD;;%1-&rc*6^&xbL+`lx_YWn2zaqeKAnDsi$oAL7!pmqFXc-!Y71lW59A~c88gwSSX(gbCb*@@!cikR z6)wKRB~rv!Q|4ZC7GLAcr+cwP!@`~pGTnl zlI4+kdzwt0uUAvaIEbE>D{N-@@l_u=|0u7Ij?C@$2U-ZvN1*EgSiPaDgeYM zWzisklNTKdtG^QTY~)2K(lzoeFA|FP2xbK)NS@1Gnt>8&pWV&L`D{U&fhgP0Ph-gA zp4KQ6=Zl|zS*;PAPT{PSFM@bH2~}rxG(Lj*AQUdPgKK}9(?p|&Sy2@#q zXJ?#IXA*IvA6q<6XX@SWb)mt}Jn|xlF7->qZ=u=MK~SJ)2Ag2CPr^w71K9#aQs_uM zKt!!HBJo)y-AjtEY&&W%S@N_G^3uO6ARc3(ay}3lEODAiaf@cR!a!5I2aK5j!lznW z<*JYCA+H~Sczuv6s^(su4oRwrnp7xBAs&fR*ge6EI(0v|hxKu}7XefSYk<}?OTez6 zw{*y!8z9NS$6Sjf;n2w7idaZ53U)JL4to#4mVxiR!W6v9DTqRlBf)Ce_`F=DJ-sB; zCaFz`jUGG~xStBq8TXTHlZ;iJy7cLi4udI!W-Qv%FFlqBRBdvTG+r%=UJCt+ z6%=3qqL1s(3qfb`l~G-92{dTA8yzr2T_dnhWO4*OH?c}9Lge_sH*!_X9A1PFlmAvC z9TtHUnn1c!tv?08xX@sZNrYp55xIN=h)Xj1MP^&lsM;dDb9MBUOy0rHZA&C=a$q(= z42wP@q1+F#4r;!^*h9^V?R-zNYfj1tdlmkEIC7Xhf)&Ii1yD}D5q}x^yRPGYMGN%9 z^XkB^ckPKbc!k%29-35J;V@sw$!v-2+AMP}?u(~Zyv7A>2E|4VQUZ_)KlJ5CI2 zcoVhKJmkp`rgsUSqR^hAemq4#KJ_BoFMyx6Ba7=LNqWVtfjSgd&SP(`8$R89!<^dOzjoNaJ-`PcOFodZICC`Hwj!2~hHD%_)Q=$9 zVN2P`MEUhZ_kiy3`kEJ-hLy^wSdqWxK$woeI5f&)5p_>+p;^WmM7fkfZXcb(l;9#I)T5`4c&I)8rXK}No9Ag2^=CDF)bV3PmTI(&oix&=|lZU48`LE)J# zmvmaG@RWD3y~F8y)+t^M+*_}I;!|`C9dj{^yT*1B3+CMWq0EMQLHmi|{hw|P_uM1n^Gvj3>c>+t5ntb1)cv`{kwXUL(y8B1iRv-~OR zPq20m*ONc1MnrafReP;H1*LxuQipCFY}Y8lSDvqb%1|ljIWgjR_K7m`Aa*wRPe~J* zKy=w3a+X3SUpy zJu#vz>_%5km9Lx_KHRGny3O$Dx_QItmA9vX&yJ%Vj#H@49(_J_y!@~nekT6=%;VuH ztLWK-yGL?1R9#QLQwg7%eK`w%b$ag#RoLxw{kvxY!sl^!8?blJZ)}|VY@En%90aj^ zRs70E!U0VZ{*fzumL~ioURNZ9g^EQ~E&KB9>BgC>@K2|STN8SFFP+eZ8$X}j-H+a2 zi+y-eE1tpfh=Mx$dyVkTgocZh*9BbO)3)z2<=mFk9{|BJo*4r;1>`$fMJLP#Ki(5pz1ju5JJLod>$O7C5I zQBXsRRHaE*I?|*_mtI7q_pYD1#{>2EC7?YV+5Fc z*R;~1RPDji{12P%@V{Vg2v4K)j7cIR=fHu(U^16pspaC~#!w=o!&=|DQal~I>Qio= zC31(Ea*-P64@-fLqYlu$4UdIWyw^%=;1BWyv4a_xo=Ek#=3&{s>+hcNxOA?x9`uc8 zkX==1%rg4ebY}QS&GP=?*67L!Rxd>^x0R<0%wVGh_=gk3!rQX>5wSE_^%n?dn`Z)lGzkP>umt*a2rfeH<0 zt~(Poy>=bXmP(k2%CU39ff|edjITQD-!M0l#!rJIUi?twTIydgHz(jwleZ|%Pm8~@ z;ZRGke#Y;X5CP^^P;}AwYl{wxA8CtE8~N)esoKVp7QkN##MIpx;Y-yNvC+%Z} zpUoSE|JVpoi4&_1_!2KKByF3VmB{cmNzq!`>6yW4?M9XjPTDa0#)x^}b8qJc7esiq zzH1&OmrQRFyY?GbrHr77Z_ol~CjD}XD*RG+<;zVm4^S)lgvYA`$gi%t-vY9pGUEe! zdlw68%(~61@yi{ptIqXzPxr0$yxS(%bDFz?$=ba|NybNgR!}@Ex88brtkk}vpBMG( z<-I!M_x|4P7EJXS*r0+oI7N-=mmJB5^06ZRWMTI=q1-%Ew;uhjoyh8y^Ivuyy*o4d z*f6K1!?NG)c%!iV)oIC)^_5e1R3CYEu8_(fDaPnGSI$oE|G4!l&+z4+^Hr>WsnlWR zjX1Ay2gk_}ckP7l8&iJj8YB-F(S z(y)_Qghi11VWNcBdl_eTbZH`a>#x|CG1b;~0{{kqv)$ss$X$gzRIDitq2L|G46tjn zMWFh->0cRLS-fq&u-{}1hg<gZD|f8M!kS`wkX2trkc;_5FVfSipCaoQh&^(ksyXe9*Q{g4`DgOFf+rkU~q$a&O@ z2U-o9nW7~MW3K&_-607Nn9%fwgW;4ub_r$ux*0MBTUFX6!cJB`IdVOvRgxrRAeOZ! zvLLlq+q$$@FShBa30sy0ZL5u%ZfEP4KRpioKOxBLxFKD*EG&E^9D zH(R{vLQ}1d;tQ)}yBMX32!`6I9ugq*d9Tl2R)g<=NZ6-%hX8e+F(0T<;XZ`31sw5` z%zYvAV6K6MjZTKIoER6H4xHQZJlwy2hc_wJj3FO*?L!$r=3{bO;?@%nop=!166tKz z3`RbKwiU#dFzL%cY7K;;^6SftFjHeoLnCD)d$5?$@UrNP6*2|FPpE zV+Js&<;crU78H~&4g^Tf3X=m^*?2mDZZISMl2FVLbfx(2N9h`z2)Z3kyF3kx0-*X| zq)nPB8c4-~YiNsnm_5)Ajmy4*M1;I!{%AHE%LcYp*ZutF*$d9+;`xe5yEOW|7ROaQ z`^jkD@kWX&Yw>_+NKZ7&Rz6v$Po9cbu+O8nVDNdVbI^QNYD%1h-R#?jMuVTJrfHJZ z$$$Dl**Vn0JZfL6v1OEx^L(|k39J?BO(tn1|DvAsus!w-g*K_&8i zkDo4=n>!VGTbo`Rg&IU_X$KYKGN z3e*f!sG`D)ebLLJj^z3dx3x&3wO+RnSwKnv6)CTn2_!q<2-@q*Qdii$N>_h|KS#<> zK)5A-taV>mQ0fgm2#$p_PGnbMWw4W@NO@RG85rVnZzecFRa7%slJVcgzCRU>eAYvPEtIe=FiZp;n0cZeI*$hqs(nv*a&A^GT zVRedCzHP@F2+I8MC%w&b%_!l`WlNHSeiX+(2YQ0oB?;%UP;9auYvI}D7ezk-25xF_ zIm4n>eyNg{$u}Cxc0&~t)0-{-MOsAXhof79qxjLs)fAc0EldSaGTO>9EKE3GjbW0bZUs&bdUN= zfkE3DI0nYmz@`NijJM9g!Rmzye?=#0#goPeIB#`HFLgI=bqgKGr}nE-MuDib8}lbP zpW9yJ_5t$%L?#Q-4nD%f{7{Gd8qsadyqRp$P)VSr`KGOS6NjWiF6XNexOpvhREFzj zNP~OXb$6qZ{Ntf0I0U}`3Y3X`dEC}Jl0nqg@J*SgCA+hWk&v?^HPL!I}~$;O8!AoYi0iCz_w2UIF9;2st5W8-1Xt14-8I7j3f?n8nZL2WrUczgB z4kc2(_}oqi#xO8!Pn=W4eYVw{5SeWGqw55*IQG*h4KR0&-(Zfrb_0bi+AHdJ1k8d1FMGs4Y$G19FmqdfGE z&5M+)Xsm{)%|M==M+VI$IUdRZiPNnFITSI6@0Z>oOzRJfJp zV4~&w*~Ee8EA;HQheuaL%PmJwOf5gHjGY*p*@{dct;|ZaSdI*)qb=#nv9K5{shQRE zY~(zlVN==S)HADIMp{hmhxtSR4^PtmptBO2hF$$_HNs*&_$>O1*GHI?^v1@*9eCZU zg!S5QE9Zod5glc@-Pom9AAckQ+0!3$_lR}^KYn=z#ERcJ+%p+cu{nO$cDk`(2DAAp zZ?nT?MUlH|Q8KhC@sSXTIZUzc%kA3FbCcz}SMSKNefr+7L&BH~Xo0v6pfW2ShXQCJO`~xNeI2*w+d#4Zf z$9wj|r^e_YYY|olv+G~FHsu|}Pp?TRSWDjha^?P))kFvB^s6!ttzRjt>>-5u3S*)*Ow?q)e^jj`P7Tz~uCQRh3e?)UZP3rBr& zW&_rZaz3ZqLQF=w8#(4qCc2EK4>uBGoy>6=#M0|4uQs$UBAKDqN^?$+3_f%Hv9tZ2 zV=1($eQyP$>g;^i+2x_L>l0_U7tZe0&K{l4o@35lAD!=hclQ3{>_hJ2%j)7M`u>u!J_;RKtR`5iWrH2_5T`unhR@Fy%@ z{ig?E*6G|obEmKWr?dX^6L3c-e+Reny7Mgs~%G%;3OyRh^qmsyF%d zFihGQ27N^)eMLG=B~A@RepN+rePzyn50Z6uc6M`f3kV2!^ypF8{lG`}z5id4)xW)} zfB2)Yh(~w-Cvmdv2!>YpKV+4w5y9~WDbP$ITR|sNM#s}abEAb(@D=61$m)$Y9;s$& z(efM04XhfaS2S8VP1*!ZUI{zaiO}_v{-ajK-wVi&a2XE@nGTB^Pl{@c2)ewN^_seA zvGz}d?1O*7Ri6p9f8c6FxOWsbfB;t$9*31@dAw^38*B(0Zha6-NRgeiO5b!$zwjyA z_Ih=6uj%kX?M~qHk52zxulgAG-+0yf`ug_v_RjX^f4u7ZmdHOP#rT$Hd~MBn$%}u~ zYWqoK@z1>0-z~3xSLW`Q44%flzf2lGBXsb3Hh-Ev{UdSbd-nSGjLXdzhr7=&zvZ27 zzW98Yv3{7dbMXA&;CW9^2LYx2`C4?cTX4Bm^oQ{Mt?2i+fwZv4*Y*ptG|Dr{5kn`^5^pZ zPLBOUNRIvAqgDx6_0@l2)&DiDdR6j2VAX|xVb!8syMcs%Pmvu2lUW}Vu&T1Nts|?- zsjnlUny2ZQ$|$#3oTf_^yPl>=9$TE`GPv+1gU~+O`H5gc@27aK*ZTk%CXNM&5Q6#L z|Bh8f^MPC>FX4?Piq3tjAcp&&6j@%tqiNAOH|%e$`sad&C|s$#Hx6EhQe=8uTQ^Yt zvZ7$SqN-_oyRvow&%aaUQT9fS365cNObb;hFG*os_*D7Kj5JHV?g5KM2|=v3dA{x@ z9WJR;S_1Wyl@w-gSFHr?>@_!5_*N1*W8+X{FqT6tf$H|pLv5A)ZE*sJW3s{>Cj;@` zou@;;zIUGX?)>Qbd0Oe+hVKm3fH-3ukl8m49FP(&#ce{p``nhb-Iq+c!rhQxq2BL+ z`JDatkCQyUD+==ZXb4m`a2)ZM&3GP-N`0+58k0L4sc%R3RYAc*mVGp2h<28v5rrFj z$J4r%DK!)8OdX<%*DF71@xQDx)Z&wv7L??7$j~`mbdJ9wyyW@vgXE&e)8|M0?o#># z5+=&Isk77;cn2K#j{ly-f_Ix&$g(ee_4z09RY5{?X`4g|BKNA#aQ<@7&;DPe{K*5q z=6zk!2F#uK-4oqZBvv|_FS&(<7?Tbw4N3m}?VOFH;VYi;#-6+HEY4X3J#|JLF z9bbt%c+i4NusFxWkpN{+uT((BLhhycX{zA=mO_G6n$ z3i%P~dcEeM6pASE{U{rSUwEK@@#4D+?mN7MX(g3mrCW8EYW|F2BiuBu$(kC=!XmG*!H+mwgF~lRV$GuErqmcqtOE5dw4W_02 z#|x?SWO!lMMEdV!cTZktwI^lvKar?*&`MyY$!h7Z#->12K z4z!e-YO1;iPt9o@=@ru?sKEy*TGuStUP)>c(M$zpUb26Z?FEcdTa57DzvwOjnZII zTK&$nv+c0y)r%4(k0qgpXPl*mWvx2iGL$*@Rf?te1{Es2enbp3*l#^~S#P*bPFtb> z_NqKDUhL`sxo03XkJ>)&hPy@;I|gR7GG(W}idfIpt&iJ&m0`+47q}_Gp{s}9Y z#1|*iS5!Qj8y-SYo*okgYBcT>;hqg?!p0iv%uC`)OWJwU(>$62+vBBNR3-eQtJ;be z(pRmYx(sk`Pcvmqfvt;6h^2YyOYF3g5GTb8^=|SngALXT3d==iCybR}-rlx5Dm$rU zyps_(SpzlZfXMS2!IdTynT!fp7Gv+jEDqU01sTQSM>JSZE3tYN~q@?Fn>jn$UUDDL+qKJJ9V}=)#@W)#dD3aM};0 zyb*%ZO@b@C3<>>yDzyhHDyslUb372ntuV-Z;Bd)Ilt6079#D>Z+gYA z8uY7S)7Y1Gq~wKvwCu{%i&LeQ->yfF&4WonpC5Iy?A|Mq`4G-v#AGyjJ;+YRCbGD> z^y32#A>yr-!_tP9MfT*64-Z#gIU7e`Xh+Xv;zl>DC~En{y`5?%r`*?&UGp6RJT>fz zt(zw;p8i{rSIS7?!lVAXvi!K4>Wh24Qe0%|8j8^a-M?ml%YX zYaeY`QY5Pxh&tERmgc7Vk44?$)G1yyB%$LSHG>jmbc^DIo_@TOc55f=&GWBYXP!ob z&%Xz~Yx{UXz^WuQw2`YG1Fd2(khU!YyY%g=5NsJ)fMsd+IC@3L7k>Sijl?`jnG2%> zmqM_U+;r{ZF#;JT)htz7zPz57Q4oVlVuLohLdDY+5z3it5J_GfUL0osIS&0{vhBz3 zACWi1ZqeY+-`hMqTK?Fu^Q=PPYw2CJ{AtxSC?Mq5wf@WePlzM~40hrS~ z39x0;nqhWvY+Z&T^+Q7x&=CK9cPn1I73-D%T{=E)DWA6lC?#q{6 z=Z{g+rH@!s9+6VQh%mf08I-Pv2xsX)01`HYF`XwLootbRxHk%-!Ui2ayIau> zPt_-usfG9_!RcUd52kV=-R_QbLw& zu!irwmd6jyABSfKLQ4%IeZ9y^Z%~GCTvv()PsSk**coh1W=~T*T4q zCxjEUFb34HkER0vS`6810Iz8;EvSBuaNLN1#kVtl~t`b6(+O*fjYeuSjGx$Spr zF^ykE&OrLvyz4V(359(w7t2=qai91YKcF6s!V(t1YEy7jfQuCBk$%c!dr*ffK#U>i z;j~6xGWIOc+d=kTO#EYeAo~J6j!vZmvPe*=3lk*dZpb=p>dkwo%0*r*DxTd9*+7Wp zMQ3lGrDtv`=cdC;ZN*;blUD4*z1WCl)*u<(@UYnoCN;{CIXlN#8+&s^e-cb`-#aZB z0S_>r$+x1!`^J9WaP4s;O}w4^E-QCD!~z?_ zbSt~IJoN!4r^gjleU9eKPVF#H%YfRdmMTecKGRwA3&dosLh~N2XTVI%_0;U!n-Jn_ zAQm?8H8!F~v=1!G{4<<#op6o4m;M=5BtuGC$`(@&wV9I4bMwujLID&NUUcRl;*d;G zcYY1;Un#v5aY&L_5XBKY!RVq~kzw6=SN)P4DnK>71Vvmn$M%;ZR=y|z)<_ocO(_cH z(cIbbzaJy}*bsd_<(YBi<{Bt41K<{%&`T%bb0#6#41epEo23so>kc;2hi7$%(W*Z> zV0_LTWHkpM4b>2FyaCs+VBA`YcEA&QFZ$%j9GV)xSu4dU19T}JnWcwH? zwwQ;%fm&h8ffy7rvSZm=z53sX4cwQrCQ>vohu`TA*1?cuVSH~$yqZ+2oN|+RHh807 z9~Pqz`^F3A?v7DQt+Tx!n?x%Q_YfmnuAPU~QT_5VGkz83%iW8HG2zizH&USKtVV#Z zx?#T*tPcv$e+3aqfS}3Jv_R$NAaxJqcz%P(MFYTAtr`lb=Wu*_gZf>ON>lKt4wb}& z3KzUxD&V@UER;88^KYNr|W2FO+@azLLL-~hOhR1S~^nR1CZ1VuobJ2Ku7Ai8@{piP2uVjYfYxAO&fCu^6EPnBb z?3|{ILN}hjGkir6{e!%|ORb=g!V8`zL78fs%$MJJi(Y4&NES&~Igx(ZgecU8`|iVE zE?FLYDUuUwZJ2!mHb4$1!FbugXj?KhQFEQ<@w(WzJ?PiRvfwEo? z57_xgfs+al7EN~5tp@CyDN9y;+X7YRQyrF*&LNO-iB=^8Vr8}9EBR>=t97@J2?-#CZus>*C^=0o-7 zCvlrsH`oF-H$n$m-YVP!J!|cL+fvvZi)_e2>E}M8t>QKMRYOSW&4qWjgbIC(H+q-) zxSyHiR=%G(nj|})kWZ^v{I(Zr@Nm8sF^tzoq-VH5>JXABFiSp6doEq%P2c;>cezPv zz5wLmE-YMIUdFh;BDx=&Tv%;^I&teVXm7=9y?x*Vc#;-)S7a^hBQj)Rv_L|OClGE6 zT*M=r2iu%4(QcmAP0Nq6-i$np<92zS3`r_8-b(M>G0*jZd+ieqz9bfXsn_T5v}>b% z++`2}LdF0@d`YnMGrJIfL^1*#XM2y>E;cyfU623hV*BU^OVStJq_rEaMa0FnZ|HKf zx=bu_*&Y)EEIpxd$&iD3a8encI|#ZqF}Gispvggy+R*%LA`uudkg9v@t$Xf>B^l*a z!@NnvyN>wxk4?nrVo3X!p(=PxpamLUxNptxn48Qsrl34VW;e!$0^_hAv#pK!Q@MgVV8?q||K(Ap>b9Wml9(d8ElJ>&ZOG z^+iKu&=7kcctJN@SF>V-q}8|VKIV5KLY2 zi+Sk9XAc&$Iu?hQ79X7~mM|2DhYv@#RueA`xsBFS%2hW6^G0c+GT|?YM96-bgBYbz zy%qWrR+j$-!^s6B%?9Kbd$~fP)v8!b|hbN`MtS z^%7cQTx}>s5nwt1cz0QD-F)zFEPf z0En#ao+<0hM&}lcX*d$-FqJueOr-o+APS;*thv^-IB@J~)>(w(u6R z`f|s$@@~FzILQ^Wz>(&$K^0KM2KvP2SYktk4byyLdp7@?^UIMBkqEQ%}F-rN{O52za+R=j+UDtU;A#SmRx16>7(qA>`2IMSzctt(VH zm343W?%v^(y`{VTQO(b~6{0K3IDV3pw|Z>7HXr#lzs0S%_4NBx9;ZY_5{y~mSvlhi{2|4Py!K$Ykkx{*P4v|l?1Yqq>XWC>&n~Vv_mK5wP*3aR9T+m~{-)ob zJ>`h2j%KJz{lj`Dw|c5~-FEMVSeKKDxI@umfDs;niTpu%-$YA*X&I`1=sCNHxhYkN zmot})Vf=IaSmZ3rX1C}m&29JFvZJ$8oFNi4zgP-fLenjX6pzo6X~=+)Ir1-nKjC{a`+I59G4%z5jmn#m5ajL)_-qdg>#p&piyd+G7Z+(xiYx zqjshzl9+&1TYM6U#OAAXip?fJ6PiJa-)#s8UH2)sY+p&$!nex2JCdxq z;g{5R`vKw|Ze07eK!0tx@n2Z=#G@p8S*i4clr!F|H|0vL29m+Q(VhBz=`$;avs>ec zPq@-oexjaRlO=jDI~$~2YMP(+%~&rt-2M3KF%iAO<+s2-3y+)5Pk!ACJU`eNw@LhX z_v|~FEZ@pE=|@M?y+;Dq5{G(s<ak<$JF$b2X_bi027i4eiQ}X3DF!Nh+ORU^iSCFJ=d%EXMIS#SJ=Nvn`pH|! z(3EjaW!lC@t-76=Hf_c0gkTOvaX%w7hfzVrUTv@0>4;O7dMy+0y>Go%P6Vvl!+`bW zvUm_k`)qk;qCv}3P_%Es#81a$@fXa`#Mr*=M6xV(#^>;kXPcHQ64LTq^o~dGm1axE z@ZUk!_fu8MX{%f#Zgf}@sV0616c+vRG3@<^8$w2G$EF|dGqcWpuym1Y(KJ%I6tA+q zp^f|;>rroD{aE?bq{2N}qU8%QwV$M_=;D=-#1wC()|crP$k+@E2mojyy@H-wEL3mBB0@H)2#1Hue)Xd`FUoE-g20r}!RyNIT z#6icR@g+%OLEqu-o1La#ciWHVLcKe8tRugRvtaX|B7U-6BKoMuBli)cdY8TfVrDFU zeLSXeenZsWmWLzAn??J*9a}`;=1=Ku-ZQsNtxmeW>V5&G&!%?_&4}BBB1l*!9t3|3 zJ^LNJ7D@l`{L@v!ZP9wF>BD=QIl+JKZ53s(0xPl2f9~(r<3F6okmmjl6)k9WP7@nJ zitT@J=SI3Jf%j#OA5&yS{KwQ2X2Wtq=A_+xPQQLcw2>t(R?pDVR~K)}kC z^)n2tS1*FP*p_(q45L&F3u8`8QR%10Q@Q!{t24vd!{?w%lpI_RO0iSb;)Y7pI4&uc zVmqW)h%(D&QnbwaCy50oR#vD%j1yy_4c1KM8q_!X*t{@D&aeNP8YMq5lkOx3R|>b5 z2=B+?Lb{G~RW!~Z!Qq+%<7kMQc&S06hob}YhjTTl0fQ(0#ST~YLe%9p4W5RsJ6!#J zu8x5kCPiLzWJli9P~kRAj(2qAymFzTp=OwpTI|Sm{hp?_vteq^x+9PLg{D5vFsBWE8gjZ)H#uzehB7ml#Th-yKsGAz z#4m@?-HX+QWLUL23*67Lo>@LJhTl-kxd>g6pl#`P3p&ak(`FHW`+j5uxt}wipxO}U zHX`P1d;h4|MSky|UfAaCys=?GZiiP7&M@YiLdFB`lEx6(-_Cz9!M#pZ(G?MKlmnJ0 zEK%3q45zCuK*`%GQ4C4B)79oPC2}j%X15}Y8uI?+7Rmiu8xu_?W_|#4-+FbROCB3l zD&XYCvhn`*jo&l6OaP!Cx~*1V2zhx3GHVFBlUy?JE>2ILpCwg`r^3Fm%(&5Ahlk3T zy!E(}kRE56ygi%wai-kW%Ut!f`<#UJvnn--RLf7qe=$2G?9k_SqYVmy8kf*s(XZdc)m*p)Wqgjet$TRL&_80PIyZ2s5fAcSv z8xP6eRAk+?tziCOXLTmLbV3$f7fMq*VA7zjX{S2mfjrb+kKH`@XsEr@F=Y0Ii9KyV zWlCW6BB)NIEFEw_#4_)6sgzxPoM3ZkwqnX z2s$uMpz`jU?$Ruze2t#L$Kb@$Cdqiuz>GsaII(;fEpoNxn(DBK;TyT+Gu9S4Qb`JN z_k(a+pzkr0cD(1O9fY+w2SOdyOa27FsYCjPW^Kh%ysDfQ2>*dq8O3Apax{s>^kRKk zP;o!@NK`jKKid5{ISXuY&P_yRCDltVcb%AZw;SfLpenvEkchIsn7~>iB_03CE2eRM zY4}POWY>K>Rr%4rHoq=GB_9jnOackzhtu6^%a~Ve9g&DALTIqDlgMJgj7$ZOg#+%B z*sT$ppKBwT<}<6Sf^@Dzy5$fE2MNNXLtgmazWKC`_g4ulHr6hNDhabHT>G{z`FRG4 zf@EbjUkxujkQB*F5Ojv*1469f5I&Z0$}vn$w7H=7?bnqV;Lez8ya$a?V6KAzHw!4Re=R@l7khhb}NR4X+FikAv z+4D(9M>!>!(w0&=pJ-nJJ=gH#sB&5fg}G#!)Gtbl=c+FhLBKg^7YlTQTzhED{G?HJ zP|S#N;z6NLl%S$e6p6}yFmo9Oa`Pox)lu%K1S7(fqTgHg%r~okH-c1F11y*#!g?a< zv=cT%D339IOtR?z;(Ikt5aNTiG<9U40P~>|1?`**Cm6EP=H%mO)I0qT&O^MOgvFhq%dsLQRJVtazZq*84N-M z14uK86_Wr`hOSr!+;Kc{0)x0`EdZ1OcVdX+3%jlQWH;*(?nyW&3`Ds$+5ro-j|oTd zcEWbZrb)>MKk-;~Ch=fj%%2zT2rfb+<> zb0V-MD_LfYIT{PjCl0E^EctiTq`bV7D!(ZLi1g!J*1E}Bl<-6-Xh<9E4lfpj>U&be zw*`uNQWWE|Mucd9qKdII@y+c(tVbr!ITPnr26ezHYUU_*mMN|?$6uA}G5QtbiovOs z)e{1>Z>QF<&a`h(bKL|0BG;REG3;wC>2-Dhb6#S%hH0KwlA(bFQ$?MVMdf67DCWcN z#M}g6QNpVbkT3k=kJ?k>C!^+Z7_11jJ2$v^4q`#RYt6;)B^*NB41 zI&mr<8lqzXau_JXuIeoaB{rxF~7wN6m}RS9G{ zv;h-uYp8H>+iwYBvk3jl*z-uDT0R9{{vf_C{G%Ccji`KL15^=(1)cY~Xt&wOr~&!d zOU_tD2EzR+Bn7ML&H~NK)yz7Ui(`lax*OYWkY+`_@@1bfcl!sMnPbg-Fe^oT7%40~ zH^$IWv%}Dnaj!Ifwh4+eT|h%uGfe-gP5C0w6?`G8A^MUb2mPpMJt~f zJ}4eH8&~66z~QnGja~>ZiH~}hiVhfQ?+f7StpeWMeo(|Lmqcu=%?jQka!8xd@v9E|O1EE`EUoF*+J=*GviHTyQ{rfPO z=iOvmy`09~-IoIp6^+Syd63VHyb-^E7wcylQrLs(u6@J8m1<-M8rr7q6e6WZMr3F< zeM?+RNQWz%Nk5+VEhF(QxekN7yOBgmMjqJFxwdi_+i}G*pl;Wg$QHxg!M9vrF8`Z< z{&>KStpW@itO?c3&YiPk=r0(YG5!!w`k)_?s9lOKc*-WFBM9cpj}YD`cJ3Z=X?cC5 zMEY=s^B(_PEDCoVI&N-U;nawW>+g!g>VQz1*{=bjHB*oLa(Jc^mJk_(1{~VogY&V? z7RoHIl*}Vd@ZN~FhHeujM1q$@(_J0CAvQ86*Chy(>FoDm>vN+QD+!mo3WyEU7@v+$ZRB28c2s$r=Aauic{?sM`dqBr zC4X*`Gp=lEA%i%9lxwJJ*{o!t##IBS!Mn)G7HJy;^*o0Ocr3Esk}UjXq`N)K*H9WL>)D7SEJa+8e@XFN=ef+fI&@6(!ip!#`*ek?5HsU z=)$*M5>fU;3+>H9>Me$%`4#gCy}hucyeq3wmZ>AkBwVpuX#<|KWDff3g^2ibs^$J7 z9HSCcbRnEC6U+}ILYvu~TCIvqM1KqY@Su2E=RQwxTwArpjNk)Jax(3w)E&Q#6BTb& zJ7j{$v7j%J%OpEX{Y5aht!Uwea9)^%Y>}8ujtplASR-b&h-TD)=}ym#O#)Y2dZi^L z?#VW>*iQ*k*L)C#S-1s^?&6gqXDZHdD_TfDVnB?r{oU@$rrnkA5jGf+*1&mM1uhif zoqKt@u5ST9imCPZ{H^TcdIZiv3g;}<`QFj?!)-LnjH30zKL(uGWDhg2&a#* zK%T5oDA@hxl7Hot;S)bcqZ{u^yb4n6dAF`Fq(G{SctYJb@>&P#q=DnV4Rv%~*9u5} zN*lMZ$0?(0U$*omUdM$0%F;M8>^*nQ2X%+wS6b3%ND2o~>oX-+>e7P|)3Otkzl25X

    g%ir9pYCAQlp5qH z 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

    nhS6jW0=5lH5w68_^N(`o!YQUwa_92`p z{ftdp{8#PQSK^jI0Oe}3*bh7~3}ZH>7}b?2l0jm{=jImPCQlxD_-Ytcu`*wo#$r5u zfgR6zY7b&~)~jvkM^JjxXxKP}BA_|Yg*gpw%vJfoWF_jC=}N2OHq-`X%DC8W>2m4P zts*^IgF$9_d}L1}+f9f2uhNv_N2H7%Km<5-SlTX1bOtJhz!AJ#h6}P##w-_5zIs>_ z*?n*iXA4;ZHirGl;19fLRl+9`)6lMHxCyZTF%f{Ves2UNP+XU*B2CcFV~mfj0MN%o zLCMnLm;N%bQ#qPM=vp$suDX0*`6&67k%3$g--U6VgPZXZzS9bbrzvw$Y3ESFVnbxS zpUuZyZFfBIC85z&-s4+0e{*C`=~B>B%1I-`lW;>DN|6UPJ26(o+Z5}2J&?~LOa6d0 zs6KjvrMSWJY^-P1otQ)B;YPd5!m@sME*afz=)P|t?|4%XWy2SMzAJ}K;;aSh^QO@R z$t)v_Yw}>41VG#y*8u@2N4tw5K=oisw*WwHGY36EI(gtA=`Bvtz*Z8#DBr=9-?66C znL|`#jBnkQ%P?+`r6OoSA5iIZVP|)#79z;hTH_{pMc=~Fa6r`7XM26CAKJMgLw`iuwdWQ>JZ7XqQmIsX9L5e%5evP?4HZ_2rYljBa!T zCWcY2tRWHou)M3FUO?#{1lyUeBv36cc+yy~%Kg%Y-zW+0dYmFbI3u={>Px7kUwkYn zSW<=VJmU>ejV7D2KKXh$h*}~lmi8ysrcjO3gNynl54$9*Ac6BuYsBP24usd67AZ>h zfL-izP_Zf+0EtND$z@oc(7Tv+;sG5(a_2xpD$5>Dpt*U=wo2+}n=cWj?*SIvN#s6k z7JSyMe{u%VTvTP$15R&O&d@{&4hq`plRoewoF*Y>4wVCmDNrK`6<$E|%~Q2JoX4AC zjpV*(YuGMGhC`feDzr^mMpfELe~@3VWg|0iQ!7sQ>EqoRKZLTLRT395Q7Rp38Bq}~ zZzwc0l9^bl2Bo|vH~c>9sduSiU@Zg|W|T1Ag@|jF-h?1LFnQ#ECb%cjKBN6rPh}sD zJu8M)Y2(_|jPUdAQ&rC*bTj-J2Ogy>g|9<>h#ClI<132~1ES%H3}8`05=JD|T^Sy* zqb+UHyX$D2DN|CM4|fWamC@6$`AAF@>6ZGHPJ3dQgziKb0mOVb8Sb7d&C(#}d*6TzDxA;^7j>Zat9IQ1qoy`~Kq#H6x=AWmFVDv|X`a;8E|yt1fVhx)v> zeUn)d8GYM6@gh8PYItx%h3%n)`Q&)#t4Kn@iI(pqOkWwyp$t~Q!F)yFW;zPY5f6So z;qX|ZhXH-@oVu%J+8V2Mzq4N?4c*MoOLIrc|IABWTc@vbF)^|>koFw8CP8)3JX)_j zw3zk$L1qT&SE^AMSOf=_15#}#Q(efw4RTs;VwxX=#-9YA5~XbV$4{MC%+Q_VP%z9YDM!^QF}>~`ibyKhpND4Eq%Bi z$9YP+%6bL`PR*FIY^Ma+(76#0+P6JP-eOHP2#)0H4TF<2?^&A@RT{NKuo-HI) zcxu2&%-3PIys4JQP+JVl4h@SFg2fBLOBWv=Y!1|#Jxf|1#|k>?FrD4R&8Tltu^+(P zdmJtWpDnObVhk6!B9P`jnRgJlvf#`$SFNT|+*9E9kVc`{Qq3Een4Wb$>n_CCKHPRL;Z2!r zp##^sw;kk859S^X=ehlJp`fLJ{QLnfm)`g1mat0^W-jLgT|(@a$`h9QTwM-2Tn@*U zNY8u;6ZO2$hPhvEEjeYl6pFYSFfPBkUhvvpb5en3)_!@_*!4%T>(9F7d0(b^-2A5msjcw)+8x6TkKX8-db6|&5d@;O@F(6%DoNa-DTqaSmS0{J$x$h1|2B7Jwq%5XdFU~(SX z!JUSi={{vH-57h5rzcZxF8x@S00UiP;2QgHw#LLYYDG`5Ov%0dH6HjnFY~&L=o*RZ zC||01P0(Ro=xvGWyqW-WA?;me(X@53)^)QAufUi^@$Ge~yDJh$UZ9KxjPQo6;)a~T zhLUKSwz>C=FWjl&nd0x|$zLieif*cD-T}=ULy~aiBX1{<4UO`s-g`39A0y?dmTADs)e%$77eJqZAz&4v!Zkq<&zL_#x<_24K zX+1XPLPiZ}>Xh^<4pNopal?c(Ikg;Oq8z%e}D7hS|?S*srf~%lr3+lZD?+ zCqKW?ZGYhsh1TuhqZd}?u#geIAdA}`%)S?Bc)}EYE^@!KI`WNpYZ>YA?meIX17(YM zQIGth3jJO0zKcz}eHrc(-^-P7!~cpD+g13^h2D3GZk&mV0b|-bDMzKLegQ2PcdnJc zGyml;N04RS000{n{+q{a&p+~6zz`FR)ZGr^yT)7kgXnpz5ZU5BDVV>che?1+Pd<*vT z1Av2j06^_T9ygvOhfkgRYajXMKdIq=du_brU7Y0Cb%A{G2SNZ}fEO?ZLIH0;id>Tg z$a4+>MS$-I6c`0afW)6?;{*qQu95FiDAeC1_g_8kzeec(?P3glvnrEzU1QdQOIy}SPi-kmE**~+;2>Bfz{>jgUn zFH|{+2+1_O`4t|ExsYWSs+ahd?J!P?mFo$ndB~$)|W`{Ha9o_E6IIN+S($0 z*d=`=$LSvY{`C9gGwItuG43X5{~yu1q<=)~9{v7BCb*;%^5suCIr;yD!Ts}@|1X6M zb8r0*%>91|=Kgz}uFT(Yx|QjiSJI8S=`T@6G7jlG+DuvuAIO?Bx* zEwrHXbzOcEDK_w-nR!WIWn-smetlCK6_yM9o_#uxsB{1Q<9_bA2Q@>A3W1HL8oLtp zJy-5a+?#fLvnx9*JR@nd!p-!#c!Swq%K9Bm!K3tDn$r5VFG(EI6`#QNUo5}>%)gNK z>tOne1?dB0SSn=0ZqJ^k% zqt~J>CkK;OTAL9sHGaiklo93`iqw~p9%`OeIeXq~o?6Je@wu-wl5Rx#n!4gdI7<)R zBC77T>>JiK(s_^ms5r^*bI{Z!1%2G*1O;8OmGehBi5&9EYY?{H@YkVQw>xy@=gPjV zyYXmRucu~l#^~I(?TOK?qa8Y2^~#dUU4cnuqvmeO`TU%1Z@ZrRGJ<9B(z9FSw!r5O z?{e$i>_e$vJ2}?^etjBKl8*n9U?{D)#>XQNzwz{zi^lq*?v+j*)~i~YUmqBrt!y|h z?9qwp$Gfa)_N=x)Ok8)$(Qwj=d>_4+lRF(Jil}qRD9T*Pqa+> z^Z-$*oG>tBlaSiHHp)99 zldhfZGM~g0Fs?5(I^PL45cCu~w*bl8&vG7LztO@vf|-u$@tVAlfCg2ujuj#0?_Rt< z6yOcz(&>7G*b@}Aq04M))Bnn3&NkEz6Q$vU3yXLn%#@S)tr|ye!6wpds}W3+@FJbWsTz$hd-+}@l>pbyaxc_Co9u8;B>inCQqljPh_ z75<2&&>|+$;P5H(+59ZF0_7Z#VzX1@M*lHFDkpDPB6S!6%#H()*tIOYAgW}f%unHQ zF=^s_)M4pbe7RhYKsJRS;Tn&2Emn372L^Be)qHZJS9ES6rQZ1t#4uypYO+vwKROMg zOOI+*u?Q_90G8cKkqT*T*4KpIkRGfxQ2Ahu&&;nD z)~|b;)@Ji%PaB|2*EjOAqX3zS0@PL_vf?r57AN_d*05yyD_FP@xz*B+(HAJf!T4DR zm{DKFcvl=P1RkN-x_O6S>SS(u?8VyYsL!KA&a)aF$QePsbC6u0AxH^4^p@OpdfhqO z+N7ge41*X0*&>;2hoM!l!0`}9 zxw*;Srn$1yd_*Q5>9R)OmOY~XD7+Zie^)lmSgORQjx`nU8*6=bU}_K`FD*RdHDo_v z1OR(hcy;J1(4hQ9Kg|$D9!El4Xc%SB#t*H zpXb5Cut7CJxvzwS*-BV}ls;6Jil@#1b3dyL6$mcPm_%aD&`1*<*h`j5N$OB8+l_b~ zqGuH2MI!(e_t+=hfym^UzbaAGkI(M&sg^ zhWWbp!1~N;3)SjiW=chd1%$lBlfe!*&;X>$ZW!M`Mf2d99%@MNl24V1T-87MJTU-J zG^q;$6L99(5A(=*sBr5;{2O*3T7(t07DkVR9fBsVO9@DYB-$`bC1+QpCovNmmSD1~ z{FSC7?!gsV`{8Fec8_O2Uqg9`S8!-c6ucO)pF&dt!k*XeXq`@ zT0LqXl?~@=GoMSZpXBZa;W3%}tl=7Ml6PMu-*GY#8tbP-05q9g`}pLOSQRr6i;V%J8zQnfJZLpiQVUgh9(vy@VQat!WMHgU z&wE?*>h{^Zx~;CqZ6UVf9P(BB=A5iAFi3CT4x*z6yVZ(q5v^cg_AVyIaAI_zUM^%i0^7) zzBYYrFAQh6uy&Sb-T9uP$T*%7yb6FDDZm)O|H$WQ6h+!o6zje7*24c+06ZAO=MX^W zdM$Ezun-Fz*nu5*K`Vj@%O+6__Yg;%YzTn~0-yj0r6_rD0NN%HdUt=HA|p@*WyeN34w)ns6kU^S`Os^TE%o}#)#juG`Ua;W?%$B zzyyt83&jvZ-m{7m5kbkIN5eo1oUj5KkO6+63l9~#r(T@Gt z7aW2K3ou|)B8vb(i%)io1Ca@UmvIG92hJuyS|)i&msOJ@QJIis91;r%0CH5aexgQ^ z3So`?Wo^b%K>}84=7$l0SPUKi1Pr3^1wa4gajcxIk}TP`IG9XT`oqHQ;8QJGIUV&0C}JZyM_Sp7m-?Ji_J(7m;j4W zA^_AlYX~@Nd^l@nf(Mw#Z3>2xD7hrlxDYOx5V2<^9G71tVg~{c0CxbBXp(#@qc<{0 zijOb_K=1=nAY8`~BLd}(8gV;ZgMB`;U9#W;7Z3u2Fbu|{Tl#}z6p=BKnKZ|M3zd19 znTZR;z?q$hd^Y$Nx)uNf(05a2jkCCxEP02ppa%-3c+0Q}1`t(Mb!NG!Z4F>@d})7o zn2mwil65F_SP}r#IEMxQ1pspCn2*_;e}qFlLkz%x3ym-Z*CYm!fD2p4JiB?G76CfU zpbNb)3%c+@1W^k$kO2@t2*V&X$5(?kiD^s2p6&^sIv}6)$w2n`m3c8K4&Wkp5C8~( zP{mn`ENKS^AbA9livX~4(%6uEumEEw3=3cYdSCz&>2LvHTXQH7Y#E*hF_``3fj$}w zu;3~jGM)v{fZ6Gp0hc@K3{xFeth zN(ei3rLOs!N_q@T>ZDLArEvB@TccR_iCb)^79S!i5-AYCSce}vk!|^Z44_rHC;&zZ zs0I+Iu$Ni^fCnZ2vIh^gkpsa81<-7wc5FIo5Iovh6Y(K>M*v1jdq|3=#ghw%umm~q z18+bI%!OEx@^)q#suwW~fq+wgkVnYSb;U3Yo?x0MfL-Q^p9?ywrFyEVx~g#|r&xLy zuC=JLwFegok$Jk3ZHaUi2Zow(Wwqvpz;*}5vTFeVjUXCqJ~vy-_5cWFse;*^uh$U5 zq6rQKY8@yH@tUk&!-?gU3u~nVOArTE$6U7qDaVvG=ahR%S`fy-2_vPNqRN=DFYdR0XEPIc~oeFFai|-0+n!}MwFlmu}haj48Yg4PaCyU zE45aOwaK%!0~Hu3$A1Kt0ENd4S4N^NE3M(V2@OS_34jN#cWc20sV=%;2O$i5pa1~? zoC{ESElauF8CAb(hisXW8E3S6)@a3J3vti`S8xSfpax`624_$PvU>(?00)Y1&LWTG`)i3I>n$1pb!JZ8vzm!Qy4G;fglUKKuo$+PH_rA`pdum3%~*l z1O#lr>gYgvqgZ`Q82KnkXS3a4NShJ47VkjPX2 z8oghI!}+OOdZY`qFv;}Rb#v9bvx2m$sI-7A$b@{zh>QxUu*eq6#iwf+^9#T6d!rtb z$`0YmM+(dGOGKIsKm?&iY6J|pJaB4c3%ejjnEbZn+f$3i48~v#+|_#`!wmm+V~z|F z;k3)rj0?T|%UO$c!|a=-<;GJ6%lQSzaeTux%*tQ3$IKMYY^)IY)H5#A&VLxpUzE*q z!-xx zbc(b{7}fNAgG)WWDg7Ya*LJ4-M`5j?8qv(ejL)>Jd%G8~yLUbW%hO!l$OUoMA`vle z{W)??Vmmz%=i`+qabyAlM-F4t^Mk<7wZgBN*kkP=i2a#VZP+HHo{i1N7xC9yQE)W6E;1I6g1kx-g%@UC!Ef>BL8ICL)p2r5kE7k4b1wJbTUgExT z;zO|_|1BRaE)ii#;Up2`30}jATH}91;vdcu5nj;obK*PR-ZFmJloI4F!E;5v6iEI6 zM&1%j-qdMgCsGb5RDL6Da^-bUe`?| z{^oEV=W;&hRifqsvXEt-=X$>9eBS3sa(}(j6BjSmVW7&p6Qyt>73r_p8n~e9_pe#>ZD%krhe+Ep6aT;>a5=CuKwz<9_z9` z>$G0$wtnllp6j|!>5g9Oy}s+f9_$7!?7IQ!n!(M)j*X`A>#U9_Gvepa9_@OrBm|x8 z5=7_Np6%K`=XPG}Q9kCIxj#BNrGUT)V;&rVp>OM5A zvdTZPDyb3_2!8J?#q1^_;?W}SvL4_9kKDYL@XBrQvEJkGJuTf%>-2uq_73p%9`WKm z@$>HR%+2u%5AqN1@z9MeA`j~o@7VHk@~@uqn!OY*@98oB&(s@_@x`q!Bv0KoZ}A!r z^Euz@GcVRAzw;Tt@Ors8KHu~}zx3f9^+=!eM)CBXDD|wa^(cMx zlg{u}FW8Ecv;?7^XLmKZ?IcevX+c9hh=ukbOFzCX%v}E;$bQZ^ir*4}Gb-|9#e_rT z6|iex)hQi5!E&p~!a^J)I)!ieo1XBYTQIAHga-;T%1{i@OENP(_AEuy_gq6Aq{3S5 z)OSzlK~DKDmODL^F}l?Yy`V>zL)Xs?5xko;4w}e`%nG&u48Y*FFE8n<21)&mKA4qu zUO5b$KmjPw3V+}E=6%}50}Q9I2x71V0;~n1Aj@^`Js!C9&gx6O=>gGcRKd z!vG2|kO3_43BEAUN01>!jwD&qOLyW_8 z5hC%y!i!JClpQ;^3~0@sCY4QPnrvAvOH6R=Sn|dY9Wz6K>=<*ZX)Y$nxxsQp%p+8`T$O6X1WS@axt3XdYO-_xVBEQN?@lQgBVxo4b#e^8F?ex}#q|Ub zUJOcvQL5Un9Cg}+Pqr5#*S;D8oW(gW$VRDBGD?S-(ICW`e#+OF-TL4 zFo9$X7%*ahu|<(2hA_hvVjQyXv&4Mj?Li15ln|ofireWziI~waIp8|7&NqmJQ2>BD zK+Ge612!oMx#RR`2>|Vu`S7FeMgnh{&zRB0j|n!g0D~G#NN>G|-iuE@2SsA=Az~PL z0tq;BIffXQpiYyia*7t-^@82cRh@}w|DQmY|i z3IW55LU!2{8B?~nL5fIlS(2?J%anCiS|iGYfdcqKz`2?90H6+G^hkg?1^5U~7)@{m zV1Qz2T4oOb7I0QZielV}k6+>3V}ZR6xZ^p&8UO$jJq!py0ZsNuK!NQXiY0+@GdzhI z2BO^r6Bye?vZUHFb5xK&I;rI`7cNl2lVR%W)FZ3hn~E4*Tyf==Vh|&Sm{7F9Vv0+E zVX!tZ6RmY*k|h+z0lxO?>i|t0%EK>l^-39!hwxBYWdImxND~7J*u>d)1>LhDVIBw| zrauEsnXdzeW=5EL8wj9VSY(v{Xp;g47&;gen1uk+w~COa@`2w$Ai^k`x4)GEdp zUyQ+&mKF?7N@0;fN+#3yEY1c7+Ve@q6afjNzkdlInBFd$Rn@I4gd_`!&yEI zPz*Z02*?A?Sn5r2=dAb8X%7Md&|?{40_DS@O$gvikDcB{Kt*B1HDC{#U_tqIqU)^) zO<45pvyK1^^KH0gyapR=v8|@iH(@f#*H4ky{^;X`j*)5aWazd#VYNe!6{Jm_f+!)X zaEW9J9+F5zN~e%%d|%1)*T1IPhkadoXf0qnFH;?yU~vEdyp9>Za)69>f`R&$&IX%3}zr>7IjlWQtY>sBkho1$j}T!KBJbVC<7R#I0F!LfCg7IMN_caUl+Yd z5=|rkC(>gE+6D-KIz0qx0EpfNRdf+d2;hVbL0%pXz^;beA%WDI&raf~JbG;oBYenJ z9r|?0@)2hlXhUIxY670M>;x^v7~=TW0w1_&ZzJrR%A&eQjAH=f6l_R>54JD~U_2yK zj^p7MUHQs22?G{}|?V!|$x#Oyr|BuvSSZx|BFQlJ3{N0`DR zY|)gpfUhCx3yCIS`Op2y1QQE*(bsO7%Uy~~nwijC$_h{i6>SJ*tHYWuz1G4^3`!<= z!rAiz@H$?$$z{@cKqD!XNRNC|iGiUTIT3~tboNu7+jEbmhLM(Bh~f)B*jOVdcGE9; z34Z`3>KAw7yuv&n51PQ1p&EivH7fKv56Bf?1RzalH4s|VftE$^z{Z9It)m@{$r|%u zAr0AKY9(TwMx6J&zR*m18Br-KaYG9iXh1#YoQpp_V7Gl~?gLveSi}*Bnrs zI~2-UnI+n0?QnqE%E*^`l2Pj_yMQ#d&H#EifG&wfC_9K$vtaF0EGSX{)?$xBG~_P~ zQM$qwTi zpuh+JjxJ|rs-&jm;t)&7!4KYW3SuOq80|#PhDV}c4~Ka-%LxD;Xd;X~H1wbV5OH_u zi#5NzQ4@iZmLCPMmlDYYTLGwMRMBWG*5#o90Vruhe(W1fl<1x#%K3;3U#vsuF1^5v|7!Iz=_n-MUVgcdX)rx6|ESOI&+KDUTN53-O2E|B32 zD=!1f(*TE2n9ACdc6ZHplgNRy=uH?(;YLiV$VZ=fO&50y(It{`lGGvw5MTkqn6aQE z&3tXG-ZX=X!HO~H;0i+Mfe(^UN+l3M>`1VJBxL>;q}yEWCfN{(cy63W)0XXS>iL+A zzLB(xWEe7-017;jCaHHM?+V(d{dR#0FFXMXNLYdsp6~=JK*0$}a6A}Pfe>}Cd+nRI zdz#wL*|sC*=fbg?+MMq_6w*8}s&$@SOE_!9J41DHNG3<(!z-{9@Fy z8Qx!v7`w>DEzS*$T-ZYXenT*5$nX5<=U*;ya^Ur+Z=t#iy^O%Q)uW5;Ydxw%2`6HT zAj-7o%Lu0Ul7vXLr?{BFK_{k=F8$lU?8}Is(+NkTz5!Gd`4S8psy-JAj022_+yjaF z&9 zrN`<)Dy%}tDneSp!dcNmE9^oqd=M@ylQ1NcG5kU^Jj1vsLordq31LJ3G<-uil&J^o zA~%eXI*da+%)_JGLH)TyFyuo$3`9Ys5kQn2Kje)=97IL@!bH@KM$C;zTtrFa!AJ~@ zO0MF%iOhpev#Y_rC$YDiQjK!jY#cMl7SCmCu zq{Le!8CsmeT>M2i>_r(QDq#dhV=S3s)Ifkr#$#+oSz$(+yTV;`MrsT*iZG;qDh{u~ zMp)9uX{<(YjI3*fED+0FN~e5Es7y+sBuc835P|ARtjtQS+)A$OO0Qf=1*%H1lpK!y z#j+erv`kC2T+4PlOI!p(wv0=;oJ+c_%gAy|yUa^6(o4SVOTYX}zzj^m98AJ2Ov5}( z#7s=ZTujDnOvijo$c#+MoJ`8BOv}7X%*;&9+)U2wOwasG&P2c=Y;0#WK;T%rlEKcJ*PUK8Z6}jLtWN8^PVCH1?c7f8>`w3ePVfv*@f=U`EKl=1PxMSr^;}Q(Y)|)m zPxy>a`J7MstWW#APyEbJ{oGIf>`(vvPXG;20Ub~REl>kJPy|g-1zk`EZBPe&Pza4s Q37t?1txyZq&wu~`I~(#ay8r+H literal 0 HcmV?d00001 diff --git a/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md index b9ac28e49..45842cbd3 100755 --- a/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md +++ b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md @@ -1,28 +1,50 @@ # [2956.Find Common Elements Between Two Arrays][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 two integer arrays `nums1` and `nums2` of sizes `n` and `m`, respectively. Calculate the following values: + +- `answer1` : the number of indices `i` such that `nums1[i]` exists in `nums2`. +- `answer2` : the number of indices `i` such that `nums2[i]` exists in `nums1`. + +Return `[answer1,answer2]`. + +**Example 1:** -**Example 1:** +![1](./1.gif) ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [2,3,2], nums2 = [1,2] + +Output: [2,1] + +Explanation: +``` + +**Example 2:** + ``` +Input: nums1 = [4,3,2,3,1], nums2 = [2,2,5,2,3,6] + +Output: [3,4] + +Explanation: + +The elements at indices 1, 2, and 3 in nums1 exist in nums2 as well. So answer1 is 3. -## 题意 -> ... +The elements at indices 0, 1, 3, and 4 in nums2 exist in nums1. So answer2 is 4. +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Find Common Elements Between Two Arrays -```go ``` +Input: nums1 = [3,4,2,3], nums2 = [1,5] + +Output: [0,0] +Explanation: + +No numbers are common between nums1 and nums2, so answer is [0,0]. +``` ## 结语 diff --git a/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution.go b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution.go index d115ccf5e..739661e7f 100644 --- a/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution.go +++ b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int) []int { + m1 := make(map[int]struct{}) + for _, n := range nums1 { + m1[n] = struct{}{} + } + m2 := make(map[int]struct{}) + for _, n := range nums2 { + m2[n] = struct{}{} + } + ans := []int{0, 0} + for _, n := range nums1 { + if _, ok := m2[n]; ok { + ans[0]++ + } + } + for _, n := range nums2 { + if _, ok := m1[n]; ok { + ans[1]++ + } + } + return ans } diff --git a/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution_test.go b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution_test.go index 14ff50eb4..2dca5eebf 100644 --- a/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution_test.go +++ b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums1, nums2 []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 3, 2}, []int{1, 2}, []int{2, 1}}, + {"TestCase2", []int{4, 3, 2, 3, 1}, []int{2, 2, 5, 2, 3, 6}, []int{3, 4}}, + {"TestCase3", []int{3, 4, 2, 3}, []int{1, 5}, []int{0, 0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums1, c.nums2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums1, c.nums2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 35ebe88ed4ecc656fb08bdbd8301f661b5de6269 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 2 Sep 2025 09:31:59 +0800 Subject: [PATCH 377/450] Add solution and test-cases for problem 3025 --- .../1.png | Bin 0 -> 29859 bytes .../2.jpg | Bin 0 -> 29621 bytes .../3.jpg | Bin 0 -> 24493 bytes .../README.md | 58 ++++++++++++++---- .../Solution.go | 30 ++++++++- .../Solution_test.go | 14 ++--- 6 files changed, 80 insertions(+), 22 deletions(-) create mode 100644 leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/1.png create mode 100644 leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/2.jpg create mode 100644 leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/3.jpg diff --git a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/1.png b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/1.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e911ca06c31e9a4683d3b8211912704848e9b5 GIT binary patch literal 29859 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 R|2jIse4WMGWYe#|`9J4p_y+(0 literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/2.jpg b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e4c1d663c70c006ef2af0a7109088bd0439a310 GIT binary patch literal 29621 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 D$n<*s literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/3.jpg b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1471160aac489c4af783b8aa0fab47ab1ad710e6 GIT binary patch literal 24493 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 O`JK)FL$dF4_rC$t<-ZgF literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/README.md b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/README.md index 3d5a5f8d1..d1c874d66 100755 --- a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/README.md +++ b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/README.md @@ -1,28 +1,60 @@ # [3025.Find the Number of Ways to Place People I][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 a 2D array `points` of size `n x 2` representing integer coordinates of some points on a 2D plane, where `points[i] = [xi, yi]`. + +Count the number of pairs of points `(A, B)`, where + +- `A` is on the **upper left** side of `B`, and +- there are no other points in the rectangle (or line) they make (**including the border**). + +Return the count. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[1,1],[2,2],[3,3]] + +Output: 0 + +Explanation: + +There is no way to choose A and B so A is on the upper left side of B. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Find the Number of Ways to Place People I -```go ``` +Input: points = [[6,2],[4,4],[2,6]] + +Output: 2 + +Explanation: +The left one is the pair (points[1], points[0]), where points[1] is on the upper left side of points[0] and the rectangle is empty. +The middle one is the pair (points[2], points[1]), same as the left one it is a valid pair. +The right one is the pair (points[2], points[0]), where points[2] is on the upper left side of points[0], but points[1] is inside the rectangle so it's not a valid pair. +``` + +**Example 3:** + +![3](./3.jpg) + +``` +Input: points = [[3,1],[1,3],[1,1]] + +Output: 2 + +Explanation: + +The left one is the pair (points[2], points[0]), where points[2] is on the upper left side of points[0] and there are no other points on the line they form. Note that it is a valid state when the two points form a line. +The middle one is the pair (points[1], points[2]), it is a valid pair same as the left one. +The right one is the pair (points[1], points[0]), it is not a valid pair as points[2] is on the border of the rectangle. +``` ## 结语 diff --git a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution.go b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution.go index d115ccf5e..de6caffe5 100644 --- a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution.go +++ b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(points [][]int) int { + ans := 0 + l := len(points) + for i := 0; i < l; i++ { + for j := 0; j < l; j++ { + // 检查他俩是否ok + if i == j || !(points[i][0] <= points[j][0] && points[i][1] >= points[j][1]) { + // 不在左上角 + continue + } + k := 0 + for ; k < l; k++ { + if k == i || k == j { + continue + } + x := points[k][0] <= points[j][0] && points[k][0] >= points[i][0] + y := points[k][1] >= points[j][1] && points[k][1] <= points[i][1] + if x && y { + break + } + } + if k == l { + ans++ + } + + } + } + return ans } diff --git a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution_test.go b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution_test.go index 14ff50eb4..22b2f7883 100644 --- a/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution_test.go +++ b/leetcode/3001-3100/3025.Find-the-Number-of-Ways-to-Place-People-I/Solution_test.go @@ -10,12 +10,12 @@ 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, 1}, {2, 2}, {3, 3}}, 0}, + {"TestCase2", [][]int{{6, 2}, {4, 4}, {2, 6}}, 2}, + {"TestCase3", [][]int{{3, 1}, {1, 3}, {1, 1}}, 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cdf6eb7b4610ac455a9b14de56250c544a260571 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 3 Sep 2025 08:53:15 +0800 Subject: [PATCH 378/450] Add solution and test-cases for problem 3027 --- .../1.png | Bin 0 -> 56155 bytes .../2.png | Bin 0 -> 29859 bytes .../3.png | Bin 0 -> 91908 bytes .../4.png | Bin 0 -> 89969 bytes .../README.md | 56 ++++++++++++++---- .../Solution.go | 34 ++++++++++- .../Solution_test.go | 14 ++--- 7 files changed, 82 insertions(+), 22 deletions(-) create mode 100644 leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/1.png create mode 100644 leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/2.png create mode 100644 leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/3.png create mode 100644 leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/4.png diff --git a/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/1.png b/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a92f04c0c3e85bc1cdb117cdeeb7ad9ba4bda2 GIT binary patch literal 56155 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

    CpjuP+Mheu|d+Yq@M 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 R|2jIse4WMGWYe#|`9J4p_y+(0 literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/3.png b/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/3.png new file mode 100644 index 0000000000000000000000000000000000000000..e90a9b1998fa4cef45fc0c9aed573544fb4e7824 GIT binary patch literal 91908 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 [!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 a 2D array `points` of size `n x 2` representing integer coordinates of some points on a 2D-plane, where `points[i] = [xi, yi]`. + +We define the **right** direction as positive x-axis (**increasing x-coordinate**) and the **left** direction as negative x-axis (**decreasing x-coordinate**). Similarly, we define the **up** direction as positive y-axis (**increasing y-coordinate**) and the **down** direction as negative y-axis (**decreasing y-coordinate**) + +You have to place `n` people, including Alice and Bob, at these points such that there is **exactly one** person at every point. Alice wants to be alone with Bob, so Alice will build a rectangular fence with Alice's position as the **upper left corner** and Bob's position as the **lower right corner** of the fence (**Note** that the fence **might not** enclose any area, i.e. it can be a line). If any person other than Alice and Bob is either **inside** the fence or **on** the fence, Alice will be sad. + +Return the number of **pairs of points** where you can place Alice and Bob, such that Alice **does not** become sad on building the fence. + +**Note** that Alice can only build a fence with Alice's position as the upper left corner, and Bob's position as the lower right corner. For example, Alice cannot build either of the fences in the picture below with four corners `(1, 1), (1, 3), (3, 1), and (3, 3)`, because: + +- With Alice at `(3, 3)` and Bob at `(1, 1)`, Alice's position is not the upper left corner and Bob's position is not the lower right corner of the fence. +- With Alice at `(1, 3)` and Bob at `(1, 1)`, Bob's position is not the lower right corner of the fence. + +![1](./1.png) -**Example 1:** + +**Example 1:** + +![2](./2.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[1,1],[2,2],[3,3]] +Output: 0 +Explanation: There is no way to place Alice and Bob such that Alice can build a fence with Alice's position as the upper left corner and Bob's position as the lower right corner. Hence we return 0. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![3](./3.png) -### 思路1 -> ... -Find the Number of Ways to Place People II -```go ``` +Input: points = [[6,2],[4,4],[2,6]] +Output: 2 +Explanation: There are two ways to place Alice and Bob such that Alice will not be sad: +- Place Alice at (4, 4) and Bob at (6, 2). +- Place Alice at (2, 6) and Bob at (4, 4). +You cannot place Alice at (2, 6) and Bob at (6, 2) because the person at (4, 4) will be inside the fence. +``` + +**Example 3:** +![4](./4.png) + +``` +Input: points = [[3,1],[1,3],[1,1]] +Output: 2 +Explanation: There are two ways to place Alice and Bob such that Alice will not be sad: +- Place Alice at (1, 1) and Bob at (3, 1). +- Place Alice at (1, 3) and Bob at (1, 1). +You cannot place Alice at (1, 3) and Bob at (3, 1) because the person at (1, 1) will be on the fence. +Note that it does not matter if the fence encloses any area, the first and second fences in the image are valid. +``` ## 结语 diff --git a/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution.go b/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution.go index d115ccf5e..b52d42b46 100644 --- a/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution.go +++ b/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "sort" +) + +func Solution(points [][]int) int { + ans := 0 + sort.Slice(points, func(i, j int) bool { + if points[i][0] == points[j][0] { + return points[i][1] > points[j][1] + } + return points[i][0] < points[j][0] + }) + + for i := 0; i < len(points)-1; i++ { + pointA := points[i] + xMin := pointA[0] - 1 + xMax := math.MaxInt32 + yMin := math.MinInt32 + yMax := pointA[1] + 1 + + for j := i + 1; j < len(points); j++ { + pointB := points[j] + if pointB[0] > xMin && pointB[0] < xMax && + pointB[1] > yMin && pointB[1] < yMax { + ans++ + xMin = pointB[0] + yMin = pointB[1] + } + } + } + return ans } diff --git a/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution_test.go b/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution_test.go index 14ff50eb4..22b2f7883 100644 --- a/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution_test.go +++ b/leetcode/3001-3100/3027.Find-the-Number-of-Ways-to-Place-People-II/Solution_test.go @@ -10,12 +10,12 @@ 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, 1}, {2, 2}, {3, 3}}, 0}, + {"TestCase2", [][]int{{6, 2}, {4, 4}, {2, 6}}, 2}, + {"TestCase3", [][]int{{3, 1}, {1, 3}, {1, 1}}, 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ddaf926464918d2dc6836592eae34490c0ff21d0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 4 Sep 2025 08:43:08 +0800 Subject: [PATCH 379/450] add new problems --- .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3501-3600/3508.Implement-Router/README.md | 32 +++++++++++++++ .../3508.Implement-Router/Solution.go | 5 +++ .../3508.Implement-Router/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3516.Find-Closest-Person/README.md | 32 +++++++++++++++ .../3516.Find-Closest-Person/Solution.go | 5 +++ .../3516.Find-Closest-Person/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3523.Make-Array-Non-decreasing/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3524.Find-X-Value-of-Array-I/README.md | 32 +++++++++++++++ .../3524.Find-X-Value-of-Array-I/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3525.Find-X-Value-of-Array-II/README.md | 32 +++++++++++++++ .../3525.Find-X-Value-of-Array-II/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3528.Unit-Conversion-I/README.md | 32 +++++++++++++++ .../3528.Unit-Conversion-I/Solution.go | 5 +++ .../3528.Unit-Conversion-I/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3531.Count-Covered-Buildings/README.md | 32 +++++++++++++++ .../3531.Count-Covered-Buildings/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3533.Concatenated-Divisibility/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3537.Fill-a-Special-Grid/README.md | 32 +++++++++++++++ .../3537.Fill-a-Special-Grid/Solution.go | 5 +++ .../3537.Fill-a-Special-Grid/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3544.Subtree-Inversion-Sum/README.md | 32 +++++++++++++++ .../3544.Subtree-Inversion-Sum/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3546.Equal-Sum-Grid-Partition-I/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md" | 32 +++++++++++++++ .../Solution.go" | 5 +++ .../Solution_test.go" | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3575.Maximum-Good-Subtree-Score/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3583.Count-Special-Triplets/README.md | 32 +++++++++++++++ .../3583.Count-Special-Triplets/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3590.Kth-Smallest-Path-XOR-Sum/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3592.Inverse-Coin-Change/README.md | 32 +++++++++++++++ .../3592.Inverse-Coin-Change/Solution.go | 5 +++ .../3592.Inverse-Coin-Change/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3597.Partition-String-/README.md | 32 +++++++++++++++ .../3597.Partition-String-/Solution.go | 5 +++ .../3597.Partition-String-/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ 243 files changed, 6156 insertions(+) create mode 100755 leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/README.md create mode 100644 leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution.go create mode 100644 leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution_test.go create mode 100755 leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/README.md create mode 100644 leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution.go create mode 100644 leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution_test.go create mode 100755 leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/README.md create mode 100644 leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution.go create mode 100644 leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution_test.go create mode 100755 leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/README.md create mode 100644 leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution.go create mode 100644 leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution_test.go create mode 100755 leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/README.md create mode 100644 leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution.go create mode 100644 leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution_test.go create mode 100755 leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/README.md create mode 100644 leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution.go create mode 100644 leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution_test.go create mode 100755 leetcode/3501-3600/3508.Implement-Router/README.md create mode 100644 leetcode/3501-3600/3508.Implement-Router/Solution.go create mode 100644 leetcode/3501-3600/3508.Implement-Router/Solution_test.go create mode 100755 leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/README.md create mode 100644 leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution.go create mode 100644 leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution_test.go create mode 100755 leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/README.md create mode 100644 leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution.go create mode 100644 leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution_test.go create mode 100755 leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/README.md create mode 100644 leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution.go create mode 100644 leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution_test.go create mode 100755 leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/README.md create mode 100644 leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution.go create mode 100644 leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution_test.go create mode 100755 leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/README.md create mode 100644 leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution.go create mode 100644 leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution_test.go create mode 100755 leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/README.md create mode 100644 leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution.go create mode 100644 leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution_test.go create mode 100755 leetcode/3501-3600/3516.Find-Closest-Person/README.md create mode 100644 leetcode/3501-3600/3516.Find-Closest-Person/Solution.go create mode 100644 leetcode/3501-3600/3516.Find-Closest-Person/Solution_test.go create mode 100755 leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/README.md create mode 100644 leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution.go create mode 100644 leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution_test.go create mode 100755 leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/README.md create mode 100644 leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution.go create mode 100644 leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution_test.go create mode 100755 leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/README.md create mode 100644 leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution.go create mode 100644 leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution_test.go create mode 100755 leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/README.md create mode 100644 leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution.go create mode 100644 leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution_test.go create mode 100755 leetcode/3501-3600/3523.Make-Array-Non-decreasing/README.md create mode 100644 leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution.go create mode 100644 leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution_test.go create mode 100755 leetcode/3501-3600/3524.Find-X-Value-of-Array-I/README.md create mode 100644 leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution.go create mode 100644 leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution_test.go create mode 100755 leetcode/3501-3600/3525.Find-X-Value-of-Array-II/README.md create mode 100644 leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution.go create mode 100644 leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution_test.go create mode 100755 leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md create mode 100644 leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go create mode 100644 leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go create mode 100755 leetcode/3501-3600/3528.Unit-Conversion-I/README.md create mode 100644 leetcode/3501-3600/3528.Unit-Conversion-I/Solution.go create mode 100644 leetcode/3501-3600/3528.Unit-Conversion-I/Solution_test.go create mode 100755 leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/README.md create mode 100644 leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution.go create mode 100644 leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution_test.go create mode 100755 leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/README.md create mode 100644 leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution.go create mode 100644 leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution_test.go create mode 100755 leetcode/3501-3600/3531.Count-Covered-Buildings/README.md create mode 100644 leetcode/3501-3600/3531.Count-Covered-Buildings/Solution.go create mode 100644 leetcode/3501-3600/3531.Count-Covered-Buildings/Solution_test.go create mode 100755 leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/README.md create mode 100644 leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution.go create mode 100644 leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution_test.go create mode 100755 leetcode/3501-3600/3533.Concatenated-Divisibility/README.md create mode 100644 leetcode/3501-3600/3533.Concatenated-Divisibility/Solution.go create mode 100644 leetcode/3501-3600/3533.Concatenated-Divisibility/Solution_test.go create mode 100755 leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/README.md create mode 100644 leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution.go create mode 100644 leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution_test.go create mode 100755 leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/README.md create mode 100644 leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution.go create mode 100644 leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution_test.go create mode 100755 leetcode/3501-3600/3537.Fill-a-Special-Grid/README.md create mode 100644 leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution.go create mode 100644 leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution_test.go create mode 100755 leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/README.md create mode 100644 leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution.go create mode 100644 leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution_test.go create mode 100755 leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md create mode 100644 leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go create mode 100644 leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go create mode 100755 leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md create mode 100644 leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go create mode 100644 leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go create mode 100755 leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md create mode 100644 leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go create mode 100644 leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution_test.go create mode 100755 leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/README.md create mode 100644 leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution.go create mode 100644 leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution_test.go create mode 100755 leetcode/3501-3600/3544.Subtree-Inversion-Sum/README.md create mode 100644 leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution.go create mode 100644 leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution_test.go create mode 100755 leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/README.md create mode 100644 leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution.go create mode 100644 leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution_test.go create mode 100755 leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/README.md create mode 100644 leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution.go create mode 100644 leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution_test.go create mode 100755 leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/README.md create mode 100644 leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution.go create mode 100644 leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution_test.go create mode 100755 leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/README.md create mode 100644 leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution.go create mode 100644 leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution_test.go create mode 100755 leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/README.md create mode 100644 leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution.go create mode 100644 leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution_test.go create mode 100755 leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/README.md create mode 100644 leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution.go create mode 100644 leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution_test.go create mode 100755 leetcode/3501-3600/3552.Grid-Teleportation-Traversal/README.md create mode 100644 leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution.go create mode 100644 leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution_test.go create mode 100755 leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/README.md create mode 100644 leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution.go create mode 100644 leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution_test.go create mode 100755 leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/README.md create mode 100644 leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution.go create mode 100644 leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution_test.go create mode 100755 leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/README.md create mode 100644 leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution.go create mode 100644 leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution_test.go create mode 100755 leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/README.md create mode 100644 leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution.go create mode 100644 leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution_test.go create mode 100755 leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/README.md create mode 100644 leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution.go create mode 100644 leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution_test.go create mode 100755 leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/README.md create mode 100644 leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution.go create mode 100644 leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution_test.go create mode 100755 leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/README.md create mode 100644 leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution.go create mode 100644 leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution_test.go create mode 100755 leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/README.md create mode 100644 leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution.go create mode 100644 leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution_test.go create mode 100755 leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/README.md create mode 100644 leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution.go create mode 100644 leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution_test.go create mode 100755 leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/README.md create mode 100644 leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution.go create mode 100644 leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution_test.go create mode 100755 leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/README.md create mode 100644 leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution.go create mode 100644 leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution_test.go create mode 100755 leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/README.md create mode 100644 leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution.go create mode 100644 leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution_test.go create mode 100755 leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/README.md create mode 100644 leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution.go create mode 100644 leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution_test.go create mode 100755 "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/README.md" create mode 100644 "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution.go" create mode 100644 "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution_test.go" create mode 100755 leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/README.md create mode 100644 leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution.go create mode 100644 leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution_test.go create mode 100755 leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/README.md create mode 100644 leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution.go create mode 100644 leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution_test.go create mode 100755 leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/README.md create mode 100644 leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution.go create mode 100644 leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution_test.go create mode 100755 leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/README.md create mode 100644 leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution.go create mode 100644 leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution_test.go create mode 100755 leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/README.md create mode 100644 leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution.go create mode 100644 leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution_test.go create mode 100755 leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/README.md create mode 100644 leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution.go create mode 100644 leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution_test.go create mode 100755 leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/README.md create mode 100644 leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution.go create mode 100644 leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution_test.go create mode 100755 leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/README.md create mode 100644 leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution.go create mode 100644 leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution_test.go create mode 100755 leetcode/3501-3600/3583.Count-Special-Triplets/README.md create mode 100644 leetcode/3501-3600/3583.Count-Special-Triplets/Solution.go create mode 100644 leetcode/3501-3600/3583.Count-Special-Triplets/Solution_test.go create mode 100755 leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/README.md create mode 100644 leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution.go create mode 100644 leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution_test.go create mode 100755 leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/README.md create mode 100644 leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution.go create mode 100644 leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution_test.go create mode 100755 leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/README.md create mode 100644 leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution.go create mode 100644 leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution_test.go create mode 100755 leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/README.md create mode 100644 leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution.go create mode 100644 leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution_test.go create mode 100755 leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/README.md create mode 100644 leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution.go create mode 100644 leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution_test.go create mode 100755 leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/README.md create mode 100644 leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution.go create mode 100644 leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution_test.go create mode 100755 leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/README.md create mode 100644 leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution.go create mode 100644 leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution_test.go create mode 100755 leetcode/3501-3600/3592.Inverse-Coin-Change/README.md create mode 100644 leetcode/3501-3600/3592.Inverse-Coin-Change/Solution.go create mode 100644 leetcode/3501-3600/3592.Inverse-Coin-Change/Solution_test.go create mode 100755 leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/README.md create mode 100644 leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution.go create mode 100644 leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution_test.go create mode 100755 leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/README.md create mode 100644 leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution.go create mode 100644 leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution_test.go create mode 100755 leetcode/3501-3600/3597.Partition-String-/README.md create mode 100644 leetcode/3501-3600/3597.Partition-String-/Solution.go create mode 100644 leetcode/3501-3600/3597.Partition-String-/Solution_test.go create mode 100755 leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/README.md create mode 100644 leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution.go create mode 100644 leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution_test.go create mode 100755 leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/README.md create mode 100644 leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution.go create mode 100644 leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution_test.go create mode 100755 leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/README.md create mode 100644 leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution.go create mode 100644 leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution_test.go diff --git a/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/README.md b/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/README.md new file mode 100755 index 000000000..fc5b1c57f --- /dev/null +++ b/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/README.md @@ -0,0 +1,32 @@ +# [3501.Maximize Active Section with Trade II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Active Section with Trade II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-active-section-with-trade-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution.go b/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution_test.go b/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3501.Maximize-Active-Section-with-Trade-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/README.md b/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/README.md new file mode 100755 index 000000000..d20f27e18 --- /dev/null +++ b/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/README.md @@ -0,0 +1,32 @@ +# [3502.Minimum Cost to Reach Every Position][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Reach Every Position +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-reach-every-position/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution.go b/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution_test.go b/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3502.Minimum-Cost-to-Reach-Every-Position/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/README.md b/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/README.md new file mode 100755 index 000000000..6a6779f8b --- /dev/null +++ b/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/README.md @@ -0,0 +1,32 @@ +# [3503.Longest Palindrome After Substring Concatenation I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Palindrome After Substring Concatenation I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-palindrome-after-substring-concatenation-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution.go b/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution_test.go b/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3503.Longest-Palindrome-After-Substring-Concatenation-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/README.md b/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/README.md new file mode 100755 index 000000000..f33af7868 --- /dev/null +++ b/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/README.md @@ -0,0 +1,32 @@ +# [3504.Longest Palindrome After Substring Concatenation II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Palindrome After Substring Concatenation II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-palindrome-after-substring-concatenation-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution.go b/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution_test.go b/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3504.Longest-Palindrome-After-Substring-Concatenation-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/README.md b/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/README.md new file mode 100755 index 000000000..115c6acb7 --- /dev/null +++ b/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/README.md @@ -0,0 +1,32 @@ +# [3505.Minimum Operations to Make Elements Within K Subarrays Equal][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Elements Within K Subarrays Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-elements-within-k-subarrays-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution.go b/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution_test.go b/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3505.Minimum-Operations-to-Make-Elements-Within-K-Subarrays-Equal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/README.md b/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/README.md new file mode 100755 index 000000000..fd088dc80 --- /dev/null +++ b/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/README.md @@ -0,0 +1,32 @@ +# [3507.Minimum Pair Removal to Sort Array I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Pair Removal to Sort Array I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-pair-removal-to-sort-array-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution.go b/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution_test.go b/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3507.Minimum-Pair-Removal-to-Sort-Array-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3508.Implement-Router/README.md b/leetcode/3501-3600/3508.Implement-Router/README.md new file mode 100755 index 000000000..313346934 --- /dev/null +++ b/leetcode/3501-3600/3508.Implement-Router/README.md @@ -0,0 +1,32 @@ +# [3508.Implement Router][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Implement Router +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/implement-router/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3508.Implement-Router/Solution.go b/leetcode/3501-3600/3508.Implement-Router/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3508.Implement-Router/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3508.Implement-Router/Solution_test.go b/leetcode/3501-3600/3508.Implement-Router/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3508.Implement-Router/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/README.md b/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/README.md new file mode 100755 index 000000000..e54f3be09 --- /dev/null +++ b/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/README.md @@ -0,0 +1,32 @@ +# [3509.Maximum Product of Subsequences With an Alternating Sum Equal to K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Product of Subsequences With an Alternating Sum Equal to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-of-subsequences-with-an-alternating-sum-equal-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution.go b/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution_test.go b/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3509.Maximum-Product-of-Subsequences-With-an-Alternating-Sum-Equal-to-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/README.md b/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/README.md new file mode 100755 index 000000000..3b3754368 --- /dev/null +++ b/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/README.md @@ -0,0 +1,32 @@ +# [3510.Minimum Pair Removal to Sort Array II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Pair Removal to Sort Array II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-pair-removal-to-sort-array-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution.go b/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution_test.go b/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3510.Minimum-Pair-Removal-to-Sort-Array-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/README.md b/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/README.md new file mode 100755 index 000000000..c03fb90e1 --- /dev/null +++ b/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/README.md @@ -0,0 +1,32 @@ +# [3512.Minimum Operations to Make Array Sum Divisible by K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Array Sum Divisible by K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-array-sum-divisible-by-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution.go b/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution_test.go b/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3512.Minimum-Operations-to-Make-Array-Sum-Divisible-by-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/README.md b/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/README.md new file mode 100755 index 000000000..c28231457 --- /dev/null +++ b/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/README.md @@ -0,0 +1,32 @@ +# [3513.Number of Unique XOR Triplets I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Unique XOR Triplets I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-unique-xor-triplets-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution.go b/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution_test.go b/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3513.Number-of-Unique-XOR-Triplets-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/README.md b/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/README.md new file mode 100755 index 000000000..44639b488 --- /dev/null +++ b/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/README.md @@ -0,0 +1,32 @@ +# [3514.Number of Unique XOR Triplets II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Unique XOR Triplets II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-unique-xor-triplets-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution.go b/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution_test.go b/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3514.Number-of-Unique-XOR-Triplets-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/README.md b/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/README.md new file mode 100755 index 000000000..f092f335a --- /dev/null +++ b/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/README.md @@ -0,0 +1,32 @@ +# [3515.Shortest Path in a Weighted Tree][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Shortest Path in a Weighted Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shortest-path-in-a-weighted-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution.go b/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution_test.go b/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3515.Shortest-Path-in-a-Weighted-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3516.Find-Closest-Person/README.md b/leetcode/3501-3600/3516.Find-Closest-Person/README.md new file mode 100755 index 000000000..525609e18 --- /dev/null +++ b/leetcode/3501-3600/3516.Find-Closest-Person/README.md @@ -0,0 +1,32 @@ +# [3516.Find Closest Person][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Closest Person +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-closest-person/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3516.Find-Closest-Person/Solution.go b/leetcode/3501-3600/3516.Find-Closest-Person/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3516.Find-Closest-Person/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3516.Find-Closest-Person/Solution_test.go b/leetcode/3501-3600/3516.Find-Closest-Person/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3516.Find-Closest-Person/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/README.md b/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/README.md new file mode 100755 index 000000000..f8370693e --- /dev/null +++ b/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/README.md @@ -0,0 +1,32 @@ +# [3517.Smallest Palindromic Rearrangement I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Palindromic Rearrangement I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-palindromic-rearrangement-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution.go b/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution_test.go b/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3517.Smallest-Palindromic-Rearrangement-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/README.md b/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/README.md new file mode 100755 index 000000000..e58e0c587 --- /dev/null +++ b/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/README.md @@ -0,0 +1,32 @@ +# [3518.Smallest Palindromic Rearrangement II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Palindromic Rearrangement II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-palindromic-rearrangement-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution.go b/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution_test.go b/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3518.Smallest-Palindromic-Rearrangement-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/README.md b/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/README.md new file mode 100755 index 000000000..4f9afceee --- /dev/null +++ b/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/README.md @@ -0,0 +1,32 @@ +# [3519.Count Numbers with Non-Decreasing Digits ][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Numbers with Non-Decreasing Digits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-numbers-with-non-decreasing-digits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution.go b/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution_test.go b/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3519.Count-Numbers-with-Non-Decreasing-Digits-/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/README.md b/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/README.md new file mode 100755 index 000000000..c195cd7e6 --- /dev/null +++ b/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/README.md @@ -0,0 +1,32 @@ +# [3522.Calculate Score After Performing Instructions][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Calculate Score After Performing Instructions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/calculate-score-after-performing-instructions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution.go b/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution_test.go b/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3522.Calculate-Score-After-Performing-Instructions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3523.Make-Array-Non-decreasing/README.md b/leetcode/3501-3600/3523.Make-Array-Non-decreasing/README.md new file mode 100755 index 000000000..b3d0f086d --- /dev/null +++ b/leetcode/3501-3600/3523.Make-Array-Non-decreasing/README.md @@ -0,0 +1,32 @@ +# [3523.Make Array Non-decreasing][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Make Array Non-decreasing +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-array-non-decreasing/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution.go b/leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution_test.go b/leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3523.Make-Array-Non-decreasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/README.md b/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/README.md new file mode 100755 index 000000000..eeddcaa08 --- /dev/null +++ b/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/README.md @@ -0,0 +1,32 @@ +# [3524.Find X Value of Array I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find X Value of Array I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-x-value-of-array-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution.go b/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution_test.go b/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3524.Find-X-Value-of-Array-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/README.md b/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/README.md new file mode 100755 index 000000000..9bf7b4977 --- /dev/null +++ b/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/README.md @@ -0,0 +1,32 @@ +# [3525.Find X Value of Array II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find X Value of Array II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-x-value-of-array-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution.go b/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution_test.go b/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3525.Find-X-Value-of-Array-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md new file mode 100755 index 000000000..fbf3d0959 --- /dev/null +++ b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md @@ -0,0 +1,32 @@ +# [3527.Find the Most Common Response][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Most Common Response +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-most-common-response/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3528.Unit-Conversion-I/README.md b/leetcode/3501-3600/3528.Unit-Conversion-I/README.md new file mode 100755 index 000000000..397c1a58b --- /dev/null +++ b/leetcode/3501-3600/3528.Unit-Conversion-I/README.md @@ -0,0 +1,32 @@ +# [3528.Unit Conversion I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Unit Conversion I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/unit-conversion-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3528.Unit-Conversion-I/Solution.go b/leetcode/3501-3600/3528.Unit-Conversion-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3528.Unit-Conversion-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3528.Unit-Conversion-I/Solution_test.go b/leetcode/3501-3600/3528.Unit-Conversion-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3528.Unit-Conversion-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/README.md b/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/README.md new file mode 100755 index 000000000..d67648067 --- /dev/null +++ b/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/README.md @@ -0,0 +1,32 @@ +# [3529.Count Cells in Overlapping Horizontal and Vertical Substrings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Cells in Overlapping Horizontal and Vertical Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-cells-in-overlapping-horizontal-and-vertical-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution.go b/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution_test.go b/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3529.Count-Cells-in-Overlapping-Horizontal-and-Vertical-Substrings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/README.md b/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/README.md new file mode 100755 index 000000000..846769f73 --- /dev/null +++ b/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/README.md @@ -0,0 +1,32 @@ +# [3530.Maximum Profit from Valid Topological Order in DAG][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Profit from Valid Topological Order in DAG +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-profit-from-valid-topological-order-in-dag/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution.go b/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution_test.go b/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3530.Maximum-Profit-from-Valid-Topological-Order-in-DAG/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3531.Count-Covered-Buildings/README.md b/leetcode/3501-3600/3531.Count-Covered-Buildings/README.md new file mode 100755 index 000000000..e391cb6e2 --- /dev/null +++ b/leetcode/3501-3600/3531.Count-Covered-Buildings/README.md @@ -0,0 +1,32 @@ +# [3531.Count Covered Buildings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Covered Buildings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-covered-buildings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3531.Count-Covered-Buildings/Solution.go b/leetcode/3501-3600/3531.Count-Covered-Buildings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3531.Count-Covered-Buildings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3531.Count-Covered-Buildings/Solution_test.go b/leetcode/3501-3600/3531.Count-Covered-Buildings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3531.Count-Covered-Buildings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/README.md b/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/README.md new file mode 100755 index 000000000..aad35e164 --- /dev/null +++ b/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/README.md @@ -0,0 +1,32 @@ +# [3532.Path Existence Queries in a Graph I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Path Existence Queries in a Graph I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/path-existence-queries-in-a-graph-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution.go b/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution_test.go b/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3532.Path-Existence-Queries-in-a-Graph-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3533.Concatenated-Divisibility/README.md b/leetcode/3501-3600/3533.Concatenated-Divisibility/README.md new file mode 100755 index 000000000..5d91100d8 --- /dev/null +++ b/leetcode/3501-3600/3533.Concatenated-Divisibility/README.md @@ -0,0 +1,32 @@ +# [3533.Concatenated Divisibility][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Concatenated Divisibility +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/concatenated-divisibility/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3533.Concatenated-Divisibility/Solution.go b/leetcode/3501-3600/3533.Concatenated-Divisibility/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3533.Concatenated-Divisibility/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3533.Concatenated-Divisibility/Solution_test.go b/leetcode/3501-3600/3533.Concatenated-Divisibility/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3533.Concatenated-Divisibility/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/README.md b/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/README.md new file mode 100755 index 000000000..bbdfc81fc --- /dev/null +++ b/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/README.md @@ -0,0 +1,32 @@ +# [3534.Path Existence Queries in a Graph II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Path Existence Queries in a Graph II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/path-existence-queries-in-a-graph-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution.go b/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution_test.go b/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3534.Path-Existence-Queries-in-a-Graph-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/README.md b/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/README.md new file mode 100755 index 000000000..a4d84e23b --- /dev/null +++ b/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/README.md @@ -0,0 +1,32 @@ +# [3536.Maximum Product of Two Digits][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Product of Two Digits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-of-two-digits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution.go b/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution_test.go b/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3536.Maximum-Product-of-Two-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3537.Fill-a-Special-Grid/README.md b/leetcode/3501-3600/3537.Fill-a-Special-Grid/README.md new file mode 100755 index 000000000..2f7996057 --- /dev/null +++ b/leetcode/3501-3600/3537.Fill-a-Special-Grid/README.md @@ -0,0 +1,32 @@ +# [3537.Fill a Special Grid][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Fill a Special Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/fill-a-special-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution.go b/leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution_test.go b/leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3537.Fill-a-Special-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/README.md b/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/README.md new file mode 100755 index 000000000..19c48f264 --- /dev/null +++ b/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/README.md @@ -0,0 +1,32 @@ +# [3538.Merge Operations for Minimum Travel Time][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Merge Operations for Minimum Travel Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-operations-for-minimum-travel-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution.go b/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution_test.go b/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3538.Merge-Operations-for-Minimum-Travel-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md new file mode 100755 index 000000000..9e78a7f99 --- /dev/null +++ b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md @@ -0,0 +1,32 @@ +# [3539.Find Sum of Array Product of Magical Sequences][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Sum of Array Product of Magical Sequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-sum-of-array-product-of-magical-sequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md new file mode 100755 index 000000000..6547fb9ae --- /dev/null +++ b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md @@ -0,0 +1,32 @@ +# [3541.Find Most Frequent Vowel and Consonant][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Most Frequent Vowel and Consonant +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-most-frequent-vowel-and-consonant/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md new file mode 100755 index 000000000..e674601f0 --- /dev/null +++ b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md @@ -0,0 +1,32 @@ +# [3542.Minimum Operations to Convert All Elements to Zero][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Convert All Elements to Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-convert-all-elements-to-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution_test.go b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/README.md b/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/README.md new file mode 100755 index 000000000..680f918cc --- /dev/null +++ b/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/README.md @@ -0,0 +1,32 @@ +# [3543.Maximum Weighted K-Edge Path][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Weighted K-Edge Path +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-weighted-k-edge-path/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution.go b/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution_test.go b/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3543.Maximum-Weighted-K-Edge-Path/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3544.Subtree-Inversion-Sum/README.md b/leetcode/3501-3600/3544.Subtree-Inversion-Sum/README.md new file mode 100755 index 000000000..264f5dc10 --- /dev/null +++ b/leetcode/3501-3600/3544.Subtree-Inversion-Sum/README.md @@ -0,0 +1,32 @@ +# [3544.Subtree Inversion Sum][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Subtree Inversion Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/subtree-inversion-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution.go b/leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution_test.go b/leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3544.Subtree-Inversion-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/README.md b/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/README.md new file mode 100755 index 000000000..69dd579bd --- /dev/null +++ b/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/README.md @@ -0,0 +1,32 @@ +# [3545.Minimum Deletions for At Most K Distinct Characters][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Deletions for At Most K Distinct Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-deletions-for-at-most-k-distinct-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution.go b/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution_test.go b/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3545.Minimum-Deletions-for-At-Most-K-Distinct-Characters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/README.md b/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/README.md new file mode 100755 index 000000000..94fb6b850 --- /dev/null +++ b/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/README.md @@ -0,0 +1,32 @@ +# [3546.Equal Sum Grid Partition I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Equal Sum Grid Partition I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/equal-sum-grid-partition-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution.go b/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution_test.go b/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3546.Equal-Sum-Grid-Partition-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/README.md b/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/README.md new file mode 100755 index 000000000..3b996cb2a --- /dev/null +++ b/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/README.md @@ -0,0 +1,32 @@ +# [3547.Maximum Sum of Edge Values in a Graph][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Sum of Edge Values in a Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-sum-of-edge-values-in-a-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution.go b/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution_test.go b/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3547.Maximum-Sum-of-Edge-Values-in-a-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/README.md b/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/README.md new file mode 100755 index 000000000..71e0a769e --- /dev/null +++ b/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/README.md @@ -0,0 +1,32 @@ +# [3548.Equal Sum Grid Partition II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Equal Sum Grid Partition II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/equal-sum-grid-partition-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution.go b/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution_test.go b/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3548.Equal-Sum-Grid-Partition-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/README.md b/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/README.md new file mode 100755 index 000000000..9d291792f --- /dev/null +++ b/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/README.md @@ -0,0 +1,32 @@ +# [3550.Smallest Index With Digit Sum Equal to Index][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Index With Digit Sum Equal to Index +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-index-with-digit-sum-equal-to-index/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution.go b/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution_test.go b/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3550.Smallest-Index-With-Digit-Sum-Equal-to-Index/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/README.md b/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/README.md new file mode 100755 index 000000000..9fc741d08 --- /dev/null +++ b/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/README.md @@ -0,0 +1,32 @@ +# [3551.Minimum Swaps to Sort by Digit Sum][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Swaps to Sort by Digit Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-swaps-to-sort-by-digit-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution.go b/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution_test.go b/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3551.Minimum-Swaps-to-Sort-by-Digit-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/README.md b/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/README.md new file mode 100755 index 000000000..6bc31822a --- /dev/null +++ b/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/README.md @@ -0,0 +1,32 @@ +# [3552.Grid Teleportation Traversal][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Grid Teleportation Traversal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/grid-teleportation-traversal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution.go b/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution_test.go b/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3552.Grid-Teleportation-Traversal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/README.md b/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/README.md new file mode 100755 index 000000000..a979adec3 --- /dev/null +++ b/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/README.md @@ -0,0 +1,32 @@ +# [3553.Minimum Weighted Subgraph With the Required Paths II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Weighted Subgraph With the Required Paths II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-weighted-subgraph-with-the-required-paths-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution.go b/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution_test.go b/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3553.Minimum-Weighted-Subgraph-With-the-Required-Paths-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/README.md b/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/README.md new file mode 100755 index 000000000..ca5a6a466 --- /dev/null +++ b/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/README.md @@ -0,0 +1,32 @@ +# [3556.Sum of Largest Prime Substrings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Largest Prime Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-largest-prime-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution.go b/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution_test.go b/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3556.Sum-of-Largest-Prime-Substrings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/README.md b/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/README.md new file mode 100755 index 000000000..781317cdb --- /dev/null +++ b/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/README.md @@ -0,0 +1,32 @@ +# [3557.Find Maximum Number of Non Intersecting Substrings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Maximum Number of Non Intersecting Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-maximum-number-of-non-intersecting-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution.go b/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution_test.go b/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3557.Find-Maximum-Number-of-Non-Intersecting-Substrings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/README.md b/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/README.md new file mode 100755 index 000000000..0acdcd3b6 --- /dev/null +++ b/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/README.md @@ -0,0 +1,32 @@ +# [3558.Number of Ways to Assign Edge Weights I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Assign Edge Weights I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-assign-edge-weights-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution.go b/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution_test.go b/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3558.Number-of-Ways-to-Assign-Edge-Weights-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/README.md b/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/README.md new file mode 100755 index 000000000..588a2d9eb --- /dev/null +++ b/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/README.md @@ -0,0 +1,32 @@ +# [3559.Number of Ways to Assign Edge Weights II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Assign Edge Weights II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-assign-edge-weights-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution.go b/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution_test.go b/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3559.Number-of-Ways-to-Assign-Edge-Weights-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/README.md b/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/README.md new file mode 100755 index 000000000..eb9e756d7 --- /dev/null +++ b/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/README.md @@ -0,0 +1,32 @@ +# [3560.Find Minimum Log Transportation Cost][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Minimum Log Transportation Cost +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-minimum-log-transportation-cost/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution.go b/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution_test.go b/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3560.Find-Minimum-Log-Transportation-Cost/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/README.md b/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/README.md new file mode 100755 index 000000000..7e25c30fd --- /dev/null +++ b/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/README.md @@ -0,0 +1,32 @@ +# [3561.Resulting String After Adjacent Removals][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Resulting String After Adjacent Removals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/resulting-string-after-adjacent-removals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution.go b/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution_test.go b/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3561.Resulting-String-After-Adjacent-Removals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/README.md b/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/README.md new file mode 100755 index 000000000..871572a31 --- /dev/null +++ b/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/README.md @@ -0,0 +1,32 @@ +# [3562.Maximum Profit from Trading Stocks with Discounts][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Profit from Trading Stocks with Discounts +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-profit-from-trading-stocks-with-discounts/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution.go b/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution_test.go b/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3562.Maximum-Profit-from-Trading-Stocks-with-Discounts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/README.md b/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/README.md new file mode 100755 index 000000000..bda9d47a4 --- /dev/null +++ b/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/README.md @@ -0,0 +1,32 @@ +# [3563.Lexicographically Smallest String After Adjacent Removals][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Lexicographically Smallest String After Adjacent Removals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/lexicographically-smallest-string-after-adjacent-removals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution.go b/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution_test.go b/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3563.Lexicographically-Smallest-String-After-Adjacent-Removals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/README.md b/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/README.md new file mode 100755 index 000000000..22921f46d --- /dev/null +++ b/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/README.md @@ -0,0 +1,32 @@ +# [3566.Partition Array into Two Equal Product Subsets][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Partition Array into Two Equal Product Subsets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/partition-array-into-two-equal-product-subsets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution.go b/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution_test.go b/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3566.Partition-Array-into-Two-Equal-Product-Subsets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/README.md b/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/README.md new file mode 100755 index 000000000..cae3b0020 --- /dev/null +++ b/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/README.md @@ -0,0 +1,32 @@ +# [3567.Minimum Absolute Difference in Sliding Submatrix][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Absolute Difference in Sliding Submatrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-absolute-difference-in-sliding-submatrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution.go b/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution_test.go b/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3567.Minimum-Absolute-Difference-in-Sliding-Submatrix/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/README.md b/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/README.md new file mode 100755 index 000000000..ffee5b3e8 --- /dev/null +++ b/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/README.md @@ -0,0 +1,32 @@ +# [3568.Minimum Moves to Clean the Classroom][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Moves to Clean the Classroom +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-moves-to-clean-the-classroom/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution.go b/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution_test.go b/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3568.Minimum-Moves-to-Clean-the-Classroom/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/README.md b/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/README.md new file mode 100755 index 000000000..ca964ad5f --- /dev/null +++ b/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/README.md @@ -0,0 +1,32 @@ +# [3569.Maximize Count of Distinct Primes After Split][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Count of Distinct Primes After Split +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-count-of-distinct-primes-after-split/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution.go b/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution_test.go b/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3569.Maximize-Count-of-Distinct-Primes-After-Split/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git "a/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/README.md" "b/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/README.md" new file mode 100755 index 000000000..56cd72f41 --- /dev/null +++ "b/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/README.md" @@ -0,0 +1,32 @@ +# [3572.Maximize Y‑Sum by Picking a Triplet of Distinct X‑Values][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Y‑Sum by Picking a Triplet of Distinct X‑Values +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-ysum-by-picking-a-triplet-of-distinct-xvalues/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git "a/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution.go" "b/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution.go" new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ "b/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution.go" @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git "a/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution_test.go" "b/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution_test.go" new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ "b/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution_test.go" @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/README.md b/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/README.md new file mode 100755 index 000000000..df3bf9d1a --- /dev/null +++ b/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/README.md @@ -0,0 +1,32 @@ +# [3573.Best Time to Buy and Sell Stock V][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Best Time to Buy and Sell Stock V +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-v/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution.go b/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution_test.go b/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3573.Best-Time-to-Buy-and-Sell-Stock-V/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/README.md b/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/README.md new file mode 100755 index 000000000..2ab0dea4b --- /dev/null +++ b/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/README.md @@ -0,0 +1,32 @@ +# [3574.Maximize Subarray GCD Score][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Subarray GCD Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-subarray-gcd-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution.go b/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution_test.go b/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3574.Maximize-Subarray-GCD-Score/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/README.md b/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/README.md new file mode 100755 index 000000000..209e42031 --- /dev/null +++ b/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/README.md @@ -0,0 +1,32 @@ +# [3575.Maximum Good Subtree Score][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Good Subtree Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-good-subtree-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution.go b/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution_test.go b/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3575.Maximum-Good-Subtree-Score/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/README.md b/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/README.md new file mode 100755 index 000000000..5eda86605 --- /dev/null +++ b/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/README.md @@ -0,0 +1,32 @@ +# [3576.Transform Array to All Equal Elements][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Transform Array to All Equal Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/transform-array-to-all-equal-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution.go b/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution_test.go b/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3576.Transform-Array-to-All-Equal-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/README.md b/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/README.md new file mode 100755 index 000000000..ec6077aa8 --- /dev/null +++ b/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/README.md @@ -0,0 +1,32 @@ +# [3577.Count the Number of Computer Unlocking Permutations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Computer Unlocking Permutations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-computer-unlocking-permutations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution.go b/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution_test.go b/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3577.Count-the-Number-of-Computer-Unlocking-Permutations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/README.md b/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/README.md new file mode 100755 index 000000000..6f63cbb59 --- /dev/null +++ b/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/README.md @@ -0,0 +1,32 @@ +# [3578.Count Partitions With Max-Min Difference at Most K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Partitions With Max-Min Difference at Most K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-partitions-with-max-min-difference-at-most-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution.go b/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution_test.go b/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3578.Count-Partitions-With-Max-Min-Difference-at-Most-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/README.md b/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/README.md new file mode 100755 index 000000000..5ec3f2080 --- /dev/null +++ b/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/README.md @@ -0,0 +1,32 @@ +# [3579.Minimum Steps to Convert String with Operations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Steps to Convert String with Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-steps-to-convert-string-with-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution.go b/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution_test.go b/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3579.Minimum-Steps-to-Convert-String-with-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/README.md b/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/README.md new file mode 100755 index 000000000..23e4f7d50 --- /dev/null +++ b/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/README.md @@ -0,0 +1,32 @@ +# [3582.Generate Tag for Video Caption][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Generate Tag for Video Caption +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/generate-tag-for-video-caption/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution.go b/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution_test.go b/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3582.Generate-Tag-for-Video-Caption/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3583.Count-Special-Triplets/README.md b/leetcode/3501-3600/3583.Count-Special-Triplets/README.md new file mode 100755 index 000000000..6ce577ba5 --- /dev/null +++ b/leetcode/3501-3600/3583.Count-Special-Triplets/README.md @@ -0,0 +1,32 @@ +# [3583.Count Special Triplets][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Special Triplets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-special-triplets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3583.Count-Special-Triplets/Solution.go b/leetcode/3501-3600/3583.Count-Special-Triplets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3583.Count-Special-Triplets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3583.Count-Special-Triplets/Solution_test.go b/leetcode/3501-3600/3583.Count-Special-Triplets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3583.Count-Special-Triplets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/README.md b/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/README.md new file mode 100755 index 000000000..a9a55ff11 --- /dev/null +++ b/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/README.md @@ -0,0 +1,32 @@ +# [3584.Maximum Product of First and Last Elements of a Subsequence][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Product of First and Last Elements of a Subsequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-of-first-and-last-elements-of-a-subsequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution.go b/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution_test.go b/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3584.Maximum-Product-of-First-and-Last-Elements-of-a-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/README.md b/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/README.md new file mode 100755 index 000000000..dbb23be02 --- /dev/null +++ b/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/README.md @@ -0,0 +1,32 @@ +# [3585.Find Weighted Median Node in Tree][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Weighted Median Node in Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-weighted-median-node-in-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution.go b/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution_test.go b/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3585.Find-Weighted-Median-Node-in-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/README.md b/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/README.md new file mode 100755 index 000000000..04dcab0a5 --- /dev/null +++ b/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/README.md @@ -0,0 +1,32 @@ +# [3587.Minimum Adjacent Swaps to Alternate Parity][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Adjacent Swaps to Alternate Parity +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-adjacent-swaps-to-alternate-parity/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution.go b/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution_test.go b/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3587.Minimum-Adjacent-Swaps-to-Alternate-Parity/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/README.md b/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/README.md new file mode 100755 index 000000000..7919eef2a --- /dev/null +++ b/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/README.md @@ -0,0 +1,32 @@ +# [3588.Find Maximum Area of a Triangle][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Maximum Area of a Triangle +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-maximum-area-of-a-triangle/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution.go b/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution_test.go b/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3588.Find-Maximum-Area-of-a-Triangle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/README.md b/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/README.md new file mode 100755 index 000000000..8cf1d6642 --- /dev/null +++ b/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/README.md @@ -0,0 +1,32 @@ +# [3589.Count Prime-Gap Balanced Subarrays][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Prime-Gap Balanced Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-prime-gap-balanced-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution.go b/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution_test.go b/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3589.Count-Prime-Gap-Balanced-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/README.md b/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/README.md new file mode 100755 index 000000000..d87a03c74 --- /dev/null +++ b/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/README.md @@ -0,0 +1,32 @@ +# [3590.Kth Smallest Path XOR Sum][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Kth Smallest Path XOR Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/kth-smallest-path-xor-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution.go b/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution_test.go b/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3590.Kth-Smallest-Path-XOR-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/README.md b/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/README.md new file mode 100755 index 000000000..f600c5863 --- /dev/null +++ b/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/README.md @@ -0,0 +1,32 @@ +# [3591.Check if Any Element Has Prime Frequency][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Any Element Has Prime Frequency +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-any-element-has-prime-frequency/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution.go b/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution_test.go b/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3591.Check-if-Any-Element-Has-Prime-Frequency/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3592.Inverse-Coin-Change/README.md b/leetcode/3501-3600/3592.Inverse-Coin-Change/README.md new file mode 100755 index 000000000..eb270b0df --- /dev/null +++ b/leetcode/3501-3600/3592.Inverse-Coin-Change/README.md @@ -0,0 +1,32 @@ +# [3592.Inverse Coin Change][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Inverse Coin Change +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/inverse-coin-change/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3592.Inverse-Coin-Change/Solution.go b/leetcode/3501-3600/3592.Inverse-Coin-Change/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3592.Inverse-Coin-Change/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3592.Inverse-Coin-Change/Solution_test.go b/leetcode/3501-3600/3592.Inverse-Coin-Change/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3592.Inverse-Coin-Change/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/README.md b/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/README.md new file mode 100755 index 000000000..f5e67600f --- /dev/null +++ b/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/README.md @@ -0,0 +1,32 @@ +# [3593.Minimum Increments to Equalize Leaf Paths][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Increments to Equalize Leaf Paths +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-increments-to-equalize-leaf-paths/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution.go b/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution_test.go b/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3593.Minimum-Increments-to-Equalize-Leaf-Paths/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/README.md b/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/README.md new file mode 100755 index 000000000..520679e58 --- /dev/null +++ b/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/README.md @@ -0,0 +1,32 @@ +# [3594.Minimum Time to Transport All Individuals][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Transport All Individuals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-transport-all-individuals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution.go b/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution_test.go b/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3594.Minimum-Time-to-Transport-All-Individuals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3597.Partition-String-/README.md b/leetcode/3501-3600/3597.Partition-String-/README.md new file mode 100755 index 000000000..9cb204090 --- /dev/null +++ b/leetcode/3501-3600/3597.Partition-String-/README.md @@ -0,0 +1,32 @@ +# [3597.Partition String ][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Partition String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/partition-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3597.Partition-String-/Solution.go b/leetcode/3501-3600/3597.Partition-String-/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3597.Partition-String-/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3597.Partition-String-/Solution_test.go b/leetcode/3501-3600/3597.Partition-String-/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3597.Partition-String-/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/README.md b/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/README.md new file mode 100755 index 000000000..29f015a18 --- /dev/null +++ b/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/README.md @@ -0,0 +1,32 @@ +# [3598.Longest Common Prefix Between Adjacent Strings After Removals][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Common Prefix Between Adjacent Strings After Removals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-common-prefix-between-adjacent-strings-after-removals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution.go b/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution_test.go b/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3598.Longest-Common-Prefix-Between-Adjacent-Strings-After-Removals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/README.md b/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/README.md new file mode 100755 index 000000000..89dd17e60 --- /dev/null +++ b/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/README.md @@ -0,0 +1,32 @@ +# [3599.Partition Array to Minimize XOR][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Partition Array to Minimize XOR +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/partition-array-to-minimize-xor/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution.go b/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution_test.go b/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3599.Partition-Array-to-Minimize-XOR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/README.md b/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/README.md new file mode 100755 index 000000000..f7a70f256 --- /dev/null +++ b/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/README.md @@ -0,0 +1,32 @@ +# [3600.Maximize Spanning Tree Stability with Upgrades][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Spanning Tree Stability with Upgrades +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-spanning-tree-stability-with-upgrades/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution.go b/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution_test.go b/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3501-3600/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 88c9e761cbe3a8242a6c9056e093f8bc4d91c81b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 5 Sep 2025 09:09:01 +0800 Subject: [PATCH 380/450] Add solution and test-cases for problem 2749 --- .../README.md | 33 +++++++++++++++++ .../Solution.go | 35 +++++++++++++++++-- .../Solution_test.go | 21 ++++++----- 3 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/README.md diff --git a/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/README.md b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/README.md new file mode 100644 index 000000000..991e71e4a --- /dev/null +++ b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/README.md @@ -0,0 +1,33 @@ +# [2749.Minimum Operations to Make the Integer Zero][title] + +## Description +You are given two integers `num1` and `num2`. + +In one operation, you can choose integer `i` in the range `[0, 60]` and subtract `2^i + num2` from `num1`. + +Return the integer denoting the **minimum** number of operations needed to make `num1` equal to `0`. + +If it is impossible to make `num1` equal to `0`, return `-1` + +**Example 1:** + +``` +Input: num1 = 3, num2 = -2 +Output: 3 +Explanation: We can make 3 equal to 0 with the following operations: +- We choose i = 2 and subtract 22 + (-2) from 3, 3 - (4 + (-2)) = 1. +- We choose i = 2 and subtract 22 + (-2) from 1, 1 - (4 + (-2)) = -1. +- We choose i = 0 and subtract 20 + (-2) from -1, (-1) - (1 + (-2)) = 0. +It can be proven, that 3 is the minimum number of operations that we need to perform. +``` + +**Example 2:** + +``` +Input: num1 = 5, num2 = 7 +Output: -1 +Explanation: It can be proven, that it is impossible to make 5 equal to 0 with the given operation. +``` + +[title]: https://leetcode.com/problems/minimum-operations-to-make-the-integer-zero +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go index d115ccf5e..6b0d1bb1b 100755 --- a/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go +++ b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math/bits" +) + +func canBeSumOfPowersOfTwo(n int64, k int64) bool { + // 1. 如果 n < k,则无法组成。因为每个 2^i 至少是 1 (2^0)。 + if n < k { + return false + } + + // 2. 计算 n 的二进制表示中 1 的个数,即所需的最小 2^i 数量。 + minK := int64(bits.OnesCount64(uint64(n))) + + // 3. 检查 k 是否在 [minK, n] 范围内。 + // 任何在 minK 和 n 之间的 k 值都是可达的, + // 因为每次拆分一个 2^i 都会让总数增加 1,直到达到 n。 + return k >= minK && k <= n +} + +func Solution(num1 int, num2 int) int { + // 这个可定是无法完成的 + if num2 >= num1 { + return -1 + } + an, bn := int64(num1), int64(num2) + i := int64(1) + for ; i < 61; i++ { + an -= bn + if canBeSumOfPowersOfTwo(an, i) { + return int(i) + } + } + return -1 } diff --git a/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go index 14ff50eb4..59f649b87 100755 --- a/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go +++ b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums1, nums2 int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, -2, 3}, + {"TestCase2", 5, 7, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums1, c.nums2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums1, c.nums2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 06c953604547a1e24d476b996de009778ef4bfdb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 6 Sep 2025 20:51:08 +0800 Subject: [PATCH 381/450] Add solution and test-cases for problem 3495 --- .../README.md | 55 ++++++++++++++----- .../Solution.go | 27 ++++++++- .../Solution_test.go | 13 ++--- 3 files changed, 73 insertions(+), 22 deletions(-) diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md index f816cddd9..936fa5dea 100755 --- a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/README.md @@ -1,28 +1,57 @@ # [3495.Minimum Operations to Make Array Elements Zero][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 a 2D array `queries`, where `queries[i]` is of the form `[l, r]`. Each `queries[i]` defines an array of integers `nums` consisting of elements ranging from `l` to `r`, both **inclusive**. + +In one operation, you can: + +- Select two integers `a` and `b` from the array. +- Replace them with `floor(a / 4)` and `floor(b / 4)`. + +Your task is to determine the **minimum** number of operations required to reduce all elements of the array to zero for each query. Return the sum of the results for all queries. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: queries = [[1,2],[2,4]] + +Output: 3 + +Explanation: -## 题意 -> ... +For queries[0]: -## 题解 +The initial array is nums = [1, 2]. +In the first operation, select nums[0] and nums[1]. The array becomes [0, 0]. +The minimum number of operations required is 1. +For queries[1]: -### 思路1 -> ... -Minimum Operations to Make Array Elements Zero -```go +The initial array is nums = [2, 3, 4]. +In the first operation, select nums[0] and nums[2]. The array becomes [0, 3, 1]. +In the second operation, select nums[1] and nums[2]. The array becomes [0, 0, 0]. +The minimum number of operations required is 2. +The output is 1 + 2 = 3. ``` +**Example 2:** + +``` +Input: queries = [[2,6]] + +Output: 4 + +Explanation: + +For queries[0]: + +The initial array is nums = [2, 3, 4, 5, 6]. +In the first operation, select nums[0] and nums[3]. The array becomes [0, 3, 4, 1, 6]. +In the second operation, select nums[2] and nums[4]. The array becomes [0, 3, 1, 1, 1]. +In the third operation, select nums[1] and nums[2]. The array becomes [0, 0, 0, 1, 1]. +In the fourth operation, select nums[3] and nums[4]. The array becomes [0, 0, 0, 0, 0]. +The minimum number of operations required is 4. +The output is 4. +``` ## 结语 diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go index d115ccf5e..ebdec751a 100644 --- a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func get(num int) int64 { + var cnt int64 + i := 1 + base := 1 + + for base <= num { + end := base*2 - 1 + if end > num { + end = num + } + cnt += int64((i+1)/2) * int64(end-base+1) + i++ + base *= 2 + } + return cnt +} + +func Solution(queries [][]int) int64 { + var res int64 + for _, q := range queries { + count1 := get(q[1]) + count2 := get(q[0] - 1) + res += (count1 - count2 + 1) / 2 + } + return res } diff --git a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go index 14ff50eb4..a73fe6d05 100644 --- a/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go +++ b/leetcode/3401-3500/3495.Minimum-Operations-to-Make-Array-Elements-Zero/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}, {2, 4}}, 3}, + {"TestCase2", [][]int{{2, 6}}, 4}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 497e21f048ac409ef6ac6703393a6abb88a31971 Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 6 Sep 2025 23:29:08 +0800 Subject: [PATCH 382/450] update go.mod --- .github/workflows/test.yml | 2 +- go.mod | 6 ++---- go.sum | 13 ++++--------- .../README.md | 0 .../Solution.go | 0 .../Solution_test.go | 0 6 files changed, 7 insertions(+), 14 deletions(-) rename "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/README.md" => leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/README.md (100%) rename "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution.go" => leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution.go (100%) rename "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution_test.go" => leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution_test.go (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 43a9b0c5f..bdfe2b7c2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '^1.24.0' + go-version: '^1.25.1' id: go - name: Get dependencies run: go mod download diff --git a/go.mod b/go.mod index bbbe00c7a..0c65f5f3e 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,13 @@ module awesome-golang-algorithm go 1.24 require ( - github.com/imroc/req/v3 v3.54.0 - github.com/stretchr/testify v1.10.0 + github.com/imroc/req/v3 v3.54.2 + github.com/stretchr/testify v1.11.1 ) require ( github.com/andybalholm/brotli v1.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/icholy/digest v1.1.0 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/kr/pretty v0.3.1 // indirect diff --git a/go.sum b/go.sum index 2ff64cf9c..65e77a342 100644 --- a/go.sum +++ b/go.sum @@ -5,15 +5,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4= github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y= -github.com/imroc/req/v3 v3.54.0 h1:kwWJSpT7OvjJ/Q8ykp+69Ye5H486RKDcgEoepw1Ren4= -github.com/imroc/req/v3 v3.54.0/go.mod h1:P8gCJjG/XNUFeP6WOi40VAXfYwT+uPM00xvoBWiwzUQ= +github.com/imroc/req/v3 v3.54.2 h1:1eWvCPiz3mSwap7HWqdHN2biuoue+n+mpYWsYiXeMB0= +github.com/imroc/req/v3 v3.54.2/go.mod h1:nR52xB4Ogdwst/UW3QLb2wUiR9ZCLYhiLX9iyksae0I= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -35,8 +30,8 @@ github.com/refraction-networking/utls v1.8.0/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= diff --git "a/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/README.md" b/leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/README.md similarity index 100% rename from "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/README.md" rename to leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/README.md diff --git "a/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution.go" b/leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution.go similarity index 100% rename from "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution.go" rename to leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution.go diff --git "a/leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution_test.go" b/leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution_test.go similarity index 100% rename from "leetcode/3501-3600/3572.Maximize-Y\342\200\221Sum-by-Picking-a-Triplet-of-Distinct-X\342\200\221Values/Solution_test.go" rename to leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution_test.go From 24a3f8ad890de417e8ded623134958e35a06b9ae Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 6 Sep 2025 23:29:17 +0800 Subject: [PATCH 383/450] update go.mod --- .../Solution_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution_test.go b/leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution_test.go index 14ff50eb4..499883f0b 100644 --- a/leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution_test.go +++ b/leetcode/3501-3600/3572.Maximize-Y-Sum-by-Picking-a-Triplet-of-Distinct-X-Values/Solution_test.go @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 63dcb40a53d1349ff50e2bd48a6e57f1c0d73668 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 8 Sep 2025 08:50:39 +0800 Subject: [PATCH 384/450] Add solution and test-cases for problem 1317 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 28 ++++++++++++++-- .../Solution_test.go | 12 +++---- 3 files changed, 50 insertions(+), 23 deletions(-) diff --git a/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/README.md b/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/README.md index fd8546c1c..d735b2cc5 100644 --- a/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/README.md +++ b/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/README.md @@ -1,28 +1,33 @@ # [1317.Convert Integer to the Sum of Two No-Zero Integers][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 +**No-Zero integer** is a positive integer that **does not contain any** `0` in its decimal representation. + +Given an integer `n`, return a list of two integers `[a, b]` where: + +- `a` and `b` are **No-Zero integers**. +- `a + b = n` + +The test cases are generated so that there is at least one valid solution. If there are many valid solutions, you can return any of them. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2 +Output: [1,1] +Explanation: Let a = 1 and b = 1. +Both a and b are no-zero integers, and a + b = 2 = n. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Convert Integer to the Sum of Two No-Zero Integers -```go ``` - +Input: n = 11 +Output: [2,9] +Explanation: Let a = 2 and b = 9. +Both a and b are no-zero integers, and a + b = 11 = n. +Note that there are other valid answers as [8, 3] that can be accepted. +``` ## 结语 diff --git a/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution.go b/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution.go index d115ccf5e..a82269088 100644 --- a/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution.go +++ b/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func ok(n int) bool { + for n > 0 { + mod := n % 10 + if mod == 0 { + return false + } + n /= 10 + } + return true +} + +func Solution(n int) []int { + nums := make(map[int]struct{}) + for i := 1; i <= 10000; i++ { + if ok(i) { + nums[i] = struct{}{} + } + } + var diff int + for k := range nums { + diff = n - k + if _, ok := nums[diff]; ok { + return []int{k, diff} + } + } + return []int{} } diff --git a/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution_test.go b/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution_test.go index 14ff50eb4..50d40778a 100644 --- a/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution_test.go +++ b/leetcode/1301-1400/1317.Convert-Integer-to-the-Sum-of-Two-No-Zero-Integers/Solution_test.go @@ -10,12 +10,10 @@ 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", 2, []int{1, 1}}, } // 开始测试 @@ -30,10 +28,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 41d6eb433250347da8ddff6a2d6361722f103a0d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 9 Sep 2025 09:17:39 +0800 Subject: [PATCH 385/450] Add solution and test-cases for problem 2327 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 27 +++++++++++++- .../Solution_test.go | 21 +++++------ 3 files changed, 58 insertions(+), 27 deletions(-) diff --git a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md index cf66c0936..18dfbdf12 100755 --- a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md +++ b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md @@ -1,28 +1,37 @@ # [2327.Number of People Aware of a Secret][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 +On day `1`, one person discovers a secret. + +You are given an integer `delay`, which means that each person will **share** the secret with a new person **every day**, starting from `delay` days after discovering the secret. You are also given an integer `forget`, which means that each person will **forget** the secret `forget` days after discovering it. A person **cannot** share the secret on the same day they forgot it, or on any day afterwards. + +Given an integer `n`, return the number of people who know the secret at the end of day `n`. Since the answer may be very large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 6, delay = 2, forget = 4 +Output: 5 +Explanation: +Day 1: Suppose the first person is named A. (1 person) +Day 2: A is the only person who knows the secret. (1 person) +Day 3: A shares the secret with a new person, B. (2 people) +Day 4: A shares the secret with a new person, C. (3 people) +Day 5: A forgets the secret, and B shares the secret with a new person, D. (3 people) +Day 6: B shares the secret with E, and C shares the secret with F. (5 people) ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of People Aware of a Secret -```go ``` - +Input: n = 4, delay = 1, forget = 3 +Output: 6 +Explanation: +Day 1: The first person is named A. (1 person) +Day 2: A shares the secret with B. (2 people) +Day 3: A and B share the secret with 2 new people, C and D. (4 people) +Day 4: A forgets the secret. B, C, and D share the secret with 3 new people. (6 people) +``` ## 结语 diff --git a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go index d115ccf5e..a580ec249 100644 --- a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go +++ b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, delay int, forget int) int { + MOD := 1_000_000_007 + dp := make([]int, n+forget+1) + inc := make([]int, n+forget+1) + + // init + dp[1] = 1 + dp[1+forget] = -1 + + for j := 1 + delay; j < 1+forget; j++ { + inc[j] = 1 + } + + for i := 2; i <= n; i++ { + dp[i] = (dp[i] + dp[i-1] + inc[i]) % MOD + dp[i+forget] = (dp[i+forget] - inc[i]) % MOD + for j := i + delay; j < i+forget; j++ { + inc[j] = (inc[j] + inc[i]) % MOD + } + } + result := dp[n] % MOD + if result < 0 { + result += MOD + } + return result } diff --git a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go index 14ff50eb4..b0ad3ce74 100644 --- a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go +++ b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, delay, forget int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 6, 2, 4, 5}, + {"TestCase2", 4, 1, 3, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.delay, c.forget) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.delay, c.forget) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d616bf2318d52937c47421e0df65f452b0c11353 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 10 Sep 2025 09:07:59 +0800 Subject: [PATCH 386/450] Add solution and test-cases for problem 1733 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 32 ++++++++++++++++-- .../Solution_test.go | 22 ++++++------- 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md index 18fada36e..33f9c9089 100755 --- a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md +++ b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md @@ -1,28 +1,33 @@ # [1733.Minimum Number of People to Teach][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 +On a social network consisting of `m` users and some friendships between users, two users can communicate with each other if they know a common language. + +You are given an integer `n`, an array `languages`, and an array `friendships` where: + +- There are `n` languages numbered `1` through `n`, +- `languages[i]` is the set of languages the `ith` user knows, and +- `friendships[i] = [ui, vi]` denotes a friendship between the users `ui` and `vi`. + +You can choose **one** language and teach it to some users so that all friends can communicate with each other. Return the **minimum** number of users you need to teach. + +Note that friendships are not transitive, meaning if `x` is a friend of `y` and `y` is a friend of `z`, this doesn't guarantee that `x` is a friend of `z`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2, languages = [[1],[2],[1,2]], friendships = [[1,2],[1,3],[2,3]] +Output: 1 +Explanation: You can either teach user 1 the second language or user 2 the first language. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Number of People to Teach -```go ``` - +Input: n = 3, languages = [[2],[1,3],[1,2],[3]], friendships = [[1,4],[1,2],[3,4],[2,3]] +Output: 2 +Explanation: Teach the third language to users 1 and 3, yielding two users to teach. +``` ## 结语 diff --git a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go index d115ccf5e..22e84f671 100644 --- a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go +++ b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, languages [][]int, friendships [][]int) int { + cncon := make(map[int]bool) + for _, friendship := range friendships { + mp := make(map[int]bool) + conm := false + for _, lan := range languages[friendship[0]-1] { + mp[lan] = true + } + for _, lan := range languages[friendship[1]-1] { + if mp[lan] { + conm = true + break + } + } + if !conm { + cncon[friendship[0]-1] = true + cncon[friendship[1]-1] = true + } + } + + maxCnt := 0 + cnt := make([]int, n+1) + for person := range cncon { + for _, lan := range languages[person] { + cnt[lan]++ + maxCnt = max(maxCnt, cnt[lan]) + } + } + + return len(cncon) - maxCnt } diff --git a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go index 14ff50eb4..8439db655 100644 --- a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go +++ b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + languages, friendships [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, [][]int{{1}, {2}, {1, 2}}, [][]int{{1, 2}, {1, 3}, {2, 3}}, 1}, + {"TestCase2", 3, [][]int{{2}, {1, 3}, {1, 2}, {3}}, [][]int{{1, 4}, {1, 2}, {3, 4}, {2, 3}}, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.languages, c.friendships) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.languages, c.friendships) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d4833e82d2c83389d7d59cd54cce13a43bece0ca Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 11 Sep 2025 09:20:50 +0800 Subject: [PATCH 387/450] Add solution and test-cases for problem 1139 --- .../1139.Largest-1-Bordered-Square/README.md | 21 +++---- .../Solution.go | 58 ++++++++++++++++++- .../Solution_test.go | 13 ++--- 3 files changed, 69 insertions(+), 23 deletions(-) diff --git a/leetcode/1101-1200/1139.Largest-1-Bordered-Square/README.md b/leetcode/1101-1200/1139.Largest-1-Bordered-Square/README.md index 39fa72025..f5c677998 100644 --- a/leetcode/1101-1200/1139.Largest-1-Bordered-Square/README.md +++ b/leetcode/1101-1200/1139.Largest-1-Bordered-Square/README.md @@ -1,28 +1,21 @@ # [1139.Largest 1-Bordered Square][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 +Given a 2D `grid` of `0`s and `1`s, return the number of elements in the largest **square** subgrid that has all `1`s on its **border**, or 0 if such a subgrid doesn't exist in the `grid`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,1,1],[1,0,1],[1,1,1]] +Output: 9 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Largest 1-Bordered Square -```go ``` - +Input: grid = [[1,1,0,0]] +Output: 1 +``` ## 结语 diff --git a/leetcode/1101-1200/1139.Largest-1-Bordered-Square/Solution.go b/leetcode/1101-1200/1139.Largest-1-Bordered-Square/Solution.go index d115ccf5e..b4a947b1f 100644 --- a/leetcode/1101-1200/1139.Largest-1-Bordered-Square/Solution.go +++ b/leetcode/1101-1200/1139.Largest-1-Bordered-Square/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +type cell struct { + left, up int +} + +func Solution(grid [][]int) int { + ans := 0 + rows, cols := len(grid), len(grid[0]) + count := make([][]cell, rows) + for i := range rows { + count[i] = make([]cell, cols) + } + for i := 0; i < rows; i++ { + pre := 0 + for j := 0; j < cols; j++ { + if grid[i][j] == 1 { + pre++ + } else { + pre = 0 + } + count[i][j].left = pre + } + } + for j := 0; j < cols; j++ { + pre := 0 + for i := 0; i < rows; i++ { + if grid[i][j] == 1 { + pre++ + } else { + pre = 0 + } + count[i][j].up = pre + } + } + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + if grid[i][j] == 0 { + continue + } + ans = max(ans, 1) + for l := 2; i+l-1 < rows && j+l-1 < cols; l++ { + x, y := i+l-1, j+l-1 + if grid[x][y] == 0 { + continue + } + + left := count[x][j].up - count[i][j].up + 1 + bottom := count[x][y].left - count[x][j].left + 1 + right := count[x][y].up - count[i][y].up + 1 + top := count[i][y].left - count[i][j].left + 1 + if left == l && bottom == l && right == l && top == l { + ans = max(ans, l) + } + } + } + } + return ans * ans } diff --git a/leetcode/1101-1200/1139.Largest-1-Bordered-Square/Solution_test.go b/leetcode/1101-1200/1139.Largest-1-Bordered-Square/Solution_test.go index 14ff50eb4..74453f8f7 100644 --- a/leetcode/1101-1200/1139.Largest-1-Bordered-Square/Solution_test.go +++ b/leetcode/1101-1200/1139.Largest-1-Bordered-Square/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, 1, 1}, {1, 0, 1}, {1, 1, 1}}, 9}, + {"TestCase2", [][]int{{1, 1}, {0, 0}}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0320785e53da61b51873eb23cec5a93d2a524284 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 12 Sep 2025 09:00:01 +0800 Subject: [PATCH 388/450] Add solution and test-cases for problem 1017 --- .../1017.Convert-to-Base--2/README.md | 31 ++++++++++--------- .../1017.Convert-to-Base--2/Solution.go | 22 +++++++++++-- .../1017.Convert-to-Base--2/Solution_test.go | 14 ++++----- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/leetcode/1001-1100/1017.Convert-to-Base--2/README.md b/leetcode/1001-1100/1017.Convert-to-Base--2/README.md index 4efb041f0..5907e6410 100644 --- a/leetcode/1001-1100/1017.Convert-to-Base--2/README.md +++ b/leetcode/1001-1100/1017.Convert-to-Base--2/README.md @@ -1,30 +1,33 @@ # [1017.Convert to Base -2][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 +Given an integer `n`, return a binary string representing its representation in base `-2`. + +**Note** that the returned string should not have leading zeros unless the string is `"0"`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2 +Output: "110" +Explantion: (-2)2 + (-2)1 = 2 ``` -## 题意 -> ... - -## 题解 +**EXample 2:** -### 思路1 -> ... -Convert to Base -2 -```go +``` +Input: n = 3 +Output: "111" +Explantion: (-2)2 + (-2)1 + (-2)0 = 3 ``` +**Example 3:** -## 结语 +``` +Input: n = 4 +Output: "100" +Explantion: (-2)2 = 4 +``` 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/1001-1100/1017.Convert-to-Base--2/Solution.go b/leetcode/1001-1100/1017.Convert-to-Base--2/Solution.go index d115ccf5e..8a8a82ce5 100644 --- a/leetcode/1001-1100/1017.Convert-to-Base--2/Solution.go +++ b/leetcode/1001-1100/1017.Convert-to-Base--2/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) string { + if n == 0 { + return "0" + } + var result []byte + for n != 0 { + remainder := n % -2 + n = n / -2 + + if remainder < 0 { + remainder += 2 + n += 1 + } + result = append(result, byte(remainder+48)) + } + for s, e := 0, len(result)-1; s < e; s, e = s+1, e-1 { + result[s], result[e] = result[e], result[s] + } + return string(result) + } diff --git a/leetcode/1001-1100/1017.Convert-to-Base--2/Solution_test.go b/leetcode/1001-1100/1017.Convert-to-Base--2/Solution_test.go index 14ff50eb4..1d3347abe 100644 --- a/leetcode/1001-1100/1017.Convert-to-Base--2/Solution_test.go +++ b/leetcode/1001-1100/1017.Convert-to-Base--2/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, "110"}, + {"TestCase2", 3, "111"}, + {"TestCase3", 4, "100"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5a514741a6e04084589958d132d43ed9da34681c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 13 Sep 2025 08:59:07 +0800 Subject: [PATCH 389/450] Add solution and test-cases for problem 3541 --- .../README.md | 44 +++++++++++++------ .../Solution.go | 16 ++++++- .../Solution_test.go | 13 +++--- 3 files changed, 51 insertions(+), 22 deletions(-) diff --git a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md index 6547fb9ae..3fbcab395 100755 --- a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md +++ b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/README.md @@ -1,28 +1,46 @@ # [3541.Find Most Frequent Vowel and Consonant][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 a string `s` consisting of lowercase English letters (`'a'` to `'z'`). + +Your task is to: + +- Find the vowel (one of `'a'`, `'e'`, `'i'`, `'o'`, or `'u'`) with the **maximum** frequency. +- Find the consonant (all other letters excluding vowels) with the **maximum** frequency. + +Return the sum of the two frequencies. + +**Note**: If multiple vowels or consonants have the same maximum frequency, you may choose any one of them. If there are no vowels or no consonants in the string, consider their frequency as 0. + +The **frequency** of a letter `x` is the number of times it occurs in the string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "successes" -## 题意 -> ... +Output: 6 -## 题解 +Explanation: -### 思路1 -> ... -Find Most Frequent Vowel and Consonant -```go +The vowels are: 'u' (frequency 1), 'e' (frequency 2). The maximum frequency is 2. +The consonants are: 's' (frequency 4), 'c' (frequency 2). The maximum frequency is 4. +The output is 2 + 4 = 6. ``` +**Example 2:** + +``` +Input: s = "aeiaeia" + +Output: 3 + +Explanation: + +The vowels are: 'a' (frequency 3), 'e' ( frequency 2), 'i' (frequency 2). The maximum frequency is 3. +There are no consonants in s. Hence, maximum consonant frequency = 0. +The output is 3 + 0 = 3. +``` ## 结语 diff --git a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go index d115ccf5e..a7f5644ff 100644 --- a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go +++ b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + count := [26]int{} + for _, b := range []byte(s) { + count[b-'a']++ + } + vowel, consonant := 0, 0 + for i := 'a'; i <= 'z'; i++ { + if i == 'a' || i == 'e' || i == 'i' || i == 'o' || i == 'u' { + vowel = max(vowel, count[i-'a']) + continue + } + consonant = max(consonant, count[i-'a']) + } + return vowel + consonant } diff --git a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go index 14ff50eb4..8868f312b 100644 --- a/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go +++ b/leetcode/3501-3600/3541.Find-Most-Frequent-Vowel-and-Consonant/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "successes", 6}, + {"TestCase2", "aeiaeia", 3}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e7d820de3c0ec640fb3ea62f20b87f0ca27e3656 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 14 Sep 2025 17:18:33 +0800 Subject: [PATCH 390/450] Add solution and test-cases for problem 1419 --- .../README.md | 41 +++++++++++++++++ .../Solution.go | 45 ++++++++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/README.md diff --git a/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/README.md b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/README.md new file mode 100644 index 000000000..fbcd7b1c3 --- /dev/null +++ b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/README.md @@ -0,0 +1,41 @@ +# [1419.Minimum Number of Frogs Croaking][title] + +## Description +You are given the string `croakOfFrogs`, which represents a combination of the string `"croak"` from different frogs, that is, multiple frogs can croak at the same time, so multiple `"croak"` are mixed. + +Return the minimum number of different frogs to finish all the croaks in the given string. + +A valid `"croak"` means a frog is printing five letters `'c'`, `'r'`, `'o'`, `'a'`, and `'k'` **sequentially**. The frogs have to print all five letters to finish a croak. If the given string is not a combination of a valid `"croak"` return `-1`. + +**Example 1:** + +``` +Input: croakOfFrogs = "croakcroak" +Output: 1 +Explanation: One frog yelling "croak" twice. +``` + +**Example 2:** + +``` +Input: croakOfFrogs = "crcoakroak" +Output: 2 +Explanation: The minimum number of frogs is two. +The first frog could yell "crcoakroak". +The second frog could yell later "crcoakroak". +``` + +**Example 3:** + +``` +Input: croakOfFrogs = "croakcrook" +Output: -1 +Explanation: The given string is an invalid combination of "croak" from different frogs. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-frogs-croaking +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go index d115ccf5e..a9e3d6716 100755 --- a/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go +++ b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(croakOfFrogs string) int { + if croakOfFrogs[0] != 'c' { + return -1 + } + indies := map[byte]int{ + 'c': 0, 'r': 1, 'o': 2, 'a': 3, 'k': 4, + } + ret, free := 0, 0 + state := [5]int{} + for _, b := range []byte(croakOfFrogs) { + // croak + switch b { + case 'c': + // 一个新青蛙 + if free > 0 { + free-- + } else { + ret++ + } + state[indies[b]]++ + case 'r', 'o', 'a': + if state[indies[b]-1] == 0 { + return -1 + } + state[indies[b]-1]-- + state[indies[b]]++ + case 'k': + if state[indies[b]-1] == 0 { + return -1 + } + state[indies[b]-1]-- + free++ + default: + return -1 + } + } + for i := 0; i < 5; i++ { + if state[i] > 0 { + return -1 + } + } + + return ret } diff --git a/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go index 14ff50eb4..e67ea3a8b 100755 --- a/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go +++ b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "croakcroak", 1}, + {"TestCase2", "crcoakroak", 2}, + {"TestCase3", "croakcrook", -1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cd872d96faa14e1046043a7cc5f0f3d099ae2d28 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 15 Sep 2025 08:51:47 +0800 Subject: [PATCH 391/450] Add solution and test-cases for problem 1935 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 21 +++++++++++-- .../Solution_test.go | 23 +++++++------- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md index d2d12e7dd..c046d502a 100755 --- a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md +++ b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md @@ -1,28 +1,33 @@ # [1935.Maximum Number of Words You Can Type][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 +There is a malfunctioning keyboard where some letter keys do not work. All other keys on the keyboard work properly. + +Given a string `text` of words separated by a single space (no leading or trailing spaces) and a string `brokenLetters` of all **distinct** letter keys that are broken, return the **number of words** in `text` you can fully type using this keyboard. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: text = "hello world", brokenLetters = "ad" +Output: 1 +Explanation: We cannot type "world" because the 'd' key is broken. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Number of Words You Can Type -```go +``` +Input: text = "leet code", brokenLetters = "lt" +Output: 1 +Explanation: We cannot type "leet" because the 'l' and 't' keys are broken. ``` +**Example 3:** + +``` +Input: text = "leet code", brokenLetters = "e" +Output: 0 +Explanation: We cannot type either word because the 'e' key is broken. +``` ## 结语 diff --git a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go index d115ccf5e..b3318beb1 100644 --- a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go +++ b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(text string, brokenLetters string) int { + broken := [26]bool{} + for _, b := range brokenLetters { + broken[b-'a'] = true + } + ret, i := 0, 0 + for _, word := range strings.Split(text, " ") { + for i = 0; i < len(word); i++ { + if broken[word[i]-'a'] { + break + } + } + if i == len(word) { + ret++ + } + } + return ret } diff --git a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go index 14ff50eb4..a31580733 100644 --- a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go +++ b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs string + brokenLetters string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "hello world", "ad", 1}, + {"TestCase2", "leet code", "lt", 1}, + {"TestCase3", "leet code", "e", 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.brokenLetters) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.brokenLetters) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 582334a24bd8893907613a469ec1e9f3ac36725f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 16 Sep 2025 09:21:55 +0800 Subject: [PATCH 392/450] Add solution and test-cases for problem 2197 --- .../README.md | 47 +++++++++++++------ .../Solution.go | 33 ++++++++++++- .../Solution_test.go | 13 +++-- 3 files changed, 70 insertions(+), 23 deletions(-) diff --git a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md index 63ee94526..0fc2949ba 100755 --- a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md +++ b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md @@ -1,28 +1,47 @@ # [2197.Replace Non-Coprime Numbers in Array][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 integers `nums`. Perform the following steps: + +1. Find **any** two **adjacent** numbers in nums that are **non-coprime**. +2. If no such numbers are found, **stop** the process. +3. Otherwise, delete the two numbers and **replace** them with their **LCM (Least Common Multiple)**. +4. **Repeat** this process as long as you keep finding two adjacent non-coprime numbers. + +Return the **final** modified array. It can be shown that replacing adjacent non-coprime numbers in **any** arbitrary order will lead to the same result. + +The test cases are generated such that the values in the final array are **less than or equal to 10^8**. + +Two values `x` and `y` are **non-coprime** if `GCD(x, y) > 1` where `GCD(x, y)` is the **Greatest Common Divisor** of `x` and `y`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [6,4,3,2,7,6,2] +Output: [12,7,6] +Explanation: +- (6, 4) are non-coprime with LCM(6, 4) = 12. Now, nums = [12,3,2,7,6,2]. +- (12, 3) are non-coprime with LCM(12, 3) = 12. Now, nums = [12,2,7,6,2]. +- (12, 2) are non-coprime with LCM(12, 2) = 12. Now, nums = [12,7,6,2]. +- (6, 2) are non-coprime with LCM(6, 2) = 6. Now, nums = [12,7,6]. +There are no more adjacent non-coprime numbers in nums. +Thus, the final modified array is [12,7,6]. +Note that there are other ways to obtain the same resultant array. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Replace Non-Coprime Numbers in Array -```go ``` - +Input: nums = [2,2,1,1,3,3,3] +Output: [2,1,1,3] +Explanation: +- (3, 3) are non-coprime with LCM(3, 3) = 3. Now, nums = [2,2,1,1,3,3]. +- (3, 3) are non-coprime with LCM(3, 3) = 3. Now, nums = [2,2,1,1,3]. +- (2, 2) are non-coprime with LCM(2, 2) = 2. Now, nums = [2,1,1,3]. +There are no more adjacent non-coprime numbers in nums. +Thus, the final modified array is [2,1,1,3]. +Note that there are other ways to obtain the same resultant array. +``` ## 结语 diff --git a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go index d115ccf5e..cbfb52643 100644 --- a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go +++ b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +func gcd2197(a, b int) int { + for b != 0 { + a, b = b, a%b + } + return a +} + +func lcm2197(a, b, gcd int) int { + return a / gcd * b +} + +func Solution(nums []int) []int { + l := len(nums) + stack := make([]int, l) + stack[0] = nums[0] + index := 0 + for i := 1; i < len(nums); i++ { + g := gcd2197(stack[index], nums[i]) + // 如果可以一只gcd下去,那就一只gcd2197 + cmp := nums[i] + for ; index >= 0; index-- { + g = gcd2197(stack[index], cmp) + if g == 1 { + break + } + cmp = lcm2197(stack[index], cmp, g) + } + index++ + stack[index] = cmp + } + return stack[:index+1] } diff --git a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution_test.go b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution_test.go index 14ff50eb4..f42cb861b 100644 --- a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution_test.go +++ b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/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{6, 4, 3, 2, 7, 6, 2}, []int{12, 7, 6}}, + {"TestCase2", []int{2, 2, 1, 1, 3, 3, 3}, []int{2, 1, 1, 3}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 196ee0e26737864e2c10817f4e71b3f44758154b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 17 Sep 2025 09:07:16 +0800 Subject: [PATCH 393/450] Add solution and test-cases for problem 1414 --- .../README.md | 44 +++++++++++++++++++ .../Solution.go | 17 ++++++- .../Solution_test.go | 14 +++--- 3 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/README.md diff --git a/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/README.md b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/README.md new file mode 100644 index 000000000..4a1104914 --- /dev/null +++ b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/README.md @@ -0,0 +1,44 @@ +# [1414.Find the Minimum Number of Fibonacci Numbers Whose Sum Is K][title] + +## Description +Given an integer `k`, return the minimum number of Fibonacci numbers whose sum is equal to `k`. The same Fibonacci number can be used multiple times. + +The Fibonacci numbers are defined as: + +- `F1 = 1` +- `F2 = 1` +- `Fn = Fn-1 + Fn-2 for n > 2.` + +It is guaranteed that for the given constraints we can always find such Fibonacci numbers that sum up to `k`. + +**Example 1:** + +``` +Input: k = 7 +Output: 2 +Explanation: The Fibonacci numbers are: 1, 1, 2, 3, 5, 8, 13, ... +For k = 7 we can use 2 + 5 = 7. +``` + +**Example 2:** + +``` +Input: k = 10 +Output: 2 +Explanation: For k = 10 we can use 2 + 8 = 10. +``` + +**Example 3:** + +``` +Input: k = 19 +Output: 3 +Explanation: For k = 19 we can use 1 + 5 + 13 = 19. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-minimum-number-of-fibonacci-numbers-whose-sum-is-k +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go index d115ccf5e..cba7d61ed 100755 --- a/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go +++ b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(k int) int { + fb := []int{1, 1} + for i := 2; i < 44 && fb[i-1]+fb[i-2] <= k; i++ { + fb = append(fb, fb[i-1]+fb[i-2]) + } + ret := 0 + // 5 + for index := len(fb) - 1; index >= 0 && k > 0; index-- { + if k < fb[index] { + continue + } + ret += k / fb[index] + k %= fb[index] + } + return ret } diff --git a/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution_test.go b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution_test.go index 14ff50eb4..840e0806b 100755 --- a/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution_test.go +++ b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution_test.go @@ -10,12 +10,12 @@ 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", 7, 2}, + {"TestCase2", 10, 2}, + {"TestCase3", 19, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bb51335f45dc5b70b0c2bcb1f71750e2b9cf1be3 Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 17 Sep 2025 22:47:24 +0800 Subject: [PATCH 394/450] update go.mod --- .github/workflows/test.yml | 2 +- go.mod | 22 +++++++++++---------- go.sum | 40 +++++++++++++++++++++----------------- 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bdfe2b7c2..9f70395cf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '^1.25.1' + go-version: '^1.25' id: go - name: Get dependencies run: go mod download diff --git a/go.mod b/go.mod index 0c65f5f3e..fe730b36d 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,17 @@ module awesome-golang-algorithm -go 1.24 +go 1.25 + require ( - github.com/imroc/req/v3 v3.54.2 + github.com/imroc/req/v3 v3.55.0 github.com/stretchr/testify v1.11.1 ) require ( github.com/andybalholm/brotli v1.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/icholy/digest v1.1.0 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -18,14 +20,14 @@ require ( github.com/quic-go/quic-go v0.54.0 // indirect github.com/refraction-networking/utls v1.8.0 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect - go.uber.org/mock v0.5.2 // indirect - golang.org/x/crypto v0.40.0 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.42.0 // indirect - golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/text v0.27.0 // indirect - golang.org/x/tools v0.35.0 // indirect + go.uber.org/mock v0.6.0 // indirect + golang.org/x/crypto v0.42.0 // indirect + golang.org/x/mod v0.28.0 // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/sync v0.17.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + golang.org/x/tools v0.37.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 65e77a342..63042c66a 100644 --- a/go.sum +++ b/go.sum @@ -3,12 +3,15 @@ github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUS github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4= github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y= -github.com/imroc/req/v3 v3.54.2 h1:1eWvCPiz3mSwap7HWqdHN2biuoue+n+mpYWsYiXeMB0= -github.com/imroc/req/v3 v3.54.2/go.mod h1:nR52xB4Ogdwst/UW3QLb2wUiR9ZCLYhiLX9iyksae0I= +github.com/imroc/req/v3 v3.55.0 h1:vg2Q33TGU12wZWZyPkiPbCGGTeiOmlEOdOwHLH03//I= +github.com/imroc/req/v3 v3.55.0/go.mod h1:MOn++r2lE4+du3nuefTaPGQ6pY3/yRP2r1pFK1BUqq0= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -34,22 +37,23 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= -go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= -golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= -golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= -golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= +go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= +golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= +golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= +golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= From b29f3c314b6a3be1a49b9e5a5daf5ee6727ef7cc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 18 Sep 2025 22:50:17 +0800 Subject: [PATCH 395/450] Add solution and test-cases for problem 3408 --- .../3408.Design-Task-Manager/README.md | 46 ++++--- .../3408.Design-Task-Manager/Solution.go | 116 +++++++++++++++++- .../3408.Design-Task-Manager/Solution_test.go | 28 +++-- 3 files changed, 163 insertions(+), 27 deletions(-) diff --git a/leetcode/3401-3500/3408.Design-Task-Manager/README.md b/leetcode/3401-3500/3408.Design-Task-Manager/README.md index 4c979a7eb..2f9f78444 100755 --- a/leetcode/3401-3500/3408.Design-Task-Manager/README.md +++ b/leetcode/3401-3500/3408.Design-Task-Manager/README.md @@ -1,28 +1,42 @@ # [3408.Design Task Manager][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 +There is a task management system that allows users to manage their tasks, each associated with a priority. The system should efficiently handle adding, modifying, executing, and removing tasks. -**Example 1:** +Implement the `TaskManager` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `TaskManager(vector>& tasks)` initializes the task manager with a list of user-task-priority triples. Each element in the input list is of the form `[userId, taskId, priority]`, which adds a task to the specified user with the given priority. -## 题意 -> ... +- `void add(int userId, int taskId, int priority)` adds a task with the specified `taskId` and `priority` to the user with `userId`. It is **guaranteed** that `taskId` does not exist in the system. -## 题解 +- `void edit(int taskId, int newPriority)` updates the priority of the existing `taskId` to `newPriority`. It is **guaranteed** that `taskId` exists in the system. -### 思路1 -> ... -Design Task Manager -```go -``` +- `void rmv(int taskId)` removes the task identified by `taskId` from the system. It is **guaranteed** that `taskId` exists in the system. + +- `int execTop()` executes the task with the **highest** priority across all users. If there are multiple tasks with the same **highest** priority, execute the one with the highest `taskId`. After executing, the `taskId` is **removed** from the system. Return the `userId` associated with the executed task. If no tasks are available, return -1. +**Note** that a user may be assigned multiple tasks. + +**Example 1:** + +``` +Input: +["TaskManager", "add", "edit", "execTop", "rmv", "add", "execTop"] +[[[[1, 101, 10], [2, 102, 20], [3, 103, 15]]], [4, 104, 5], [102, 8], [], [101], [5, 105, 15], []] + +Output: +[null, null, null, 3, null, null, 5] + +Explanation + +TaskManager taskManager = new TaskManager([[1, 101, 10], [2, 102, 20], [3, 103, 15]]); // Initializes with three tasks for Users 1, 2, and 3. +taskManager.add(4, 104, 5); // Adds task 104 with priority 5 for User 4. +taskManager.edit(102, 8); // Updates priority of task 102 to 8. +taskManager.execTop(); // return 3. Executes task 103 for User 3. +taskManager.rmv(101); // Removes task 101 from the system. +taskManager.add(5, 105, 15); // Adds task 105 with priority 15 for User 5. +taskManager.execTop(); // return 5. Executes task 105 for User 5. +``` ## 结语 diff --git a/leetcode/3401-3500/3408.Design-Task-Manager/Solution.go b/leetcode/3401-3500/3408.Design-Task-Manager/Solution.go index d115ccf5e..1570e8d71 100644 --- a/leetcode/3401-3500/3408.Design-Task-Manager/Solution.go +++ b/leetcode/3401-3500/3408.Design-Task-Manager/Solution.go @@ -1,5 +1,119 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type task3408 struct { + UserID, ID, Priority int + index int +} + +type TaskList struct { + items []*task3408 +} + +func (t *TaskList) Len() int { + return len(t.items) +} +func (t *TaskList) Swap(i, j int) { + t.items[i], t.items[j] = t.items[j], t.items[i] + t.items[i].index = i + t.items[j].index = j +} + +func (t *TaskList) Less(i, j int) bool { + a, b := t.items[i], t.items[j] + if a.Priority == b.Priority { + return a.ID > b.ID + } + return a.Priority > b.Priority +} + +func (t *TaskList) Push(x any) { + item := x.(*task3408) + item.index = len(t.items) + t.items = append(t.items, item) +} + +func (t *TaskList) Pop() any { + old := t.items + l := len(old) + x := old[l-1] + t.items = old[:l-1] return x } + +type TaskManager struct { + taskHeap *TaskList + taskIndex map[int]*task3408 +} + +func Constructor(tasks [][]int) TaskManager { + th := &TaskList{items: make([]*task3408, 0)} + tm := TaskManager{taskHeap: th, taskIndex: make(map[int]*task3408)} + // userId, taskId, priority + for _, task := range tasks { + tm.Add(task[0], task[1], task[2]) + } + return tm +} + +func (this *TaskManager) Add(userId int, taskId int, priority int) { + item := &task3408{ + UserID: userId, + ID: taskId, + Priority: priority, + } + this.taskIndex[taskId] = item + heap.Push(this.taskHeap, item) + //this.taskHeap.Push(item) +} + +func (this *TaskManager) Edit(taskId int, newPriority int) { + item := this.taskIndex[taskId] + item.Priority = newPriority + heap.Fix(this.taskHeap, item.index) +} + +func (this *TaskManager) Rmv(taskId int) { + item := this.taskIndex[taskId] + delete(this.taskIndex, taskId) + heap.Remove(this.taskHeap, item.index) +} + +func (this *TaskManager) ExecTop() int { + if len(this.taskHeap.items) == 0 { + return -1 + } + top := heap.Pop(this.taskHeap).(*task3408) + return top.UserID +} + +type op struct { + name string + userId, taskId, priority int +} + +func Solution(input [][]int, ops []op) []int { + c := Constructor(input) + var ret []int + for _, o := range ops { + if o.name == "add" { + c.Add(o.userId, o.taskId, o.priority) + continue + } + if o.name == "edit" { + c.Edit(o.taskId, o.priority) + continue + } + if o.name == "exec" { + ret = append(ret, c.ExecTop()) + continue + } + if o.name == "rmv" { + c.Rmv(o.taskId) + } + } + return ret +} diff --git a/leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go b/leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go index 14ff50eb4..66e9b8c49 100644 --- a/leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go +++ b/leetcode/3401-3500/3408.Design-Task-Manager/Solution_test.go @@ -10,30 +10,38 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + ops []op + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 101, 10}, {2, 102, 20}, {3, 103, 15}, + }, []op{ + {name: "add", userId: 4, taskId: 104, priority: 5}, + {name: "edit", taskId: 102, priority: 8}, + {name: "exec"}, + {name: "rmv", taskId: 101}, + {name: "add", userId: 5, taskId: 105, priority: 15}, + {name: "exec"}, + }, []int{3, 5}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2a0998864c6a4ca81cb7e48f3b320af8b76057fd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 20 Sep 2025 09:36:32 +0800 Subject: [PATCH 396/450] Add solution and test-cases for problem 3508 --- .../3501-3600/3508.Implement-Router/README.md | 74 ++++++++++++--- .../3508.Implement-Router/Solution.go | 95 ++++++++++++++++++- .../3508.Implement-Router/Solution_test.go | 32 +++++-- 3 files changed, 176 insertions(+), 25 deletions(-) diff --git a/leetcode/3501-3600/3508.Implement-Router/README.md b/leetcode/3501-3600/3508.Implement-Router/README.md index 313346934..ab2dbad05 100755 --- a/leetcode/3501-3600/3508.Implement-Router/README.md +++ b/leetcode/3501-3600/3508.Implement-Router/README.md @@ -1,28 +1,76 @@ # [3508.Implement Router][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 +Design a data structure that can efficiently manage data packets in a network router. Each data packet consists of the following attributes: + +- `source`: A unique identifier for the machine that generated the packet. +- `destination`: A unique identifier for the target machine. +- `timestamp`: The time at which the packet arrived at the router. + +Implement the `Router` class: + +`Router(int memoryLimit)`: Initializes the Router object with a fixed memory limit. + +- `memoryLimit` is the **maximum** number of packets the router can store at any given time. +- If adding a new packet would exceed this limit, the **oldest** packet must be removed to free up space. + +` bool addPacket(int source, int destination, int timestamp)`: Adds a packet with the given attributes to the router. + +- A packet is considered a duplicate if another packet with the same `source`, `destination`, and `timestamp` already exists in the router. +- Return `true` if the packet is successfully added (i.e., it is not a duplicate); otherwise return `false`. + +` int[] forwardPacket()`: Forwards the next packet in FIFO (First In First Out) order. + +- Remove the packet from storage. +- Return the packet as an array `[source, destination, timestamp]`. +- If there are no packets to forward, return an empty array. + +`int getCount(int destination, int startTime, int endTime)`: + +- Returns the number of packets currently stored in the router (i.e., not yet forwarded) that have the specified destination and have timestamps in the inclusive range `[startTime, endTime]`. + +**Note** that queries for `addPacket` will be made in increasing order of `timestamp`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: +["Router", "addPacket", "addPacket", "addPacket", "addPacket", "addPacket", "forwardPacket", "addPacket", "getCount"] +[[3], [1, 4, 90], [2, 5, 90], [1, 4, 90], [3, 5, 95], [4, 5, 105], [], [5, 2, 110], [5, 100, 110]] -## 题意 -> ... +Output: +[null, true, true, false, true, true, [2, 5, 90], true, 1] -## 题解 +Explanation -### 思路1 -> ... -Implement Router -```go +Router router = new Router(3); // Initialize Router with memoryLimit of 3. +router.addPacket(1, 4, 90); // Packet is added. Return True. +router.addPacket(2, 5, 90); // Packet is added. Return True. +router.addPacket(1, 4, 90); // This is a duplicate packet. Return False. +router.addPacket(3, 5, 95); // Packet is added. Return True +router.addPacket(4, 5, 105); // Packet is added, [1, 4, 90] is removed as number of packets exceeds memoryLimit. Return True. +router.forwardPacket(); // Return [2, 5, 90] and remove it from router. +router.addPacket(5, 2, 110); // Packet is added. Return True. +router.getCount(5, 100, 110); // The only packet with destination 5 and timestamp in the inclusive range [100, 110] is [4, 5, 105]. Return 1. ``` +**Example 2:** + +``` +Input: +["Router", "addPacket", "forwardPacket", "forwardPacket"] +[[2], [7, 4, 90], [], []] + +Output: +[null, true, [7, 4, 90], []] + +Explanation + +Router router = new Router(2); // Initialize Router with memoryLimit of 2. +router.addPacket(7, 4, 90); // Return True. +router.forwardPacket(); // Return [7, 4, 90]. +router.forwardPacket(); // There are no packets left, return []. +``` ## 结语 diff --git a/leetcode/3501-3600/3508.Implement-Router/Solution.go b/leetcode/3501-3600/3508.Implement-Router/Solution.go index d115ccf5e..53511e15a 100644 --- a/leetcode/3501-3600/3508.Implement-Router/Solution.go +++ b/leetcode/3501-3600/3508.Implement-Router/Solution.go @@ -1,5 +1,96 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type Router struct { + memoryLimit int + queue [][3]int + // source, dest, timestamp + in map[[3]int]struct{} + + // dest: [source, timestamp] + dest map[int][]int +} + +func Constructor(memoryLimit int) Router { + return Router{ + memoryLimit: memoryLimit, + queue: make([][3]int, 0), + in: map[[3]int]struct{}{}, + dest: make(map[int][]int), + } +} + +func (this *Router) AddPacket(source int, destination int, timestamp int) bool { + key := [3]int{source, destination, timestamp} + if _, ok := this.in[key]; ok { + return false + } + this.in[key] = struct{}{} + cur := len(this.queue) + if cur == this.memoryLimit { + _ = this.ForwardPacket() + } + this.queue = append(this.queue, key) + + this.dest[destination] = append(this.dest[destination], timestamp) + return true +} + +func (this *Router) ForwardPacket() []int { + if len(this.queue) == 0 { + return []int{} + } + + first := this.queue[0] + this.queue = this.queue[1:] + delete(this.in, first) + // 同时移除队列的数据 + sources := this.dest[first[1]] + index := sort.Search(len(sources), func(i int) bool { + return sources[i] >= first[2] + }) + sources = append(sources[:index], sources[index+1:]...) + this.dest[first[1]] = sources + return first[:] +} + +func (this *Router) GetCount(destination int, startTime int, endTime int) int { + sources, ok := this.dest[destination] + if !ok { + return 0 + } + start := sort.Search(len(sources), func(i int) bool { + return sources[i] >= startTime + }) + end := sort.Search(len(sources), func(i int) bool { + return sources[i] > endTime + }) + return end - start +} + +type op struct { + name string + source, destination, timestamp int +} + +func Solution(memoryLimit int, ops []op) []any { + ret := make([]any, 0) + c := Constructor(memoryLimit) + for _, o := range ops { + if o.name == "add" { + ret = append(ret, c.AddPacket(o.source, o.destination, o.timestamp)) + continue + } + + if o.name == "for" { + ret = append(ret, c.ForwardPacket()) + continue + } + + if o.name == "get" { + ret = append(ret, c.GetCount(o.source, o.destination, o.timestamp)) + } + } + return ret } diff --git a/leetcode/3501-3600/3508.Implement-Router/Solution_test.go b/leetcode/3501-3600/3508.Implement-Router/Solution_test.go index 14ff50eb4..dcedcbfce 100644 --- a/leetcode/3501-3600/3508.Implement-Router/Solution_test.go +++ b/leetcode/3501-3600/3508.Implement-Router/Solution_test.go @@ -10,30 +10,42 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + ops []op + expect []any }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, []op{ + {"add", 1, 4, 90}, + {"add", 2, 5, 90}, + {"add", 1, 4, 90}, + {"add", 3, 5, 95}, + {"add", 4, 5, 105}, + {"for", 0, 0, 0}, + {"add", 5, 2, 110}, + {"get", 5, 100, 110}, + }, []any{true, true, false, true, true, []int{2, 5, 90}, true, 1}}, + + {"TestCase12", 2, []op{ + {"add", 7, 4, 90}, {"for", 0, 0, 0}, {"for", 0, 0, 0}, + }, []any{true, []int{7, 4, 90}, []int{}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fb159f550fa56a490286189cac773c86d3a77be2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 21 Sep 2025 16:56:47 +0800 Subject: [PATCH 397/450] Add solution and test-cases for problem 1912 --- .../1912.Design-Movie-Rental-System/README.md | 49 +++-- .../Solution.go | 181 +++++++++++++++++- .../Solution_test.go | 31 +-- 3 files changed, 233 insertions(+), 28 deletions(-) diff --git a/leetcode/1901-2000/1912.Design-Movie-Rental-System/README.md b/leetcode/1901-2000/1912.Design-Movie-Rental-System/README.md index 6716dc1e5..da572334e 100755 --- a/leetcode/1901-2000/1912.Design-Movie-Rental-System/README.md +++ b/leetcode/1901-2000/1912.Design-Movie-Rental-System/README.md @@ -1,28 +1,45 @@ # [1912.Design Movie Rental System][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 have a movie renting company consisting of `n` shops. You want to implement a renting system that supports searching for, booking, and returning movies. The system should also support generating a report of the currently rented movies. -**Example 1:** +Each movie is given as a 2D integer array `entries` where `entries[i] = [shopi, moviei, pricei]` indicates that there is a copy of movie `moviei` at shop `shopi` with a rental price of `pricei`. Each shop carries **at most one** copy of a movie `moviei`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +The system should support the following functions: -## 题意 -> ... +- **Search**: Finds the **cheapest 5 shops** that have an **unrented copy** of a given movie. The shops should be sorted by **price** in ascending order, and in case of a tie, the one with the **smaller** `shopi` should appear first. If there are less than 5 matching shops, then all of them should be returned. If no shop has an unrented copy, then an empty list should be returned. +- **Rent**: Rents an **unrented copy** of a given movie from a given shop. +- **Drop**: Drops off a **previously rented copy** of a given movie at a given shop. +- **Report**: Returns the **cheapest 5 rented movies** (possibly of the same movie ID) as a 2D list `res` where `res[j] = [shopj, moviej]` describes that the `jth` cheapest rented movie `moviei` was rented from the shop `shopj`. The movies in `res` should be sorted by **price** in ascending order, and in case of a tie, the one with the **smaller** shopj should appear first, and if there is still tie, the one with the **smaller** `moviej` should appear first. If there are fewer than 5 rented movies, then all of them should be returned. If no movies are currently being rented, then an empty list should be returned. -## 题解 +Implement the `MovieRentingSystem` class: -### 思路1 -> ... -Design Movie Rental System -```go -``` +- `MovieRentingSystem(int n, int[][] entries)` Initializes the `MovieRentingSystem` object with `n` shops and the movies in `entries`. +- `List search(int movie)` Returns a list of shops that have an **unrented copy** of the given `movie` as described above. +- `void rent(int shop, int movie)` Rents the given `movie` from the given `shop`. +- `void drop(int shop, int movie)` Drops off a previously rented `movie` at the given `shop`. +- `List> report()` Returns a list of cheapest **rented** movies as described above. +**Note**: The test cases will be generated such that `rent` will only be called if the shop has an **unrented** copy of the movie, and `drop` will only be called if the shop had **previously rented** out the movie. + +**Example 1:** + +``` +Input +["MovieRentingSystem", "search", "rent", "rent", "report", "drop", "search"] +[[3, [[0, 1, 5], [0, 2, 6], [0, 3, 7], [1, 1, 4], [1, 2, 7], [2, 1, 5]]], [1], [0, 1], [1, 2], [], [1, 2], [2]] +Output +[null, [1, 0, 2], null, null, [[0, 1], [1, 2]], null, [0, 1]] + +Explanation +MovieRentingSystem movieRentingSystem = new MovieRentingSystem(3, [[0, 1, 5], [0, 2, 6], [0, 3, 7], [1, 1, 4], [1, 2, 7], [2, 1, 5]]); +movieRentingSystem.search(1); // return [1, 0, 2], Movies of ID 1 are unrented at shops 1, 0, and 2. Shop 1 is cheapest; shop 0 and 2 are the same price, so order by shop number. +movieRentingSystem.rent(0, 1); // Rent movie 1 from shop 0. Unrented movies at shop 0 are now [2,3]. +movieRentingSystem.rent(1, 2); // Rent movie 2 from shop 1. Unrented movies at shop 1 are now [1]. +movieRentingSystem.report(); // return [[0, 1], [1, 2]]. Movie 1 from shop 0 is cheapest, followed by movie 2 from shop 1. +movieRentingSystem.drop(1, 2); // Drop off movie 2 at shop 1. Unrented movies at shop 1 are now [1,2]. +movieRentingSystem.search(2); // return [0, 1]. Movies of ID 2 are unrented at shops 0 and 1. Shop 0 is cheapest, followed by shop 1. +``` ## 结语 diff --git a/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go index d115ccf5e..bc7f88d70 100644 --- a/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go +++ b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go @@ -1,5 +1,184 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "sort" +) + +type movie struct { + shop, movie, price, index int +} + +type movieList []*movie + +func (m *movieList) Len() int { + return len(*m) +} +func (m *movieList) Swap(i, j int) { + (*m)[i], (*m)[j] = (*m)[j], (*m)[i] + (*m)[i].index = i + (*m)[j].index = j +} + +func (m *movieList) Less(i, j int) bool { + a, b := (*m)[i], (*m)[j] + if a.price != b.price { + return a.price < b.price + } + if a.shop != b.shop { + return a.shop < b.shop + } + return a.movie < b.movie +} + +func (m *movieList) Push(x any) { + mv := x.(*movie) + l := len(*m) + mv.index = l + *m = append(*m, mv) +} + +func (m *movieList) Pop() any { + old := *m + l := len(old) + x := old[l-1] + *m = old[:l-1] return x } + +type MovieRentingSystem struct { + // 每个电影自己的 + movieShops map[int]*movieList + // 已经租界的电影列表 + rentQueue *movieList + index map[[2]int]*movie + + n int +} + +func Constructor(n int, entries [][]int) MovieRentingSystem { + instance := MovieRentingSystem{ + movieShops: make(map[int]*movieList), + rentQueue: &movieList{}, + index: make(map[[2]int]*movie), + n: n, + } + // shop, movie, price + // movie, shop + for _, ent := range entries { + // shop, movie + key := [2]int{ent[0], ent[1]} + if _, ok := instance.movieShops[ent[1]]; !ok { + instance.movieShops[ent[1]] = &movieList{} + } + m := &movie{shop: ent[0], movie: ent[1], price: ent[2], index: 0} + instance.index[key] = m + heap.Push(instance.movieShops[ent[1]], m) + } + return instance +} + +func (this *MovieRentingSystem) Search(m int) []int { + top5 := [][]int{} + list := this.movieShops[m] + if list == nil { + return nil + } + store := make([]*movie, 5) + index := 0 + for list.Len() > 0 && index < 5 { + top := heap.Pop(list).(*movie) + store[index] = top + index++ + top5 = append(top5, []int{top.shop, top.price}) + } + for i := 0; i < index; i++ { + heap.Push(list, store[i]) + } + sort.Slice(top5, func(i, j int) bool { + a, b := top5[i], top5[j] + if a[1] != b[1] { + return a[1] < b[1] + } + return a[0] < b[0] + }) + ret := make([]int, len(top5)) + for i := range top5 { + ret[i] = top5[i][0] + } + + return ret +} + +func (this *MovieRentingSystem) Rent(shop int, m int) { + // 需要记录价格 + key := [2]int{shop, m} + item := this.index[key] + _ = heap.Remove(this.movieShops[m], item.index) + heap.Push(this.rentQueue, item) +} + +func (this *MovieRentingSystem) Drop(shop int, m int) { + key := [2]int{shop, m} + item := this.index[key] + heap.Remove(this.rentQueue, item.index) + heap.Push(this.movieShops[m], item) +} + +func (this *MovieRentingSystem) Report() [][]int { + top5 := [][]int{} + store := make([]*movie, 5) + index := 0 + for this.rentQueue.Len() > 0 && index < 5 { + top := heap.Pop(this.rentQueue).(*movie) + store[index] = top + index++ + top5 = append(top5, []int{top.shop, top.movie, top.price}) + } + for i := 0; i < index; i++ { + heap.Push(this.rentQueue, store[i]) + } + + sort.Slice(top5, func(i, j int) bool { + a, b := top5[i], top5[j] + if a[2] != b[2] { + return a[2] < b[2] + } + if a[0] != b[0] { + return a[0] < b[0] + } + return a[1] < b[1] + }) + ret := make([][]int, len(top5)) + for i := range top5 { + ret[i] = top5[i][:2] + } + + return ret +} + +type op struct { + name string + shop, movie int +} + +func Solution(m int, entries [][]int, ops []op) []any { + c := Constructor(m, entries) + ret := make([]any, 0) + for _, o := range ops { + if o.name == "rent" { + c.Rent(o.shop, o.movie) + continue + } + if o.name == "drop" { + c.Drop(o.shop, o.movie) + continue + } + if o.name == "search" { + ret = append(ret, c.Search(o.movie)) + continue + } + ret = append(ret, c.Report()) + } + return ret +} diff --git a/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go index 14ff50eb4..151ff65dc 100644 --- a/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go +++ b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go @@ -9,31 +9,40 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + m int + entries [][]int + ops []op + expect []any }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{ + {0, 1, 5}, {0, 2, 6}, {0, 3, 7}, {1, 1, 4}, {1, 2, 7}, {2, 1, 5}, + }, []op{ + {name: "search", movie: 1}, + {name: "rent", shop: 0, movie: 1}, + {name: "rent", shop: 1, movie: 2}, + {name: "report"}, + {name: "drop", shop: 1, movie: 2}, + {name: "search", movie: 2}, + }, []any{[]int{1, 0, 2}, [][]int{{0, 1}, {1, 2}}, []int{0, 1}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.m, c.entries, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.m, c.entries, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8922ba123d07bc6c48cee15843f2b89c0e116377 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 22 Sep 2025 09:13:22 +0800 Subject: [PATCH 398/450] Add solution and test-cases for problem 2012 --- .../2012.Sum-of-Beauty-in-the-Array/README.md | 39 ++++++++++++------- .../Solution.go | 28 ++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 59 insertions(+), 22 deletions(-) diff --git a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md index 962866445..26a532809 100755 --- a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md +++ b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md @@ -1,28 +1,41 @@ # [2012.Sum of Beauty in the Array][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 a **0-indexed** integer array nums. For each index `i` (`1 <= i <= nums.length - 2`) the **beauty** of `nums[i]` equals: + +- `2`, if `nums[j] < nums[i] < nums[k]`, for **all** `0 <= j < i` and for **all** `i < k <= nums.length - 1`. +- `1`, if `nums[i - 1] < nums[i] < nums[i + 1]`, and the previous condition is not satisfied. +- `0`, if none of the previous conditions holds. + +Return the **sum of beauty** of all `nums[i]` where `1 <= i <= nums.length - 2`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3] +Output: 2 +Explanation: For each index i in the range 1 <= i <= 1: +- The beauty of nums[1] equals 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sum of Beauty in the Array -```go ``` +Input: nums = [2,4,6,4] +Output: 1 +Explanation: For each index i in the range 1 <= i <= 2: +- The beauty of nums[1] equals 1. +- The beauty of nums[2] equals 0. +``` + +**Example 3:** +``` +Input: nums = [3,2,1] +Output: 0 +Explanation: For each index i in the range 1 <= i <= 1: +- The beauty of nums[1] equals 0. +``` ## 结语 diff --git a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go index d115ccf5e..5d3ebb88d 100644 --- a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go +++ b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + l := len(nums) + + leftMax := make([]int, l) + rightMin := make([]int, l) + leftMax[0] = nums[0] + for i := 1; i < l; i++ { + leftMax[i] = max(nums[i-1], leftMax[i-1]) + } + rightMin[l-1] = nums[l-1] + for i := l - 2; i >= 0; i-- { + rightMin[i] = min(rightMin[i+1], nums[i+1]) + } + ret := 0 + for i := 1; i < l-1; i++ { + lm := leftMax[i] + rm := rightMin[i] + if nums[i] > lm && nums[i] < rm { + ret += 2 + continue + } + if nums[i] > nums[i-1] && nums[i] < nums[i+1] { + ret++ + } + } + return ret } diff --git a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution_test.go b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution_test.go index 14ff50eb4..44191f824 100644 --- a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution_test.go +++ b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution_test.go @@ -10,12 +10,12 @@ 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, 3}, 2}, + {"TestCase2", []int{2, 4, 6, 4}, 1}, + {"TestCase3", []int{3, 2, 1}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f97c8f7e664cdddecaac4eee5aa4d1684b223e81 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 23 Sep 2025 09:16:03 +0800 Subject: [PATCH 399/450] Add solution and test-cases for problem 1817 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 17 ++++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md index 6cf46d386..cb91e7408 100755 --- a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md +++ b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md @@ -1,28 +1,38 @@ # [1817.Finding the Users Active Minutes][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 the logs for users' actions on LeetCode, and an integer `k`. The logs are represented by a 2D integer array `logs` where each `logs[i] = [IDi, timei]` indicates that the user with IDi performed an action at the minute `timei`. + +**Multiple users** can perform actions simultaneously, and a single user can perform **multiple actions** in the same minute. + +The **user active minutes (UAM)** for a given user is defined as the **number of unique minutes** in which the user performed an action on LeetCode. A minute can only be counted once, even if multiple actions occur during it. + +You are to calculate a **1-indexed** array `answer` of size `k` such that, for each `j` (`1 <= j <= k`), `answer[j]` is the **number of users** whose **UAM** equals `j`. + +Return the array `answer` as described above. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: logs = [[0,5],[1,2],[0,2],[0,5],[1,3]], k = 5 +Output: [0,2,0,0,0] +Explanation: +The user with ID=0 performed actions at minutes 5, 2, and 5 again. Hence, they have a UAM of 2 (minute 5 is only counted once). +The user with ID=1 performed actions at minutes 2 and 3. Hence, they have a UAM of 2. +Since both users have a UAM of 2, answer[2] is 2, and the remaining answer[j] values are 0. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Finding the Users Active Minutes -```go ``` - +Input: logs = [[1,1],[2,2],[2,3]], k = 4 +Output: [1,1,0,0] +Explanation: +The user with ID=1 performed a single action at minute 1. Hence, they have a UAM of 1. +The user with ID=2 performed actions at minutes 2 and 3. Hence, they have a UAM of 2. +There is one user with a UAM of 1 and one with a UAM of 2. +Hence, answer[1] = 1, answer[2] = 1, and the remaining values are 0. +``` ## 结语 diff --git a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go index d115ccf5e..95c3c0643 100644 --- a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go +++ b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(logs [][]int, k int) []int { + ret := make([]int, k) + // 1:1 + // 2:2 + count := make(map[int]map[int]struct{}) + for _, log := range logs { + if _, ok := count[log[0]]; !ok { + count[log[0]] = make(map[int]struct{}) + } + count[log[0]][log[1]] = struct{}{} + } + for _, c := range count { + ret[len(c)-1]++ + } + return ret } diff --git a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go index 14ff50eb4..c41d6e30f 100644 --- a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go +++ b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + logs [][]int + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{0, 5}, {1, 2}, {0, 2}, {0, 5}, {1, 3}}, 5, []int{0, 2, 0, 0, 0}}, + {"TestCase2", [][]int{{1, 1}, {2, 2}, {2, 3}}, 4, []int{1, 1, 0, 0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.logs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.logs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a9a270c6d091ffb314e2ea3551cab00af55724ca Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 24 Sep 2025 09:09:07 +0800 Subject: [PATCH 400/450] Add solution and test-cases for problem 1839 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 30 ++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md index 0795ff28c..d2fbcbabf 100755 --- a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md +++ b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md @@ -1,28 +1,40 @@ # [1839.Longest Substring Of All Vowels in Order][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 +A string is considered **beautiful** if it satisfies the following conditions: + +- Each of the 5 English vowels (`'a'`, `'e'`, `'i'`, `'o'`, `'u'`) must appear **at least once** in it. +- The letters must be sorted in **alphabetical order** (i.e. all `'a'`s before `'e'`s, all `'e'`s before `'i'`s, etc.). + +For example, strings `"aeiou"` and `"aaaaaaeiiiioou"` are considered **beautiful**, but `"uaeio"`, `"aeoiu"`, and `"aaaeeeooo"` are **not beautiful**. + +Given a string `word` consisting of English vowels, return the **length of the longest beautiful substring** of `word`. If no such substring exists, return `0`. + +A **substring** is a contiguous sequence of characters in a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word = "aeiaaioaaaaeiiiiouuuooaauuaeiu" +Output: 13 +Explanation: The longest beautiful substring in word is "aaaaeiiiiouuu" of length 13. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Longest Substring Of All Vowels in Order -```go ``` +Input: word = "aeeeiiiioooauuuaeiou" +Output: 5 +Explanation: The longest beautiful substring in word is "aeiou" of length 5. +``` + +**Example 3:** +``` +Input: word = "a" +Output: 0 +Explanation: There is no beautiful substring, so return 0. +``` ## 结语 diff --git a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go index d115ccf5e..44be239c9 100644 --- a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go +++ b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +type charCount struct { + char byte + count int +} + +func Solution(word string) int { + + pre := byte(' ') + // a, e, i, o, u + group := make([]charCount, 0) + index := -1 + for _, b := range []byte(word) { + if b != pre { + group = append(group, charCount{b, 1}) + index++ + pre = b + continue + } + group[index].count++ + } + ret := 0 + // 1,2,3,4,5 + for i := 0; i <= len(group)-5; i++ { + if group[i].char == 'a' && group[i+1].char == 'e' && group[i+2].char == 'i' && group[i+3].char == 'o' && group[i+4].char == 'u' { + ret = max(ret, group[i].count+group[i+1].count+group[i+2].count+group[i+3].count+group[i+4].count) + } + } + return ret } diff --git a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go index 14ff50eb4..cfc00257a 100644 --- a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go +++ b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aeiaaioaaaaeiiiiouuuooaauuaeiu", 13}, + {"TestCase2", "aeeeiiiioooauuuaeiou", 5}, + {"TestCase3", "a", 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f44d4c14141850b268f5c8d283381b588702e69d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 27 Sep 2025 09:09:05 +0800 Subject: [PATCH 401/450] Add solution and test-cases for problem 812 --- .../801-900/0812.Largest-Triangle-Area/1.png | Bin 0 -> 7486 bytes .../0812.Largest-Triangle-Area/README.md | 26 ++++++-------- .../0812.Largest-Triangle-Area/Solution.go | 32 ++++++++++++++++-- .../Solution_test.go | 16 +++++---- 4 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 leetcode/801-900/0812.Largest-Triangle-Area/1.png diff --git a/leetcode/801-900/0812.Largest-Triangle-Area/1.png b/leetcode/801-900/0812.Largest-Triangle-Area/1.png new file mode 100644 index 0000000000000000000000000000000000000000..611d67dd9440cf7e45e380a6546cd3b27e36337b GIT binary patch literal 7486 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 [!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 +Given an array of points on the **X-Y** plane `points` where `points[i] = [xi, yi]`, return the area of the largest triangle that can be formed by any three different points. Answers within 10-5 of the actual answer will be accepted. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] +Output: 2.00000 +Explanation: The five points are shown in the above figure. The red triangle is the largest. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Largest Triangle Area -```go ``` - +Input: points = [[1,0],[0,0],[0,1]] +Output: 0.50000 +``` ## 结语 diff --git a/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go b/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go index d115ccf5e..9e418367f 100644 --- a/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go +++ b/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +const epsilon = 1e-9 + +func canForm(a, b, c []int) (float64, bool) { + abx := b[0] - a[0] + aby := b[1] - a[1] + acx := c[0] - a[0] + acy := c[1] - a[1] + area := math.Abs(float64(abx*acy - aby*acx)) + if area > epsilon { + return area, true + } + return 0.0, false +} + +func Solution(points [][]int) float64 { + var ret float64 + l := len(points) + for i := 0; i < l-2; i++ { + for j := i + 1; j < l-1; j++ { + for k := j + 1; k < l; k++ { + area, ok := canForm(points[i], points[j], points[k]) + if ok { + ret = max(ret, area/2.0) + } + } + } + } + return ret } diff --git a/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go b/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go index 14ff50eb4..9b4619d5b 100644 --- a/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go +++ b/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go @@ -10,12 +10,14 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {0, 0}, {0, 1}, {1, 0}, {0, 2}, {2, 0}}, 2.00000}, + {"TestCase", [][]int{ + {1, 0}, {0, 0}, {0, 1}, + }, 0.50000}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 534ef6458d18a383b14da7af4a9e48761e8b87cd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 28 Sep 2025 16:53:36 +0800 Subject: [PATCH 402/450] Add solution and test-cases for problem 976 --- .../0976.Largest-Perimeter-Triangle/README.md | 27 +++++++++---------- .../Solution.go | 15 +++++++++-- .../Solution_test.go | 13 +++++---- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/leetcode/901-1000/0976.Largest-Perimeter-Triangle/README.md b/leetcode/901-1000/0976.Largest-Perimeter-Triangle/README.md index 694ba4d5c..fe648f27d 100644 --- a/leetcode/901-1000/0976.Largest-Perimeter-Triangle/README.md +++ b/leetcode/901-1000/0976.Largest-Perimeter-Triangle/README.md @@ -1,28 +1,27 @@ # [976.Largest Perimeter Triangle][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 +Given an integer array `nums`, return the largest perimeter of a triangle with a non-zero area, formed from three of these lengths. If it is impossible to form any triangle of a non-zero area, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,1,2] +Output: 5 +Explanation: You can form a triangle with three side lengths: 1, 2, and 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Largest Perimeter Triangle -```go ``` - +Input: nums = [1,2,1,10] +Output: 0 +Explanation: +You cannot use the side lengths 1, 1, and 2 to form a triangle. +You cannot use the side lengths 1, 1, and 10 to form a triangle. +You cannot use the side lengths 1, 2, and 10 to form a triangle. +As we cannot use any three side lengths to form a triangle of non-zero area, we return 0. +``` ## 结语 diff --git a/leetcode/901-1000/0976.Largest-Perimeter-Triangle/Solution.go b/leetcode/901-1000/0976.Largest-Perimeter-Triangle/Solution.go index d115ccf5e..d0fd8da2c 100644 --- a/leetcode/901-1000/0976.Largest-Perimeter-Triangle/Solution.go +++ b/leetcode/901-1000/0976.Largest-Perimeter-Triangle/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + sort.Ints(nums) + // 1, 1, 2, 10 + l := len(nums) + for i := l - 1; i >= 2; i-- { + a, b, c := nums[i], nums[i-1], nums[i-2] + if a+b > c && a+c > b && b+c > a { + return a + b + c + } + } + return 0 } diff --git a/leetcode/901-1000/0976.Largest-Perimeter-Triangle/Solution_test.go b/leetcode/901-1000/0976.Largest-Perimeter-Triangle/Solution_test.go index 14ff50eb4..27a8f0aab 100644 --- a/leetcode/901-1000/0976.Largest-Perimeter-Triangle/Solution_test.go +++ b/leetcode/901-1000/0976.Largest-Perimeter-Triangle/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{2, 1, 2}, 5}, + {"TestCase2", []int{1, 2, 1, 10}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fb1e0b06a85ac3704703862041ddd2381d64ca04 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 29 Sep 2025 16:50:01 +0800 Subject: [PATCH 403/450] Add solution and test-cases for problem 1039 --- .../README.md | 40 +++++++++++++------ .../Solution.go | 24 ++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 57 insertions(+), 21 deletions(-) diff --git a/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/README.md b/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/README.md index 5a448fbd9..057a40fc0 100644 --- a/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/README.md +++ b/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/README.md @@ -1,28 +1,44 @@ # [1039.Minimum Score Triangulation of Polygon][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 have a convex `n`-sided polygon where each vertex has an integer value. You are given an integer array `values` where `values[i]` is the value of the `ith` vertex in **clockwise order**. + +**Polygon triangulation** is a process where you divide a polygon into a set of triangles and the vertices of each triangle must also be vertices of the original polygon. Note that no other shapes other than triangles are allowed in the division. This process will result in `n - 2` triangles. + +You will **triangulate** the polygon. For each triangle, the weight of that triangle is the product of the values at its vertices. The total score of the triangulation is the sum of these weights over all `n - 2` triangles. + +Return the minimum possible score that you can achieve with some **triangulation** of the polygon. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: values = [1,2,3] + +Output: 6 + +Explanation: The polygon is already triangulated, and the score of the only triangle is 6. ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: values = [3,7,4,5] + +Output: 144 + +Explanation: There are two triangulations, with possible scores: 3*7*5 + 4*5*7 = 245, or 3*4*5 + 3*4*7 = 144. +The minimum score is 144. +``` + +**Example 3:** -### 思路1 -> ... -Minimum Score Triangulation of Polygon -```go ``` +Input: values = [1,3,1,4,1,5] + +Output: 13 +Explanation: The minimum score triangulation is 1*1*3 + 1*1*4 + 1*1*5 + 1*1*1 = 13. +``` ## 结语 diff --git a/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution.go b/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution.go index d115ccf5e..627221b29 100644 --- a/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution.go +++ b/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(values []int) int { + const maxn = (1 << 31) - 1 + + n := len(values) + dp := make([][]int, n) + for i := range n { + dp[i] = make([]int, n) + } + + var cost int + for l := 2; l < n; l++ { + for i := range n - l { + j := i + l + dp[i][j] = maxn + for k := i + 1; k < j; k++ { + cost = dp[i][k] + dp[k][j] + values[i]*values[k]*values[j] + dp[i][j] = min(dp[i][j], cost) + } + } + } + + return dp[0][n-1] } diff --git a/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution_test.go b/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution_test.go index 14ff50eb4..b1381bccd 100644 --- a/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution_test.go +++ b/leetcode/1001-1100/1039.Minimum-Score-Triangulation-of-Polygon/Solution_test.go @@ -10,12 +10,12 @@ 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, 3}, 6}, + {"TestCase2", []int{3, 7, 4, 5}, 144}, + {"TestCase3", []int{1, 3, 1, 4, 1, 5}, 13}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6790ea881318f5787a778a1bc011101ca2599427 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 30 Sep 2025 14:27:21 +0800 Subject: [PATCH 404/450] Add solution and test-cases for problem 1333 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 30 +++++++++++++- .../Solution_test.go | 29 ++++++++------ 3 files changed, 72 insertions(+), 26 deletions(-) diff --git a/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/README.md b/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/README.md index 7cd7a8ffb..4742f174d 100644 --- a/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/README.md +++ b/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/README.md @@ -1,28 +1,41 @@ # [1333.Filter Restaurants by Vegan-Friendly, Price and Distance][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 +Given the array `restaurants` where `restaurants[i] = [idi, ratingi, veganFriendlyi, pricei, distancei]`. You have to filter the restaurants using three filters. + +The `veganFriendly` filter will be either true (meaning you should only include restaurants with `veganFriendlyi` set to true) or false (meaning you can include any restaurant). In addition, you have the filters `maxPrice` and `maxDistance` which are the maximum value for price and distance of restaurants you should consider respectively. + +Return the array of restaurant **IDs** after filtering, ordered by **rating** from highest to lowest. For restaurants with the same rating, order them by **id** from highest to lowest. For simplicity `veganFriendlyi` and `veganFriendly` take value 1 when it is true, and 0 when it is false. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: restaurants = [[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[5,1,1,15,1]], veganFriendly = 1, maxPrice = 50, maxDistance = 10 +Output: [3,1,5] +Explanation: +The restaurants are: +Restaurant 1 [id=1, rating=4, veganFriendly=1, price=40, distance=10] +Restaurant 2 [id=2, rating=8, veganFriendly=0, price=50, distance=5] +Restaurant 3 [id=3, rating=8, veganFriendly=1, price=30, distance=4] +Restaurant 4 [id=4, rating=10, veganFriendly=0, price=10, distance=3] +Restaurant 5 [id=5, rating=1, veganFriendly=1, price=15, distance=1] +After filter restaurants with veganFriendly = 1, maxPrice = 50 and maxDistance = 10 we have restaurant 3, restaurant 1 and restaurant 5 (ordered by rating from highest to lowest). ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Filter Restaurants by Vegan-Friendly, Price and Distance -```go ``` +Input: restaurants = [[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[5,1,1,15,1]], veganFriendly = 0, maxPrice = 50, maxDistance = 10 +Output: [4,3,2,1,5] +Explanation: The restaurants are the same as in example 1, but in this case the filter veganFriendly = 0, therefore all restaurants are considered. +``` + +**Example 3:** +``` +Input: restaurants = [[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[5,1,1,15,1]], veganFriendly = 0, maxPrice = 30, maxDistance = 3 +Output: [4,5] +``` ## 结语 diff --git a/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution.go b/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution.go index d115ccf5e..ec406ab1b 100644 --- a/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution.go +++ b/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(restaurants [][]int, veganFriendly int, maxPrice int, maxDistance int) []int { + left := make([]int, 0) + for i := 0; i < len(restaurants); i++ { + if veganFriendly == 1 && restaurants[i][2] == 0 { + continue + } + if restaurants[i][3] > maxPrice { + continue + } + if restaurants[i][4] > maxDistance { + continue + } + left = append(left, i) + } + sort.Slice(left, func(i, j int) bool { + a, b := restaurants[left[i]], restaurants[left[j]] + if a[1] == b[1] { + return a[0] > b[0] + } + return a[1] > b[1] + }) + ret := make([]int, len(left)) + for i, idx := range left { + ret[i] = restaurants[idx][0] + } + return ret } diff --git a/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution_test.go b/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution_test.go index 14ff50eb4..4ce6a110f 100644 --- a/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution_test.go +++ b/leetcode/1301-1400/1333.Filter-Restaurants-by-Vegan-Friendly-Price-and-Distance/Solution_test.go @@ -9,31 +9,38 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + restaurants [][]int + veganFriendly, maxPrice, maxDistance int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 4, 1, 40, 10}, {2, 8, 0, 50, 5}, {3, 8, 1, 30, 4}, {4, 10, 0, 10, 3}, {5, 1, 1, 15, 1}, + }, 1, 50, 10, []int{3, 1, 5}}, + {"TestCase2", [][]int{ + {1, 4, 1, 40, 10}, {2, 8, 0, 50, 5}, {3, 8, 1, 30, 4}, {4, 10, 0, 10, 3}, {5, 1, 1, 15, 1}, + }, 0, 50, 10, []int{4, 3, 2, 1, 5}}, + {"TestCase3", [][]int{ + {1, 4, 1, 40, 10}, {2, 8, 0, 50, 5}, {3, 8, 1, 30, 4}, {4, 10, 0, 10, 3}, {5, 1, 1, 15, 1}, + }, 0, 30, 3, []int{4, 5}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.restaurants, c.veganFriendly, c.maxPrice, c.maxDistance) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.restaurants, c.veganFriendly, c.maxPrice, c.maxDistance) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 850ba08bad7987c1c9e9b55c809ea2a680bd6a57 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 1 Oct 2025 16:24:15 +0800 Subject: [PATCH 405/450] Add solution and test-cases for problem 1583 --- .../1583.Count-Unhappy-Friends/README.md | 46 +++++++++++++------ .../1583.Count-Unhappy-Friends/Solution.go | 44 +++++++++++++++++- .../Solution_test.go | 32 ++++++++----- 3 files changed, 96 insertions(+), 26 deletions(-) diff --git a/leetcode/1501-1600/1583.Count-Unhappy-Friends/README.md b/leetcode/1501-1600/1583.Count-Unhappy-Friends/README.md index 49fdd8431..9f6706d24 100755 --- a/leetcode/1501-1600/1583.Count-Unhappy-Friends/README.md +++ b/leetcode/1501-1600/1583.Count-Unhappy-Friends/README.md @@ -1,28 +1,48 @@ # [1583.Count Unhappy Friends][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 a list of `preferences` for n friends, where n is always **even**. + +For each person `i`, `preferences[i]` contains a list of friends **sorted** in the **order of preference**. In other words, a friend earlier in the list is more preferred than a friend later in the list. Friends in each list are denoted by integers from `0` to `n-1`. + +All the friends are divided into pairs. The pairings are given in a list `paris`, where `pairs[i] = [xi, yi]` denotes `xi` is paired with `yi` and `yi` is paired with `xi`. + +However, this pairing may cause some of the friends to be unhappy. A friend `x` is unhappy if `x` is paired with `y` and there exists a friend `u` who is paired with `v` but: + +- `x` prefers `u` over `y`, and +- `u` prefers `x` over `v`. + +Return the number of unhappy friends. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, preferences = [[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]], pairs = [[0, 1], [2, 3]] +Output: 2 +Explanation: +Friend 1 is unhappy because: +- 1 is paired with 0 but prefers 3 over 0, and +- 3 prefers 1 over 2. +Friend 3 is unhappy because: +- 3 is paired with 2 but prefers 1 over 2, and +- 1 prefers 3 over 0. +Friends 0 and 2 are happy. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Unhappy Friends -```go ``` +Input: n = 2, preferences = [[1], [0]], pairs = [[1, 0]] +Output: 0 +Explanation: Both friends 0 and 1 are happy. +``` + +**Example 3:** +``` +Input: n = 4, preferences = [[1, 3, 2], [2, 3, 0], [1, 3, 0], [0, 2, 1]], pairs = [[1, 3], [0, 2]] +Output: 4 +``` ## 结语 diff --git a/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go index d115ccf5e..79a151d70 100644 --- a/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go +++ b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, preferences [][]int, pairs [][]int) int { + likeIndex := make([]map[int]int, len(preferences)) + for i, p := range preferences { + likeIndex[i] = make(map[int]int) + for idx, like := range p { + likeIndex[i][like] = idx + } + } + + pair := make(map[int]int) + for _, p := range pairs { + pair[p[0]] = p[1] + pair[p[1]] = p[0] + } + var ret int + for _, p := range pairs { + x, y := p[0], p[1] + for _, u := range preferences[x] { + if u == y { + break + } + if v, ok := pair[u]; ok { + if likeIndex[u][x] < likeIndex[u][v] { + ret++ + break + } + } + } + + for _, u := range preferences[y] { + if u == x { + break + } + if v, ok := pair[u]; ok { + if likeIndex[u][y] < likeIndex[u][v] { + ret++ + break + } + } + } + } + return ret } diff --git a/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go index 14ff50eb4..1ed9e628d 100644 --- a/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go +++ b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go @@ -9,31 +9,41 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + preferences [][]int + pairs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{ + {1, 2, 3}, {3, 2, 0}, {3, 1, 0}, {1, 2, 0}, + }, [][]int{ + {0, 1}, {2, 3}, + }, 2}, + {"TestCase2", 2, [][]int{ + {1}, {0}, + }, [][]int{{1, 0}}, 0}, + {"TestCase3", 4, [][]int{ + {1, 3, 2}, {2, 3, 0}, {1, 3, 0}, {0, 2, 1}, + }, [][]int{{1, 3}, {0, 2}}, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.preferences, c.pairs) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.preferences, c.pairs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6fdf7cfd2d54c5e56d633b31b6596e4c05ed9c69 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 2 Oct 2025 14:11:40 +0800 Subject: [PATCH 406/450] Add solution and test-cases for problem 3527 --- .../README.md | 35 ++++++++++++------- .../Solution.go | 30 ++++++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 56 insertions(+), 22 deletions(-) diff --git a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md index fbf3d0959..eac7e4755 100755 --- a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md +++ b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/README.md @@ -1,28 +1,37 @@ # [3527.Find the Most Common Response][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 a 2D string array `responses` where each `responses[i]` is an array of strings representing survey responses from the `ith` day. + +Return the **most common** response across all days after removing **duplicate** responses within each `responses[i]`. If there is a tie, return the lexicographically smallest response. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: responses = [["good","ok","good","ok"],["ok","bad","good","ok","ok"],["good"],["bad"]] -## 题意 -> ... +Output: "good" -## 题解 +Explanation: -### 思路1 -> ... -Find the Most Common Response -```go +After removing duplicates within each list, responses = [["good", "ok"], ["ok", "bad", "good"], ["good"], ["bad"]]. +"good" appears 3 times, "ok" appears 2 times, and "bad" appears 2 times. +Return "good" because it has the highest frequency. ``` +**Example 2:** + +``` +Input: responses = [["good","ok","good"],["ok","bad"],["bad","notsure"],["great","good"]] + +Output: "bad" + +Explanation: + +After removing duplicates within each list we have responses = [["good", "ok"], ["ok", "bad"], ["bad", "notsure"], ["great", "good"]]. +"bad", "good", and "ok" each occur 2 times. +The output is "bad" because it is the lexicographically smallest amongst the words with the highest frequency. +``` ## 结语 diff --git a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go index d115ccf5e..82f681cda 100644 --- a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go +++ b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(responses [][]string) string { + store := make(map[string]int) + for _, resp := range responses { + cur := make(map[string]struct{}) + for _, str := range resp { + cur[str] = struct{}{} + } + for key := range cur { + store[key]++ + } + } + var ( + ret string + cnt int + ) + for key, count := range store { + if count > cnt { + ret = key + cnt = count + continue + } + + if count == cnt { + ret = min(ret, key) + } + } + + return ret } diff --git a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go index 14ff50eb4..039e61a84 100644 --- a/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go +++ b/leetcode/3501-3600/3527.Find-the-Most-Common-Response/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]string{{"good", "ok", "good", "ok"}, {"ok", "bad", "good", "ok", "ok"}, {"good"}, {"bad"}}, "good"}, + {"TestCase2", [][]string{{"good", "ok", "good"}, {"ok", "bad"}, {"bad", "notsure"}, {"great", "good"}}, "bad"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From deed2afd9748f1ea0487f4878e55ada33b636877 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 3 Oct 2025 17:14:55 +0800 Subject: [PATCH 407/450] Add solution and test-cases for problem 1169 --- .../1169.Invalid-Transactions/README.md | 34 +++++---- .../1169.Invalid-Transactions/Solution.go | 74 ++++++++++++++++++- .../Solution_test.go | 14 ++-- 3 files changed, 100 insertions(+), 22 deletions(-) diff --git a/leetcode/1101-1200/1169.Invalid-Transactions/README.md b/leetcode/1101-1200/1169.Invalid-Transactions/README.md index b00bcf0a4..74fec82a1 100644 --- a/leetcode/1101-1200/1169.Invalid-Transactions/README.md +++ b/leetcode/1101-1200/1169.Invalid-Transactions/README.md @@ -1,28 +1,36 @@ # [1169.Invalid Transactions][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 +A transaction is possibly invalid if: + +- the amount exceeds `$1000`, or; +- if it occurs within (and including) `60` minutes of another transaction with the **same name** in a **different city**. + +You are given an array of strings `transactions` where `transactions[i]` consists of comma-separated values representing the name, time (in minutes), amount, and city of the transaction. + +Return a list of `transactions` that are possibly invalid. You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: transactions = ["alice,20,800,mtv","alice,50,100,beijing"] +Output: ["alice,20,800,mtv","alice,50,100,beijing"] +Explanation: The first transaction is invalid because the second transaction occurs within a difference of 60 minutes, have the same name and is in a different city. Similarly the second one is invalid too. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Invalid Transactions -```go ``` +Input: transactions = ["alice,20,800,mtv","alice,50,1200,mtv"] +Output: ["alice,50,1200,mtv"] +``` + +**Example 3:** +``` +Input: transactions = ["alice,20,800,mtv","bob,50,1200,mtv"] +Output: ["bob,50,1200,mtv"] +``` ## 结语 diff --git a/leetcode/1101-1200/1169.Invalid-Transactions/Solution.go b/leetcode/1101-1200/1169.Invalid-Transactions/Solution.go index d115ccf5e..31c83ee61 100644 --- a/leetcode/1101-1200/1169.Invalid-Transactions/Solution.go +++ b/leetcode/1101-1200/1169.Invalid-Transactions/Solution.go @@ -1,5 +1,75 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "sort" + "strconv" + "strings" +) + +type transaction struct { + name string + time, amount int + city string +} + +func (tr transaction) String() string { + return fmt.Sprintf("%s,%d,%d,%s", tr.name, tr.time, tr.amount, tr.city) +} + +func Solution(transactions []string) []string { + list := make([]transaction, len(transactions)) + for i, trans := range transactions { + items := strings.Split(trans, ",") + time, _ := strconv.Atoi(items[1]) + amount, _ := strconv.Atoi(items[2]) + list[i] = transaction{ + name: items[0], + time: time, + amount: amount, + city: items[3], + } + } + var ret []string + sort.Slice(list, func(i, j int) bool { + // 感觉时间排序 + a, b := list[i], list[j] + if a.time == b.time { + return a.name < b.name + } + return a.time < b.time + }) + + group := make(map[string][]transaction) + for _, item := range list { + if _, ok := group[item.name]; !ok { + group[item.name] = make([]transaction, 0) + } + group[item.name] = append(group[item.name], item) + } + for _, trans := range group { + invalid := make([]bool, len(trans)) + for i := 0; i < len(trans); i++ { + + for pre := i - 1; pre >= 0; pre-- { + if trans[i].city == trans[pre].city { + continue + } + if trans[i].time <= trans[pre].time+60 { + invalid[i] = true + invalid[pre] = true + } + } + if trans[i].amount > 1000 { + invalid[i] = true + continue + } + } + for i := range trans { + if invalid[i] { + ret = append(ret, trans[i].String()) + } + } + } + return ret } diff --git a/leetcode/1101-1200/1169.Invalid-Transactions/Solution_test.go b/leetcode/1101-1200/1169.Invalid-Transactions/Solution_test.go index 14ff50eb4..b1020a330 100644 --- a/leetcode/1101-1200/1169.Invalid-Transactions/Solution_test.go +++ b/leetcode/1101-1200/1169.Invalid-Transactions/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"alice,20,800,mtv", "alice,50,100,beijing"}, []string{"alice,20,800,mtv", "alice,50,100,beijing"}}, + {"TestCase2", []string{"alice,20,800,mtv", "alice,50,1200,mtv"}, []string{"alice,50,1200,mtv"}}, + {"TestCase3", []string{"alice,20,800,mtv", "bob,50,1200,mtv"}, []string{"bob,50,1200,mtv"}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7845ccb594ace0f605f2353b2f638ebb398b1bf2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 4 Oct 2025 17:31:03 +0800 Subject: [PATCH 408/450] Add solution and test-cases for problem 1172 --- .../1172.Dinner-Plate-Stacks/README.md | 64 ++++-- .../1172.Dinner-Plate-Stacks/Solution.go | 183 +++++++++++++++++- .../1172.Dinner-Plate-Stacks/Solution_test.go | 35 +++- 3 files changed, 254 insertions(+), 28 deletions(-) diff --git a/leetcode/1101-1200/1172.Dinner-Plate-Stacks/README.md b/leetcode/1101-1200/1172.Dinner-Plate-Stacks/README.md index 8a37e815b..a07b241e4 100644 --- a/leetcode/1101-1200/1172.Dinner-Plate-Stacks/README.md +++ b/leetcode/1101-1200/1172.Dinner-Plate-Stacks/README.md @@ -1,28 +1,58 @@ # [1172.Dinner Plate Stacks][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 have an infinite number of stacks arranged in a row and numbered (left to right) from `0`, each of the stacks has the same maximum capacity. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `DinnerPlates` class: -## 题意 -> ... +- `DinnerPlates(int capacity)` Initializes the object with the maximum capacity of the stacks `capacity`. +- `void push(int val)` Pushes the given integer `val` into the leftmost stack with a size less than `capacity`. +- `int pop()` Returns the value at the top of the rightmost non-empty stack and removes it from that stack, and returns `-1` if all the stacks are empty. +- `int popAtStack(int index)` Returns the value at the top of the stack with the given `index` index and removes it from that stack or returns `-1` if the stack with that given index is empty. -## 题解 +**Example 1:** -### 思路1 -> ... -Dinner Plate Stacks -```go ``` - +Input +["DinnerPlates", "push", "push", "push", "push", "push", "popAtStack", "push", "push", "popAtStack", "popAtStack", "pop", "pop", "pop", "pop", "pop"] +[[2], [1], [2], [3], [4], [5], [0], [20], [21], [0], [2], [], [], [], [], []] +Output +[null, null, null, null, null, null, 2, null, null, 20, 21, 5, 4, 3, 1, -1] + +Explanation: +DinnerPlates D = DinnerPlates(2); // Initialize with capacity = 2 +D.push(1); +D.push(2); +D.push(3); +D.push(4); +D.push(5); // The stacks are now: 2 4 + 1 3 5 + ﹈ ﹈ ﹈ +D.popAtStack(0); // Returns 2. The stacks are now: 4 + 1 3 5 + ﹈ ﹈ ﹈ +D.push(20); // The stacks are now: 20 4 + 1 3 5 + ﹈ ﹈ ﹈ +D.push(21); // The stacks are now: 20 4 21 + 1 3 5 + ﹈ ﹈ ﹈ +D.popAtStack(0); // Returns 20. The stacks are now: 4 21 + 1 3 5 + ﹈ ﹈ ﹈ +D.popAtStack(2); // Returns 21. The stacks are now: 4 + 1 3 5 + ﹈ ﹈ ﹈ +D.pop() // Returns 5. The stacks are now: 4 + 1 3 + ﹈ ﹈ +D.pop() // Returns 4. The stacks are now: 1 3 + ﹈ ﹈ +D.pop() // Returns 3. The stacks are now: 1 + ﹈ +D.pop() // Returns 1. There are no stacks. +D.pop() // Returns -1. There are still no stacks. +``` ## 结语 diff --git a/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution.go b/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution.go index d115ccf5e..0af0ba61e 100644 --- a/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution.go +++ b/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution.go @@ -1,5 +1,186 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heapItem1172 struct { + stack []int + + index, sourceIndex int +} + +type leftNotFullHeap struct { + data []*heapItem1172 + capacity int +} + +func (h *leftNotFullHeap) Len() int { + return len(h.data) +} + +func (h *leftNotFullHeap) Less(i, j int) bool { + a, b := h.data[i], h.data[j] + la, lb := len(a.stack), len(b.stack) + if la == h.capacity { + return false + } + if lb == h.capacity { + return true + } + return a.sourceIndex < b.sourceIndex +} + +func (h *leftNotFullHeap) Swap(i, j int) { + h.data[i], h.data[j] = h.data[j], h.data[i] + h.data[i].index = i + h.data[j].index = j +} + +func (h *leftNotFullHeap) Push(x any) { + item := x.(*heapItem1172) + l := len(h.data) + item.index = l + h.data = append(h.data, item) +} + +func (h *leftNotFullHeap) Pop() any { + old := h.data + l := len(old) + x := old[l-1] + h.data = old[:l-1] return x } + +type rightHeapItem1172 struct { + sourceIndex, index int +} +type rightNotEmptyHeap struct { + data []*rightHeapItem1172 + list *[]*heapItem1172 +} + +func (h *rightNotEmptyHeap) Len() int { + return len(h.data) +} + +func (h *rightNotEmptyHeap) Less(i, j int) bool { + a, b := h.data[i], h.data[j] + ia, ib := (*h.list)[a.sourceIndex], (*h.list)[b.sourceIndex] + li, lj := len(ia.stack), len(ib.stack) + if li == 0 && lj == 0 || (li != 0 && lj != 0) { + return a.sourceIndex > b.sourceIndex + } + return li != 0 +} + +func (h *rightNotEmptyHeap) Swap(i, j int) { + h.data[i], h.data[j] = h.data[j], h.data[i] + h.data[i].index = i + h.data[j].index = j +} + +func (h *rightNotEmptyHeap) Push(x any) { + item := x.(*rightHeapItem1172) + item.index = len(h.data) + h.data = append(h.data, item) +} + +func (h *rightNotEmptyHeap) Pop() any { + l := len(h.data) + x := h.data[l-1] + h.data = h.data[:l-1] + return x +} + +type DinnerPlates struct { + leftNotFull *leftNotFullHeap + rightNotEmpty *rightNotEmptyHeap + capacity int + leftIndies *[]*heapItem1172 + + rightIndies map[int]*rightHeapItem1172 +} + +func Constructor(capacity int) DinnerPlates { + indies := make([]*heapItem1172, 0) + return DinnerPlates{ + leftNotFull: &leftNotFullHeap{ + data: make([]*heapItem1172, 0), + capacity: capacity, + }, + rightNotEmpty: &rightNotEmptyHeap{ + data: make([]*rightHeapItem1172, 0), + list: &indies, + }, + capacity: capacity, + leftIndies: &indies, + rightIndies: make(map[int]*rightHeapItem1172), + } +} + +func (this *DinnerPlates) Push(val int) { + if len(this.leftNotFull.data) == 0 || len(this.leftNotFull.data[0].stack) == this.capacity { + sourceIndex := len(this.leftNotFull.data) + leftItem := &heapItem1172{ + stack: []int{val}, + sourceIndex: sourceIndex, + } + rightItem := &rightHeapItem1172{ + sourceIndex: sourceIndex, + } + this.rightIndies[sourceIndex] = rightItem + + *this.leftIndies = append(*this.leftIndies, leftItem) + heap.Push(this.leftNotFull, leftItem) + heap.Push(this.rightNotEmpty, rightItem) + return + } + zero := this.leftNotFull.data[0] + zero.stack = append(zero.stack, val) + heap.Fix(this.leftNotFull, 0) + heap.Fix(this.rightNotEmpty, this.rightIndies[zero.sourceIndex].index) +} + +func (this *DinnerPlates) Pop() int { + top := this.rightNotEmpty.data[0] + return this.PopAtStack(top.sourceIndex) +} + +func (this *DinnerPlates) PopAtStack(index int) int { + if index < 0 || index >= len(*this.leftIndies) { + return -1 + } + v := (*this.leftIndies)[index] + l := len(v.stack) + if l == 0 { + return -1 + } + x := v.stack[l-1] + v.stack = v.stack[:l-1] + heap.Fix(this.leftNotFull, v.index) + heap.Fix(this.rightNotEmpty, this.rightIndies[v.sourceIndex].index) + return x +} + +type opt struct { + name string + i int +} + +func Solution(capacity int, opts []opt) []int { + c := Constructor(capacity) + var ret []int + for _, op := range opts { + if op.name == "push" { + c.Push(op.i) + continue + } + if op.name == "popAtStack" { + ret = append(ret, c.PopAtStack(op.i)) + continue + } + if op.name == "pop" { + ret = append(ret, c.Pop()) + } + } + return ret +} diff --git a/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution_test.go b/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution_test.go index 14ff50eb4..f19c42d5c 100644 --- a/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution_test.go +++ b/leetcode/1101-1200/1172.Dinner-Plate-Stacks/Solution_test.go @@ -10,30 +10,45 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + opts []opt + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, []opt{ + {"push", 1}, + {"push", 2}, + {"push", 3}, + {"push", 4}, + {"push", 5}, + {"popAtStack", 0}, + {"push", 20}, + {"push", 21}, + {"popAtStack", 0}, + {"popAtStack", 2}, + {"pop", 0}, + {"pop", 0}, + {"pop", 0}, + {"pop", 0}, + {"pop", 0}, + }, []int{2, 20, 21, 5, 4, 3, 1, -1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.opts) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.opts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e8d0fedface55a63125f611d0c03d696d3b38ea2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Oct 2025 21:26:02 +0800 Subject: [PATCH 409/450] Add solution and test-cases for problem 212 --- leetcode/201-300/0212.Word-Search-II/1.jpg | Bin 0 -> 13870 bytes leetcode/201-300/0212.Word-Search-II/2.jpg | Bin 0 -> 3792 bytes .../201-300/0212.Word-Search-II/README.md | 27 ++++--- .../201-300/0212.Word-Search-II/Solution.go | 66 +++++++++++++++++- .../0212.Word-Search-II/Solution_test.go | 27 ++++--- 5 files changed, 94 insertions(+), 26 deletions(-) create mode 100644 leetcode/201-300/0212.Word-Search-II/1.jpg create mode 100644 leetcode/201-300/0212.Word-Search-II/2.jpg diff --git a/leetcode/201-300/0212.Word-Search-II/1.jpg b/leetcode/201-300/0212.Word-Search-II/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f569294f8e008b212e089d237c0c197e09efb4c GIT binary patch literal 13870 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 D@*%eI literal 0 HcmV?d00001 diff --git a/leetcode/201-300/0212.Word-Search-II/README.md b/leetcode/201-300/0212.Word-Search-II/README.md index 66a401852..c156c11fe 100644 --- a/leetcode/201-300/0212.Word-Search-II/README.md +++ b/leetcode/201-300/0212.Word-Search-II/README.md @@ -1,28 +1,27 @@ # [212.Word Search II][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 +Given an `m x n` `board` of characters and a list of strings `words`, return all words on the board. + +Each word must be constructed from letters of sequentially **adjacent cells**, where adjacent cells are horizontally or vertically neighboring. The same letter cell may not be used more than once in a word. + +**Example 1:** -**Example 1:** +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = ["oath","pea","eat","rain"] +Output: ["eat","oath"] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Word Search II -```go ``` - +Input: board = [["a","b"],["c","d"]], words = ["abcb"] +Output: [] +``` ## 结语 diff --git a/leetcode/201-300/0212.Word-Search-II/Solution.go b/leetcode/201-300/0212.Word-Search-II/Solution.go index d115ccf5e..dee4bb22a 100644 --- a/leetcode/201-300/0212.Word-Search-II/Solution.go +++ b/leetcode/201-300/0212.Word-Search-II/Solution.go @@ -1,5 +1,67 @@ package Solution -func Solution(x bool) bool { - return x +type trieNode212 struct { + child [26]*trieNode212 + word string +} + +func buildTrieNode212(words []string) *trieNode212 { + root := &trieNode212{} + for _, word := range words { + walker := root + // a, b + for i, b := range word { + index := b - 'a' + if walker.child[index] == nil { + walker.child[index] = &trieNode212{} + } + walker = walker.child[index] + if i == len(word)-1 { + walker.word = word + } + } + } + return root +} +func Solution(board [][]byte, words []string) []string { + rows, cols := len(board), len(board[0]) + tree := buildTrieNode212(words) + var ( + search func(int, int, *trieNode212) + dirs = [][]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, + } + ) + found := map[string]struct{}{} + search = func(x, y int, tree *trieNode212) { + if x < 0 || x >= rows || y < 0 || y >= cols || board[x][y] == '|' { + return + } + index := board[x][y] - 'a' + node := tree.child[index] + if node == nil { + return + } + if node.word != "" { + found[node.word] = struct{}{} + } + source := board[x][y] + board[x][y] = '|' + for _, dir := range dirs { + nx, ny := x+dir[0], y+dir[1] + walker := node + search(nx, ny, walker) + } + board[x][y] = source + } + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + search(r, c, tree) + } + } + var ret []string + for key := range found { + ret = append(ret, key) + } + return ret } diff --git a/leetcode/201-300/0212.Word-Search-II/Solution_test.go b/leetcode/201-300/0212.Word-Search-II/Solution_test.go index 14ff50eb4..d9e83acd8 100644 --- a/leetcode/201-300/0212.Word-Search-II/Solution_test.go +++ b/leetcode/201-300/0212.Word-Search-II/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + board [][]byte + words []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]byte{ + {'o', 'a', 'a', 'n'}, + {'e', 't', 'a', 'e'}, + {'i', 'h', 'k', 'r'}, + {'i', 'f', 'l', 'v'}, + }, []string{"oath", "pea", "eat", "rain"}, []string{"oath", "eat"}}, + {"TestCase2", [][]byte{ + {'a', 'b'}, {'c', 'd'}, + }, []string{"abcd"}, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.board, c.words) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.board, c.words) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 85ccc040edbff116cb043fb5fb5c2fbc2b4c1861 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Oct 2025 23:18:29 +0800 Subject: [PATCH 410/450] Add solution and test-cases for problem 3079 --- .../README.md | 27 ++++++++++--------- .../Solution.go | 23 ++++++++++++++-- .../Solution_test.go | 13 +++++---- 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/README.md b/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/README.md index 3b8436adb..90354cef6 100755 --- a/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/README.md +++ b/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/README.md @@ -1,28 +1,29 @@ # [3079.Find the Sum of Encrypted Integers][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 integer array `nums` containing **positive** integers. We define a function **encrypt** such that `encrypt(x)` replaces **every** digit in `x` with the **largest** digit in `x`. For example, `encrypt(523) = 555` and `encrypt(213) = 333`. + +Return the **sum** of encrypted elements. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,2,3] -## 题意 -> ... +Output: 6 -## 题解 +Explanation: The encrypted elements are [1,2,3]. The sum of encrypted elements is 1 + 2 + 3 == 6. +``` + +**Example 2:** -### 思路1 -> ... -Find the Sum of Encrypted Integers -```go ``` +Input: nums = [10,21,31] + +Output: 66 +Explanation: The encrypted elements are [11,22,33]. The sum of encrypted elements is 11 + 22 + 33 == 66. +``` ## 结语 diff --git a/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/Solution.go b/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/Solution.go index d115ccf5e..4095a4d37 100644 --- a/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/Solution.go +++ b/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func to(n int) int { + x, bits, mod := 0, 0, 0 + for n > 0 { + mod = n % 10 + n /= 10 + x = max(x, mod) + bits++ + } + base := 0 + for ; bits > 0; bits-- { + base = base*10 + x + } + return base +} + +func Solution(nums []int) int { + var ret int + for _, n := range nums { + ret += to(n) + } + return ret } diff --git a/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/Solution_test.go b/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/Solution_test.go index 14ff50eb4..d079673fe 100644 --- a/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/Solution_test.go +++ b/leetcode/3001-3100/3079.Find-the-Sum-of-Encrypted-Integers/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, 3}, 6}, + {"TestCase2", []int{10, 21, 31}, 66}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 914f9ce77a06f76dbf957055bcc712f720ce3b6f Mon Sep 17 00:00:00 2001 From: Boris Date: Mon, 6 Oct 2025 19:43:41 +0800 Subject: [PATCH 411/450] update go.mod --- go.mod | 3 +-- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index fe730b36d..cf1e47c0d 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,6 @@ module awesome-golang-algorithm go 1.25 - require ( github.com/imroc/req/v3 v3.55.0 github.com/stretchr/testify v1.11.1 @@ -17,7 +16,7 @@ require ( github.com/kr/pretty v0.3.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.54.0 // indirect + github.com/quic-go/quic-go v0.55.0 // indirect github.com/refraction-networking/utls v1.8.0 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect go.uber.org/mock v0.6.0 // indirect diff --git a/go.sum b/go.sum index 63042c66a..4f32c03f6 100644 --- a/go.sum +++ b/go.sum @@ -26,8 +26,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg= -github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= +github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk= +github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U= github.com/refraction-networking/utls v1.8.0 h1:L38krhiTAyj9EeiQQa2sg+hYb4qwLCqdMcpZrRfbONE= github.com/refraction-networking/utls v1.8.0/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= From 9d6999def07aa52625d5918f195b9d98c69391c8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 6 Oct 2025 20:02:22 +0800 Subject: [PATCH 412/450] Add solution and test-cases for problem 2227 --- .../README.md | 48 ++++++--- .../Solution.go | 101 +++++++++++++++++- .../Solution_test.go | 22 ++-- 3 files changed, 142 insertions(+), 29 deletions(-) diff --git a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md index 2f1a5fb18..913192e0e 100755 --- a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md +++ b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md @@ -1,28 +1,44 @@ # [2227.Encrypt and Decrypt Strings][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 a character array `keys` containing unique characters and a string array `values` containing strings of length 2. You are also given another string array `dictionary` that contains all permitted original strings after decryption. You should implement a data structure that can encrypt or decrypt a **0-indexed** string. -**Example 1:** +A string is **encrypted** with the following process: -``` -Input: a = "11", b = "1" -Output: "100" -``` +1. For each character `c` in the string, we find the index `i` satisfying `keys[i] == c` in `keys`. +2. Replace `c` with `values[i]` in the string. -## 题意 -> ... +Note that in case a character of the string is **not present** in `keys`, the encryption process cannot be carried out, and an empty string `""` is returned. -## 题解 +A string is **decrypted** with the following process: -### 思路1 -> ... -Encrypt and Decrypt Strings -```go -``` +1. For each substring `s` of length 2 occurring at an even index in the string, we find an `i` such that `values[i] == s`. If there are multiple valid `i`, we choose **any** one of them. This means a string could have multiple possible strings it can decrypt to. +2. Replace `s` with `keys[i]` in the string. + +Implement the `Encrypter` class: +- `Encrypter(char[] keys, String[] values, String[] dictionary)` Initializes the `Encrypter` class with `keys`, `values`, and `dictionary`. +- `String encrypt(String word1)` Encrypts `word1` with the encryption process described above and returns the encrypted string. +- `int decrypt(String word2)` Returns the number of possible strings `word2` could decrypt to that also appear in `dictionary`. + +**Example 1:** + +``` +Input +["Encrypter", "encrypt", "decrypt"] +[[['a', 'b', 'c', 'd'], ["ei", "zf", "ei", "am"], ["abcd", "acbd", "adbc", "badc", "dacb", "cadb", "cbda", "abad"]], ["abcd"], ["eizfeiam"]] +Output +[null, "eizfeiam", 2] + +Explanation +Encrypter encrypter = new Encrypter([['a', 'b', 'c', 'd'], ["ei", "zf", "ei", "am"], ["abcd", "acbd", "adbc", "badc", "dacb", "cadb", "cbda", "abad"]); +encrypter.encrypt("abcd"); // return "eizfeiam". + // 'a' maps to "ei", 'b' maps to "zf", 'c' maps to "ei", and 'd' maps to "am". +encrypter.decrypt("eizfeiam"); // return 2. + // "ei" can map to 'a' or 'c', "zf" maps to 'b', and "am" maps to 'd'. + // Thus, the possible strings after decryption are "abad", "cbad", "abcd", and "cbcd". + // 2 of those strings, "abad" and "abcd", appear in dictionary, so the answer is 2. +``` ## 结语 diff --git a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go index d115ccf5e..fdfda5e97 100644 --- a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go +++ b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go @@ -1,5 +1,102 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "strings" +) + +type trieNode2227 struct { + child [26]*trieNode2227 + end bool +} + +func buildTrieNode2227(dic []string) *trieNode2227 { + root := &trieNode2227{ + child: [26]*trieNode2227{}, + } + for _, word := range dic { + walker := root + for _, b := range []byte(word) { + index := b - 'a' + if walker.child[index] == nil { + walker.child[index] = &trieNode2227{} + } + walker = walker.child[index] + } + walker.end = true + } + return root +} + +type Encrypter struct { + tree *trieNode2227 + keys []byte + keysMap map[byte]int + values []string + valuesMapper map[string][]int +} + +func Constructor(keys []byte, values []string, dictionary []string) Encrypter { + tree := buildTrieNode2227(dictionary) + e := Encrypter{ + tree: tree, + keys: keys, + keysMap: make(map[byte]int), + values: values, + valuesMapper: map[string][]int{}, + } + for i, b := range keys { + e.keysMap[b] = i + } + for i, str := range values { + if _, ok := e.valuesMapper[str]; !ok { + e.valuesMapper[str] = []int{} + } + e.valuesMapper[str] = append(e.valuesMapper[str], i) + } + + return e +} + +func (this *Encrypter) Encrypt(word1 string) string { + buf := strings.Builder{} + for _, b := range []byte(word1) { + index, ok := this.keysMap[b] + if !ok { + return "" + } + + buf.WriteString(this.values[index]) + } + return buf.String() +} + +func (this *Encrypter) search(word2 string, index int, tree *trieNode2227) int { + if index >= len(word2) { + if tree.end { + return 1 + } + return 0 + } + // ab -> c, c + cur := word2[index : index+2] + var ret int + for _, i := range this.valuesMapper[cur] { + childIndex := this.keys[i] - 'a' + if tree.child[childIndex] == nil { + continue + } + ret += this.search(word2, index+2, tree.child[childIndex]) + } + return ret +} +func (this *Encrypter) Decrypt(word2 string) int { + return this.search(word2, 0, this.tree) +} + +func Solution(keys []byte, values []string, dictionary []string, encryptStr, decryptStr string) []any { + c := Constructor(keys, values, dictionary) + var ret []any + ret = append(ret, c.Encrypt(encryptStr)) + ret = append(ret, c.Decrypt(decryptStr)) + return ret } diff --git a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go index 14ff50eb4..25a0f1573 100644 --- a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go +++ b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + keys []byte + values, dictionary []string + word1, word2 string + expect []any }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []byte{'a', 'b', 'c', 'd'}, []string{"ei", "zf", "ei", "am"}, []string{"abcd", "acbd", "adbc", "badc", "dacb", "cadb", "cbda", "abad"}, "abcd", "eizfeiam", []any{"eizfeiam", 2}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.keys, c.values, c.dictionary, c.word1, c.word2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v %v", + c.expect, got, c.keys, c.values, c.dictionary, c.word1, c.word2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 582e5e9efe7e5a2ff500747b069f052dba6ec7ae Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 7 Oct 2025 17:10:57 +0800 Subject: [PATCH 413/450] Add solution and test-cases for problem 1488 --- .../1488.Avoid-Flood-in-The-City/README.md | 61 +++++++++++++++ .../1488.Avoid-Flood-in-The-City/Solution.go | 74 ++++++++++++++++++- .../Solution_test.go | 14 ++-- 3 files changed, 141 insertions(+), 8 deletions(-) create mode 100644 leetcode/1401-1500/1488.Avoid-Flood-in-The-City/README.md diff --git a/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/README.md b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/README.md new file mode 100644 index 000000000..570aa9cb3 --- /dev/null +++ b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/README.md @@ -0,0 +1,61 @@ +# [1488.Avoid Flood in The City][title] + +## Description +Your country has an infinite number of lakes. Initially, all the lakes are empty, but when it rains over the `nth` lake, the `nth` lake becomes **full of water**. If it rains over a lake that is full of water, there will be a **flood**. Your goal is to avoid floods in any lake. + +Given an integer array `rains` where: + +- `rains[i] > 0` means there will be rains over the `rains[i]` lake. +- `rains[i] == 0` means there are no rains this day and you can choose **one lake** this day and **dry it**. + +Return an array `ans` where: + +- `ans.length == rains.length` +- `ans[i] == -1` if `rains[i] > 0`. +- `ans[i]` is the lake you choose to dry in the `ith` day if `rains[i] == 0`. + +If there are multiple valid answers return **any** of them. If it is impossible to avoid flood return **an empty array**. + +Notice that if you chose to dry a full lake, it becomes empty, but if you chose to dry an empty lake, nothing changes. + +**Example 1:** + +``` +Input: rains = [1,2,3,4] +Output: [-1,-1,-1,-1] +Explanation: After the first day full lakes are [1] +After the second day full lakes are [1,2] +After the third day full lakes are [1,2,3] +After the fourth day full lakes are [1,2,3,4] +There's no day to dry any lake and there is no flood in any lake. +``` + +**Example 2:** + +``` +Input: rains = [1,2,0,0,2,1] +Output: [-1,-1,2,1,-1,-1] +Explanation: After the first day full lakes are [1] +After the second day full lakes are [1,2] +After the third day, we dry lake 2. Full lakes are [1] +After the fourth day, we dry lake 1. There is no full lakes. +After the fifth day, full lakes are [2]. +After the sixth day, full lakes are [1,2]. +It is easy that this scenario is flood-free. [-1,-1,1,2,-1,-1] is another acceptable scenario. +``` + +**Example 3:** + +``` +Input: rains = [1,2,0,1,2] +Output: [] +Explanation: After the second day, full lakes are [1,2]. We have to dry one lake in the third day. +After that, it will rain over lakes [1,2]. It's easy to prove that no matter which lake you choose to dry in the 3rd day, the other one will flood. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/avoid-flood-in-the-city +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go index d115ccf5e..4368584b1 100755 --- a/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go +++ b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go @@ -1,5 +1,77 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +// 记录未来即将出现的lake +type lakeState struct { + lake int + nextDay int +} + +type lakeHeap struct { + data []*lakeState +} + +func (l *lakeHeap) Len() int { + return len(l.data) +} + +func (l *lakeHeap) Swap(i, j int) { + l.data[i], l.data[j] = l.data[j], l.data[i] +} + +func (l *lakeHeap) Less(i, j int) bool { + a, b := l.data[i], l.data[j] + return a.nextDay < b.nextDay +} + +func (l *lakeHeap) Push(x any) { + l.data = append(l.data, x.(*lakeState)) +} + +func (l *lakeHeap) Pop() any { + ll := len(l.data) + x := l.data[ll-1] + l.data = l.data[:ll-1] return x } + +func Solution(rains []int) []int { + l := len(rains) + days := make(map[int][]int) + // 记录走到那一天了 + indies := make(map[int]int) + for index, rain := range rains { + if rain == 0 { + continue + } + days[rain] = append(days[rain], index) + indies[rain] = 0 + } + full := make(map[int]bool) + h := &lakeHeap{data: make([]*lakeState, 0)} + ret := make([]int, l) + for index, lake := range rains { + if lake > 0 { + if full[lake] { + // 满 + return []int{} + } + full[lake] = true + ret[index] = -1 + if nextIndex := indies[lake] + 1; nextIndex < len(days[lake]) { + indies[lake]++ + heap.Push(h, &lakeState{lake: lake, nextDay: days[lake][nextIndex]}) + } + continue + } + ret[index] = 1 + if h.Len() > 0 { + top := heap.Pop(h).(*lakeState) + ret[index] = top.lake + delete(full, top.lake) + } + } + // 1, 2, 0, 2, 3, 0, 1 + return ret +} diff --git a/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go index 14ff50eb4..f0ba80aa5 100755 --- a/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go +++ b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go @@ -10,12 +10,12 @@ 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, 3, 4}, []int{-1, -1, -1, -1}}, + {"TestCase2", []int{1, 2, 0, 0, 2, 1}, []int{-1, -1, 2, 1, -1, -1}}, + {"TestCase3", []int{1, 2, 0, 1, 2}, []int{}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3e071b6b223599eac7a021e3bb867f7fc861dd9d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 9 Oct 2025 09:14:54 +0800 Subject: [PATCH 414/450] Add solution and test-cases for problem 3494 --- .../1.png | Bin 0 -> 58018 bytes .../README.md | 47 +++++++++++++----- .../Solution.go | 41 ++++++++++++++- .../Solution_test.go | 22 ++++---- 4 files changed, 84 insertions(+), 26 deletions(-) create mode 100644 leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/1.png diff --git a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/1.png b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c30d4909f0df18f41bd2fe57ac65cd0357ee0028 GIT binary patch literal 58018 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 [!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 two integer arrays, `skill` and `mana`, of length `n` and `m`, respectively. + +In a laboratory, `n` wizards must brew `m` potions in order. Each potion has a mana capacity `mana[j]` and **must** pass through **all** the wizards sequentially to be brewed properly. The time taken by the `ith` wizard on the `jth` potion is `timeij = skill[i] * mana[j]`. + +Since the brewing process is delicate, a potion **must** be passed to the next wizard immediately after the current wizard completes their work. This means the timing must be synchronized so that each wizard begins working on a potion **exactly** when it arrives. + +Return the **minimum** amount of time required for the potions to be brewed properly. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: skill = [1,5,2,4], mana = [5,1,4,2] + +Output: 110 + +Explanation: + +As an example for why wizard 0 cannot start working on the 1st potion before time t = 52, consider the case where the wizards started preparing the 1st potion at time t = 50. At time t = 58, wizard 2 is done with the 1st potion, but wizard 3 will still be working on the 0th potion till time t = 60. ``` -## 题意 -> ... +**Exmaple 2:** -## 题解 +``` +Input: skill = [1,1,1], mana = [1,1,1] + +Output: 5 -### 思路1 -> ... -Find the Minimum Amount of Time to Brew Potions -```go +Explanation: + +Preparation of the 0th potion begins at time t = 0, and is completed by time t = 3. +Preparation of the 1st potion begins at time t = 1, and is completed by time t = 4. +Preparation of the 2nd potion begins at time t = 2, and is completed by time t = 5. ``` +**Example 3:** + +``` +Input: skill = [1,2,3,4], mana = [1,2] + +Output: 21 +``` ## 结语 diff --git a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go index d115ccf5e..809ea5ab9 100644 --- a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go +++ b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(skill []int, mana []int) int64 { + N, M := len(skill), len(mana) + prevPotion := make([]int64, N) + for potion := 0; potion < M; potion++ { + var startTime int64 + if potion > 0 { + // Need to find the min time in between these two to start + start, end := prevPotion[0], prevPotion[N-1] + for start <= end { + mid := start + (end-start)/2 + if canCompletePotion(mid, potion, prevPotion, skill, mana) { + startTime = mid + end = mid - 1 + } else { + start = mid + 1 + } + } + } + for wiz := 0; wiz < N; wiz++ { + prevPotion[wiz] = startTime + int64(skill[wiz])*int64(mana[potion]) + startTime = prevPotion[wiz] + } + } + return prevPotion[N-1] +} + +func canCompletePotion(startTime int64, potionCount int, prevPotion []int64, skill, mana []int) bool { + for wizard := 0; wizard < len(skill); wizard++ { + doneTime := startTime + int64(skill[wizard])*int64(mana[potionCount]) + // If the done time for the previous potion is greater than this one + // it means we cannot hand off this potion to the next wizard in a sequential + // manner. + if prevPotion[wizard] > startTime { + return false + } + startTime = doneTime + } + // As long as all potions are done after the previous, we are ok. + return true } diff --git a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go index 14ff50eb4..b693c936c 100644 --- a/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go +++ b/leetcode/3401-3500/3494.Find-the-Minimum-Amount-of-Time-to-Brew-Potions/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + skill, mana []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 5, 2, 4}, []int{5, 1, 4, 2}, 110}, + {"TestCase2", []int{1, 1, 1}, []int{1, 1, 1}, 5}, + {"TestCase3", []int{1, 2, 3, 4}, []int{1, 2}, 21}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.skill, c.mana) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.skill, c.mana) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8424a432b0121ddf3466bb23029b7ed6b5c62a32 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 10 Oct 2025 09:11:12 +0800 Subject: [PATCH 415/450] Add solution and test-cases for problem 3147 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 18 ++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 46 insertions(+), 25 deletions(-) diff --git a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md index 31a002b33..8711aea7b 100755 --- a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md +++ b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md @@ -1,28 +1,35 @@ # [3147.Taking Maximum Energy From the Mystic Dungeon][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 +In a mystic dungeon, `n` magicians are standing in a line. Each magician has an attribute that gives you energy. Some magicians can give you negative energy, which means taking energy from you. + +You have been cursed in such a way that after absorbing energy from magician `i`, you will be instantly transported to magician `(i + k)`. This process will be repeated until you reach the magician where `(i + k)` does not exist. + +In other words, you will choose a starting point and then teleport with k jumps until you reach the end of the magicians' sequence, **absorbing all the energy** during the journey. + +You are given an array `energy` and an integer `k`. Return the **maximum** possible energy you can gain. + +**Note** that when you are reach a magician, you must take energy from them, whether it is negative or positive energy. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: energy = [5,2,-10,-5,1], k = 3 + +Output: 3 -## 题意 -> ... +Explanation: We can gain a total energy of 3 by starting from magician 1 absorbing 2 + 1 = 3. +``` -## 题解 +**Example 2:** -### 思路1 -> ... -Taking Maximum Energy From the Mystic Dungeon -```go ``` +Input: energy = [-2,-3,-1], k = 2 +Output: -1 + +Explanation: We can gain a total energy of -1 by starting from magician 2. +``` ## 结语 diff --git a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go index d115ccf5e..554de5b30 100644 --- a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go +++ b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(energy []int, k int) int { + dp := make([]int, len(energy)) + // k = 2 + // 1, 2, 3, 4, + l := len(energy) + ret := energy[l-1] + for i := l - 1; i >= l-k; i-- { + // 这些是无法跳的,所以默认就有自己的值 + dp[i] = energy[i] + ret = max(ret, dp[i]) + } + for i := l - k - 1; i >= 0; i-- { + dp[i] = dp[i+k] + energy[i] + ret = max(ret, dp[i]) + } + return ret } diff --git a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go index 14ff50eb4..ad856c1b7 100644 --- a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go +++ b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 2, -10, -5, 1}, 3, 3}, + {"TestCase2", []int{-2, -3, -1}, 2, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0a850661999564dbedb0df6bb44c2761e23aff1c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 11 Oct 2025 09:02:55 +0800 Subject: [PATCH 416/450] Add solution and test-cases for problem 3186 --- .../README.md | 37 +++++---- .../Solution.go | 77 ++++++++++++++++++- .../Solution_test.go | 13 ++-- 3 files changed, 105 insertions(+), 22 deletions(-) diff --git a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md index 9c6617eee..40344b572 100755 --- a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md +++ b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md @@ -1,28 +1,39 @@ # [3186.Maximum Total Damage With Spell Casting][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 +A magician has various spells. + +You are given an array `power`, where each element represents the damage of a spell. Multiple spells can have the same damage value. + +It is a known fact that if a magician decides to cast a spell with a damage of `power[i]`, they **cannot** cast any spell with a damage of `power[i] - 2`, `power[i] - 1`, `power[i] + 1`, or `power[i] + 2`. + +Each spell can be cast **only once**. + +Return the **maximum** possible total damage that a magician can cast. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: power = [1,1,3,4] -## 题意 -> ... +Output: 6 -## 题解 +Explanation: -### 思路1 -> ... -Maximum Total Damage With Spell Casting -```go +The maximum possible damage of 6 is produced by casting spells 0, 1, 3 with damage 1, 1, 4. ``` +**Example 2:** + +``` +Input: power = [7,1,6,6] + +Output: 13 + +Explanation: + +The maximum possible damage of 13 is produced by casting spells 1, 2, 3 with damage 1, 6, 6. +``` ## 结语 diff --git a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go index d115ccf5e..3c03ec295 100644 --- a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go +++ b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go @@ -1,5 +1,78 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(power []int) int64 { + if len(power) == 0 { + return 0 + } + + // 1. Calculate Total Damage per Value and collect unique damage values. + damageSums := make(map[int]int64) + for _, p := range power { + damageSums[p] += int64(p) + } + + // Get all unique damage values and sort them. + var uniqueDamages []int + for d := range damageSums { + uniqueDamages = append(uniqueDamages, d) + } + sort.Ints(uniqueDamages) + + M := len(uniqueDamages) + if M == 0 { + return 0 + } + + // 2. Dynamic Programming Array F. + // F[i] stores the max total damage considering spells with damage + // up to and including uniqueDamages[i]. + F := make([]int64, M) + + // F[0] Base Case: + F[0] = damageSums[uniqueDamages[0]] + + // 3. DP Iteration: + for i := 1; i < M; i++ { + currentDamage := uniqueDamages[i] + D_i := damageSums[currentDamage] + + // Option 1: Skip spells of currentDamage. + // Max damage is F[i-1]. + skipDamage := F[i-1] + + // Option 2: Cast all spells of currentDamage. + // Gain D_i. Must add to the max damage achieved up to damage currentDamage - 3. + + // Find the index 'j' of the *largest* unique damage value <= currentDamage - 3. + // We use sort.Search to find the first element > currentDamage - 3, then step back. + + target := currentDamage - 3 + + // Search for the first index 'k' where uniqueDamages[k] > target. + // Since sort.Search is not available for a custom search over a slice + // and we need to find the index for uniqueDamages, we use sort.SearchInts + // which is equivalent to finding the insertion point. + + // 'k' is the index of the first element STRICTLY GREATER THAN target. + k := sort.SearchInts(uniqueDamages, target+1) + + // The index of the largest element <= target is k-1. + j := k - 1 + + var prevMaxDamage int64 // Will be 0 if no such spell exists (j < 0). + if j >= 0 { + // prevMaxDamage is the max damage considering spells up to uniqueDamages[j]. + prevMaxDamage = F[j] + } + + castDamage := D_i + prevMaxDamage + + // F[i] = max(Option 1, Option 2) + F[i] = max(skipDamage, castDamage) + } + + // The result is the maximum damage considering all unique damage values. + return F[M-1] } diff --git a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go index 14ff50eb4..862501a9d 100644 --- a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go +++ b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 3, 4}, 6}, + {"TestCase2", []int{7, 1, 6, 6}, 13}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f42a846a4ec621b1dee0c88f77e4ecf6b5d18a44 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 12 Oct 2025 15:27:10 +0800 Subject: [PATCH 417/450] Add solution and test-cases for problem 3539 --- .../README.md | 53 +++++++++--- .../Solution.go | 83 ++++++++++++++++++- .../Solution_test.go | 21 ++--- 3 files changed, 133 insertions(+), 24 deletions(-) diff --git a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md index 9e78a7f99..badd85d65 100755 --- a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md +++ b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/README.md @@ -1,28 +1,57 @@ # [3539.Find Sum of Array Product of Magical Sequences][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 two integers, `m` and `k`, and an integer array `nums`. + +A sequence of integers `seq` is called **magical** if: + +- `seq` has a size of `m`. +- `0 <= seq[i] < nums.length` +- The **binary representation** of `2^seq[0] + 2^seq[1] + ... + 2^seq[m - 1]` has `k` **set bits**. + +The **array product** of this sequence is defined as `prod(seq) = (nums[seq[0]] * nums[seq[1]] * ... * nums[seq[m - 1]])`. + +Return the **sum** of the **array products** for all valid **magical** sequences. + +Since the answer may be large, return it **modulo** `10^9 + 7`. + +A **set bit** refers to a bit in the binary representation of a number that has a value of 1. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +nput: m = 5, k = 5, nums = [1,10,100,10000,1000000] + +Output: 991600007 + +Explanation: + +All permutations of [0, 1, 2, 3, 4] are magical sequences, each with an array product of 1013. ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: m = 2, k = 2, nums = [5,4,3,2,1] + +Output: 170 + +Explanation: -### 思路1 -> ... -Find Sum of Array Product of Magical Sequences -```go +The magical sequences are [0, 1], [0, 2], [0, 3], [0, 4], [1, 0], [1, 2], [1, 3], [1, 4], [2, 0], [2, 1], [2, 3], [2, 4], [3, 0], [3, 1], [3, 2], [3, 4], [4, 0], [4, 1], [4, 2], and [4, 3]. ``` +**Example 3:** + +``` +Input: m = 1, k = 1, nums = [28] + +Output: 28 + +Explanation: + +The only magical sequence is [0]. +``` ## 结语 diff --git a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go index d115ccf5e..53254dc35 100644 --- a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go +++ b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution.go @@ -1,5 +1,84 @@ package Solution -func Solution(x bool) bool { - return x +import "math/bits" + +func quickmul(x, y, mod int64) int64 { + res, cur := int64(1), x%mod + for y > 0 { + if y&1 == 1 { + res = res * cur % mod + } + y >>= 1 + cur = cur * cur % mod + } + return res +} + +func Solution(m int, k int, nums []int) int { + mod := int64(1000000007) + fac := make([]int64, m+1) + fac[0] = 1 + for i := 1; i <= m; i++ { + fac[i] = fac[i-1] * int64(i) % mod + } + ifac := make([]int64, m+1) + ifac[0] = 1 + ifac[1] = 1 + for i := 2; i <= m; i++ { + ifac[i] = quickmul(int64(i), mod-2, mod) + } + for i := 2; i <= m; i++ { + ifac[i] = ifac[i-1] * ifac[i] % mod + } + + numsPower := make([][]int64, len(nums)) + for i := range nums { + numsPower[i] = make([]int64, m+1) + numsPower[i][0] = 1 + for j := 1; j <= m; j++ { + numsPower[i][j] = numsPower[i][j-1] * int64(nums[i]) % mod + } + } + + f := make([][][][]int64, len(nums)) + for i := range nums { + f[i] = make([][][]int64, m+1) + for j := 0; j <= m; j++ { + f[i][j] = make([][]int64, m*2+1) + for p := 0; p <= m*2; p++ { + f[i][j][p] = make([]int64, k+1) + } + } + } + + for j := 0; j <= m; j++ { + f[0][j][j][0] = numsPower[0][j] * ifac[j] % mod + } + for i := 0; i+1 < len(nums); i++ { + for j := 0; j <= m; j++ { + for p := 0; p <= m*2; p++ { + for q := 0; q <= k; q++ { + q2 := p%2 + q + if q2 > k { + break + } + for r := 0; r+j <= m; r++ { + p2 := p/2 + r + f[i+1][j+r][p2][q2] += f[i][j][p][q] * numsPower[i+1][r] % mod * ifac[r] % mod + f[i+1][j+r][p2][q2] %= mod + } + } + } + } + } + + res := int64(0) + for p := 0; p <= m*2; p++ { + for q := 0; q <= k; q++ { + if bits.OnesCount(uint(p))+q == k { + res = (res + f[len(nums)-1][m][p][q]*fac[m]%mod) % mod + } + } + } + return int(res) } diff --git a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go index 14ff50eb4..3f078dca6 100644 --- a/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go +++ b/leetcode/3501-3600/3539.Find-Sum-of-Array-Product-of-Magical-Sequences/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + m, k int + nums []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, 5, []int{1, 10, 100, 10000, 1000000}, 991600007}, + {"TestCase2", 2, 2, []int{5, 4, 3, 2, 1}, 170}, + {"TestCase3", 1, 1, []int{28}, 28}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.m, c.k, c.nums) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.m, c.k, c.nums) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 975431672fc38589d894d819021c8d8a4b15abc2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 13 Oct 2025 09:02:55 +0800 Subject: [PATCH 418/450] Add solution and test-cases for problem 2273 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 33 +++++++++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 61 insertions(+), 23 deletions(-) diff --git a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md index 631acb1f4..4fa961fd0 100755 --- a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md +++ b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md @@ -1,28 +1,38 @@ # [2273.Find Resultant Array After Removing Anagrams][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 a **0-indexed** string array `words`, where `words[i]` consists of lowercase English letters. + +In one operation, select any index `i` such that `0 < i < words.length` and words[i - 1] and words[i] are **anagrams**, and **delete** `words[i]` from `words`. Keep performing this operation as long as you can select an index that satisfies the conditions. + +Return `words` after performing all operations. It can be shown that selecting the indices for each operation in **any** arbitrary order will lead to the same result. + +An **Anagrams** is a word or phrase formed by rearranging the letters of a different word or phrase using all the original letters exactly once. For example, `"dacb"` is an anagram of `"abdc"`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["abba","baba","bbaa","cd","cd"] +Output: ["abba","cd"] +Explanation: +One of the ways we can obtain the resultant array is by using the following operations: +- Since words[2] = "bbaa" and words[1] = "baba" are anagrams, we choose index 2 and delete words[2]. + Now words = ["abba","baba","cd","cd"]. +- Since words[1] = "baba" and words[0] = "abba" are anagrams, we choose index 1 and delete words[1]. + Now words = ["abba","cd","cd"]. +- Since words[2] = "cd" and words[1] = "cd" are anagrams, we choose index 2 and delete words[2]. + Now words = ["abba","cd"]. +We can no longer perform any operations, so ["abba","cd"] is the final answer. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find Resultant Array After Removing Anagrams -```go ``` - +Input: words = ["a","b","c","d","e"] +Output: ["a","b","c","d","e"] +Explanation: +No two adjacent strings in words are anagrams of each other, so no operations are performed. +``` ## 结语 diff --git a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go index d115ccf5e..730080a7a 100644 --- a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go +++ b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +func equal(a, b [26]int) bool { + for i := range 26 { + if a[i] != b[i] { + return false + } + } + return true +} + +func Solution(words []string) []string { + l := len(words) + indies := make([][26]int, l) + for index, word := range words { + for _, b := range word { + indies[index][b-'a']++ + } + } + index := 0 + stack := make([]int, l) + for i := 1; i < l; i++ { + if equal(indies[stack[index]], indies[i]) { + continue + } + index++ + stack[index] = i + } + var ret []string + for i := range index + 1 { + ret = append(ret, words[stack[i]]) + } + return ret } diff --git a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go index 14ff50eb4..30898ef83 100644 --- a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go +++ b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"abba", "baba", "bbaa", "cd", "cd"}, []string{"abba", "cd"}}, + {"TestCase2", []string{"a", "b", "c", "d", "e"}, []string{"a", "b", "c", "d", "e"}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9938684035fe4b3e982757459ebf43c3633539b5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 14 Oct 2025 09:16:17 +0800 Subject: [PATCH 419/450] Add solution and test-cases for problem 3349 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 26 +++++++++++++-- .../Solution_test.go | 18 +++++------ 3 files changed, 52 insertions(+), 24 deletions(-) diff --git a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md index 28390af4c..b78d3dd48 100755 --- a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md +++ b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md @@ -1,28 +1,34 @@ # [3349.Adjacent Increasing Subarrays Detection I][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 +Given an array `nums` of `n` integers and an integer `k`, determine whether there exist **two adjacent** subarrays of length `k` such that both subarrays are **strictly increasing**. Specifically, check if there are two subarrays starting at indices `a` and `b` (`a < b`), where: + +- Both subarrays `nums[a..a + k - 1]` and `nums[b..b + k - 1]` are **strictly increasing*8. +- The subarrays must be **adjacent**, meaning `b = a + k`. + +Return `true` if it is possible to find **two** such subarrays, and `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [2,5,7,8,9,2,3,4,3,1], k = 3 -## 题意 -> ... +Output: true -## 题解 +Explanation: -### 思路1 -> ... -Adjacent Increasing Subarrays Detection I -```go +The subarray starting at index 2 is [7, 8, 9], which is strictly increasing. +The subarray starting at index 5 is [2, 3, 4], which is also strictly increasing. +These two subarrays are adjacent, so the result is true. ``` +**Example 2:** + +``` +Input: nums = [1,2,3,4,4,4,4,5,6,7], k = 5 + +Output: false +``` ## 结语 diff --git a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go index d115ccf5e..a3420421d 100644 --- a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go +++ b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) bool { + indies := map[int]struct{}{} + start, end := 0, 0 + curLen := 0 + pre := -1001 + for ; end < len(nums); end++ { + if nums[end] <= pre { + start, curLen = end, 1 + } else { + curLen++ + } + pre = nums[end] + if curLen == k { + indies[start] = struct{}{} + start++ + curLen-- + } + } + for index := range indies { + if _, ok := indies[index+k]; ok { + return true + } + } + return false } diff --git a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go index 14ff50eb4..e6133834d 100644 --- a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go +++ b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int + k int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 5, 7, 8, 9, 2, 3, 4, 3, 1}, 3, true}, + {"TestCase2", []int{1, 2, 3, 4, 4, 4, 4, 5, 6, 7}, 5, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 326ef279f0ae9fc5a0a83872c849ad2ea8b97ea3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 15 Oct 2025 08:57:44 +0800 Subject: [PATCH 420/450] Add solution and test-cases for problem 3350 --- .../README.md | 40 ++++++++++++------ .../Solution.go | 41 ++++++++++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 72 insertions(+), 22 deletions(-) diff --git a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md index 8c92bb31e..5406ec968 100755 --- a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md +++ b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md @@ -1,28 +1,42 @@ # [3350.Adjacent Increasing Subarrays Detection II][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 +Given an array `nums` of `n` integers, your task is to find the **maximum** value of `k` for which there exist **two** adjacent subarrays of length `k` each, such that both subarrays are **strictly increasing**. Specifically, check if there are **two** subarrays of length `k` starting at indices `a` and `b` (`a < b`), where: + +- Both subarrays `nums[a..a + k - 1]` and `nums[b..b + k - 1]` are **strictly increasing**. +- The subarrays must be **adjacent**, meaning `b = a + k`. + +Return the **maximum** possible value of `k`. + +A **subarray** is a contiguous **non-empty** sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [2,5,7,8,9,2,3,4,3,1] -## 题意 -> ... +Output: 3 -## 题解 +Explanation: -### 思路1 -> ... -Adjacent Increasing Subarrays Detection II -```go +The subarray starting at index 2 is [7, 8, 9], which is strictly increasing. +The subarray starting at index 5 is [2, 3, 4], which is also strictly increasing. +These two subarrays are adjacent, and 3 is the maximum possible value of k for which two such adjacent strictly increasing subarrays exist. ``` +**Example 2:** + +``` +Input: nums = [1,2,3,4,4,4,4,5,6,7] + +Output: 2 + +Explanation: + +The subarray starting at index 0 is [1, 2], which is strictly increasing. +The subarray starting at index 2 is [3, 4], which is also strictly increasing. +These two subarrays are adjacent, and 2 is the maximum possible value of k for which two such adjacent strictly increasing subarrays exist. +``` ## 结语 diff --git a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go index d115ccf5e..cd76f87b2 100644 --- a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go +++ b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func ok(nums []int, k int) bool { + // 存储所有ok的字数组的下标 + // 然后找index的间隔是否存在不想等就可以了 + indies := []int{} + start, end := 0, 0 + curLen := 0 + pre := -1001 + // 6, 13, -17, -20, 2 + for ; end < len(nums); end++ { + if nums[end] <= pre { + start, curLen = end, 1 + } else { + curLen++ + } + pre = nums[end] + if curLen == k { + indies = append(indies, start) + start++ + curLen-- + } + } + keys := make(map[int]struct{}) + for _, index := range indies { + keys[index] = struct{}{} + } + for i := 0; i < len(indies)-1; i++ { + if _, ok := keys[indies[i]+k]; ok { + return true + } + } + return false +} +func Solution(nums []int) int { + index := sort.Search(len(nums)/2, func(i int) bool { + return !ok(nums, i+1) + }) + return index } diff --git a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution_test.go b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution_test.go index 14ff50eb4..650aeb963 100644 --- a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution_test.go +++ b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/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{2, 5, 7, 8, 9, 2, 3, 4, 3, 1}, 3}, + {"TestCase2", []int{1, 2, 3, 4, 4, 4, 4, 5, 6, 7}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a923392506fe996517b200a66ea650a6f4056042 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 16 Oct 2025 09:14:47 +0800 Subject: [PATCH 421/450] Add solution and test-cases for problem 2598 --- .../README.md | 43 +++++++++++++++++++ .../Solution.go | 14 +++++- .../Solution_test.go | 20 ++++----- 3 files changed, 65 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/README.md diff --git a/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/README.md b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/README.md new file mode 100644 index 000000000..cbde628d8 --- /dev/null +++ b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/README.md @@ -0,0 +1,43 @@ +# [2598.Smallest Missing Non-negative Integer After Operations][title] + +## Description +You are given a **0-indexed** integer array `nums` and an integer `value`. + +In one operation, you can add or subtract `value` from any element of `nums`. + +- For example, if `nums = [1,2,3]` and `value = 2`, you can choose to subtract `value` from `nums[0]` to make `nums = [-1,2,3]`. + +The MEX (minimum excluded) of an array is the smallest missing **non-negative** integer in it. + +- For example, the MEX of `[-1,2,3]` is `0` while the MEX of `[1,0,3]` is `2`. + +Return the maximum MEX of `nums` after applying the mentioned operation **any number of times**. + +**Example 1:** + +``` +Input: nums = [1,-10,7,13,6,8], value = 5 +Output: 4 +Explanation: One can achieve this result by applying the following operations: +- Add value to nums[1] twice to make nums = [1,0,7,13,6,8] +- Subtract value from nums[2] once to make nums = [1,0,2,13,6,8] +- Subtract value from nums[3] twice to make nums = [1,0,2,3,6,8] +The MEX of nums is 4. It can be shown that 4 is the maximum MEX we can achieve. +``` + +**Example 2:** + +``` +Input: nums = [1,-10,7,13,6,8], value = 7 +Output: 2 +Explanation: One can achieve this result by applying the following operation: +- subtract value from nums[2] once to make nums = [1,-10,0,13,6,8] +The MEX of nums is 2. It can be shown that 2 is the maximum MEX we can achieve. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-missing-non-negative-integer-after-operations +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go index d115ccf5e..01937e8f0 100755 --- a/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go +++ b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, value int) int { + mp := make([]int, value) + for _, x := range nums { + v := ((x % value) + value) % value + mp[v]++ + } + mex := 0 + for mp[mex%value] > 0 { + mp[mex%value]-- + mex++ + } + return mex } diff --git a/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go index 14ff50eb4..e572841ed 100755 --- a/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go +++ b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + value int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, -10, 7, 13, 6, 8}, 5, 4}, + {"TestCase2", []int{1, -10, 7, 13, 6, 8}, 7, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.value) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.value) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1206f12abc37593f4f1337b7c443c1e2ca8778bb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 17 Oct 2025 08:57:46 +0800 Subject: [PATCH 422/450] Add solution and test-cases for problem 3003 --- .../README.md | 57 +++++++++++++---- .../Solution.go | 62 ++++++++++++++++++- .../Solution_test.go | 21 ++++--- 3 files changed, 116 insertions(+), 24 deletions(-) diff --git a/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/README.md b/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/README.md index 90b1ec018..f4ea2a80f 100755 --- a/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/README.md +++ b/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/README.md @@ -1,28 +1,61 @@ # [3003.Maximize the Number of Partitions After Operations][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 a string `s` and an integer `k`. + +First, you are allowed to change **at most one** index in `s` to another lowercase English letter. + +After that, do the following partitioning operation until `s` is **empty**: + +- Choose the **longest prefix** of `s` containing at most `k` **distinct** characters. +- **Delete** the prefix from `s` and increase the number of partitions by one. The remaining characters (if any) in `s` maintain their initial order. + +Return an integer denoting the **maximum** number of resulting partitions after the operations by optimally choosing at most one index to change. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "accca", k = 2 + +Output: 3 + +Explanation: + +The optimal way is to change s[2] to something other than a and c, for example, b. then it becomes "acbca". + +Then we perform the operations: + +The longest prefix containing at most 2 distinct characters is "ac", we remove it and s becomes "bca". +Now The longest prefix containing at most 2 distinct characters is "bc", so we remove it and s becomes "a". +Finally, we remove "a" and s becomes empty, so the procedure ends. +Doing the operations, the string is divided into 3 partitions, so the answer is 3. +``` + +**Example 2:** + ``` +Input: s = "aabaab", k = 3 + +Output: 1 + +Explanation: -## 题意 -> ... +Initially s contains 2 distinct characters, so whichever character we change, it will contain at most 3 distinct characters, so the longest prefix with at most 3 distinct characters would always be all of it, therefore the answer is 1. +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Maximize the Number of Partitions After Operations -```go ``` +Input: s = "xxyz", k = 1 + +Output: 4 + +Explanation: +The optimal way is to change s[0] or s[1] to something other than characters in s, for example, to change s[0] to w. + +Then s becomes "wxyz", which consists of 4 distinct characters, so as k is 1, it will divide into 4 partitions. +``` ## 结语 diff --git a/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution.go b/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution.go index d115ccf5e..7daa290c7 100644 --- a/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution.go +++ b/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) int { + n := len(s) + left := make([][3]int, n) + right := make([][3]int, n) + + num, mask, count := 0, 0, 0 + for i := 0; i < n-1; i++ { + binary := 1 << (s[i] - 'a') + if mask&binary == 0 { + count++ + if count <= k { + mask |= binary + } else { + num++ + mask = binary + count = 1 + } + } + left[i+1][0] = num + left[i+1][1] = mask + left[i+1][2] = count + } + + num, mask, count = 0, 0, 0 + for i := n - 1; i > 0; i-- { + binary := 1 << (s[i] - 'a') + if mask&binary == 0 { + count++ + if count <= k { + mask |= binary + } else { + num++ + mask = binary + count = 1 + } + } + right[i-1][0] = num + right[i-1][1] = mask + right[i-1][2] = count + } + + maxVal := 0 + for i := 0; i < n; i++ { + seg := left[i][0] + right[i][0] + 2 + totMask := left[i][1] | right[i][1] + totCount := 0 + for totMask != 0 { + totMask = totMask & (totMask - 1) + totCount++ + } + if left[i][2] == k && right[i][2] == k && totCount < 26 { + seg++ + } else if min(totCount+1, 26) <= k { + seg-- + } + if seg > maxVal { + maxVal = seg + } + } + return maxVal } diff --git a/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution_test.go b/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution_test.go index 14ff50eb4..b31b2a27b 100644 --- a/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution_test.go +++ b/leetcode/3001-3100/3003.Maximize-the-Number-of-Partitions-After-Operations/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "accca", 2, 3}, + {"TestCase2", "aabaab", 3, 1}, + {"TestCase3", "xxyz", 1, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4bea7075e23bc702d59e12f2ec5ff54e2ef54c58 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 18 Oct 2025 09:09:39 +0800 Subject: [PATCH 423/450] Add solution and test-cases for problem 3397 --- .../README.md | 35 ++++++++++++------- .../Solution.go | 20 +++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md index 2f32e8de5..11229235a 100755 --- a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md +++ b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md @@ -1,28 +1,37 @@ # [3397.Maximum Number of Distinct Elements After Operations][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 integer array `nums` and an integer `k`. + +You are allowed to perform the following **operation** on each element of the array **at most** once: + +- Add an integer in the range `[-k, k]` to the element. + +Return the **maximum** possible number of **distinct** elements in `nums` after performing the **operations**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,2,2,3,3,4], k = 2 -## 题意 -> ... +Output: 6 -## 题解 +Explanation: -### 思路1 -> ... -Maximum Number of Distinct Elements After Operations -```go +nums changes to [-1, 0, 1, 2, 3, 4] after performing operations on the first four elements. ``` +**Example 2:** + +``` +Input: nums = [4,4,4,4], k = 1 + +Output: 3 + +Explanation: + +By adding -1 to nums[0] and 1 to nums[1], nums changes to [3, 5, 4, 4]. +``` ## 结语 diff --git a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go index d115ccf5e..8989a49bf 100644 --- a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go +++ b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "sort" +) + +func Solution(nums []int, k int) int { + sort.Ints(nums) + cnt := 0 + prev := math.MinInt32 + + for _, num := range nums { + curr := min(max(num-k, prev+1), num+k) + if curr > prev { + cnt++ + prev = curr + } + } + return cnt } diff --git a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go index 14ff50eb4..61630f0db 100644 --- a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go +++ b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 2, 3, 3, 4}, 2, 6}, + {"TestCase2", []int{4, 4, 4, 4}, 1, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 988d90b044b275b64a9313da4240acbdc72eda72 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 19 Oct 2025 19:31:58 +0800 Subject: [PATCH 424/450] Add solution and test-cases for problem 1625 --- .../README.md | 53 ++++++++++++++----- .../Solution.go | 31 ++++++++++- .../Solution_test.go | 21 ++++---- 3 files changed, 80 insertions(+), 25 deletions(-) diff --git a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md index 39d786f4a..a69d3a8b6 100755 --- a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md +++ b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md @@ -1,28 +1,55 @@ # [1625.Lexicographically Smallest String After Applying Operations][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 a string `s` of **even length** consisting of digits from `0` to `9`, and two integers `a` and `b`. + +You can apply either of the following two operations any number of times and in any order on `s`: + +- Add `a` to all odd indices of `s` (**0-indexed**). Digits post `9` are cycled back to `0`. For example, if `s = "3456"` and `a = 5`, `s` becomes `"3951"`. +- Rotate `s` to the right by `b` positions. For example, if `s = "3456"` and `b = 1`, s becomes `"6345"`. + +Return the **lexicographically smallest** string you can obtain by applying the above operations any number of times on s. + +A string `a` is lexicographically smaller than a string `b` (of the same length) if in the first position where `a` and `b` differ, string a has `a` letter that appears earlier in the alphabet than the corresponding letter in `b`. For example, `"0158"` is lexicographically smaller than `"0190"` because the first position they differ is at the third letter, and `'5'` comes before `'9'`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "5525", a = 9, b = 2 +Output: "2050" +Explanation: We can apply the following operations: +Start: "5525" +Rotate: "2555" +Add: "2454" +Add: "2353" +Rotate: "5323" +Add: "5222" +Add: "5121" +Rotate: "2151" +Add: "2050" +There is no way to obtain a string that is lexicographically smaller than "2050". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Lexicographically Smallest String After Applying Operations -```go ``` +Input: s = "74", a = 5, b = 1 +Output: "24" +Explanation: We can apply the following operations: +Start: "74" +Rotate: "47" +Add: "42" +Rotate: "24" +There is no way to obtain a string that is lexicographically smaller than "24". +``` + +**Example 3:** +``` +Input: s = "0011", a = 4, b = 2 +Output: "0011" +Explanation: There are no sequence of operations that will give us a lexicographically smaller string than "0011". +``` ## 结语 diff --git a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go index d115ccf5e..2aefd12cd 100644 --- a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go +++ b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, a int, b int) string { + n := len(s) + vis := make([]bool, n) + res := s + s = s + s + for i := 0; !vis[i]; i = (i + b) % n { + vis[i] = true + for j := 0; j < 10; j++ { + kLimit := 0 + if b%2 != 0 { + kLimit = 9 + } + for k := 0; k <= kLimit; k++ { + // before each accumulation, re-truncate t + t := []byte(s[i : i+n]) + for p := 1; p < n; p += 2 { + t[p] = '0' + byte((int(t[p]-'0')+j*a)%10) + } + for p := 0; p < n; p += 2 { + t[p] = '0' + byte((int(t[p]-'0')+k*a)%10) + } + tStr := string(t) + if tStr < res { + res = tStr + } + } + } + } + return res } diff --git a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution_test.go b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution_test.go index 14ff50eb4..282b4bc75 100644 --- a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution_test.go +++ b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + a, b int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "5525", 9, 2, "2050"}, + {"TestCase2", "74", 5, 1, "24"}, + {"TestCase3", "0011", 4, 2, "0011"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.a, c.b) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.s, c.a, c.b) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5b7d95d9a187391fea19cdc043cff47c4b7281b9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 21 Oct 2025 09:03:03 +0800 Subject: [PATCH 425/450] Add solution and test-cases for problem 3346 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 39 +++++++++++++++++- .../Solution_test.go | 22 +++++----- 3 files changed, 76 insertions(+), 26 deletions(-) diff --git a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md index 7ac632cae..671b4fd1e 100755 --- a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md +++ b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md @@ -1,28 +1,43 @@ # [3346.Maximum Frequency of an Element After Performing Operations I][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 integer array `nums` and two integers `k` and `numOperations`. + +You must perform an **operation** `numOperations` times on `nums`, where in each operation you: + +- Select an index `i` that was **not** selected in any previous operations. +- Add an integer in the range `[-k, k]` to `nums[i]`. + +Return the **maximum** possible frequency of any element in `nums` after performing the **operations**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,4,5], k = 1, numOperations = 2 + +Output: 2 -## 题意 -> ... +Explanation: -## 题解 +We can achieve a maximum frequency of two by: -### 思路1 -> ... -Maximum Frequency of an Element After Performing Operations I -```go +Adding 0 to nums[1]. nums becomes [1, 4, 5]. +Adding -1 to nums[2]. nums becomes [1, 4, 4]. ``` +**Example 2:** + +``` +Input: nums = [5,11,20,20], k = 5, numOperations = 1 + +Output: 2 + +Explanation: + +We can achieve a maximum frequency of two by: + +Adding 0 to nums[1]. +``` ## 结语 diff --git a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go index d115ccf5e..4486ad09f 100644 --- a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go +++ b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int, numOperations int) int { + const N = 100000 + 2 + + freq := make([]int, N) + sweep := make([]int, N) + + mm := N + MM := 0 + + for _, x := range nums { + if x >= N { + panic("Value in nums exceeds the array limit N") + } + freq[x]++ + + x0 := max(1, x-k) + + xN := min(x+k+1, N-1) + + sweep[x0]++ + sweep[xN]-- + + mm = min(mm, x0) + MM = max(MM, xN) + } + + ans := 0 + cnt := 0 + + for x := mm; x <= MM; x++ { + cnt += sweep[x] + + max_addable := min(cnt-freq[x], numOperations) + ans = max(ans, freq[x]+max_addable) + } + + return ans } diff --git a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go index 14ff50eb4..ff42f21c4 100644 --- a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go +++ b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums []int + k, numOperations int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 4, 5}, 1, 2, 2}, + {"TestCase2", []int{5, 11, 20, 20}, 5, 1, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k, c.numOperations) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.nums, c.k, c.numOperations) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ebb05e1437d2c2f3eafc296fa76b2e1fd2c80c5e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 22 Oct 2025 22:56:14 +0800 Subject: [PATCH 426/450] Add solution and test-cases for problem 3347 --- .../README.md | 41 ++++++--- .../Solution.go | 85 ++++++++++++++++++- .../Solution_test.go | 23 ++--- 3 files changed, 123 insertions(+), 26 deletions(-) diff --git a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md index b5e3be604..acd94f522 100755 --- a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md +++ b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md @@ -1,28 +1,43 @@ # [3347.Maximum Frequency of an Element After Performing Operations II][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 integer array `nums` and two integers `k` and `numOperations`. + +You must perform an **operation** numOperations times on `nums`, where in each operation you: + +- Select an index `i` that was **not** selected in any previous operations. +- Add an integer in the range `[-k, k]` to `nums[i]`. + +Return the **maximum** possible frequency of any element in `nums` after performing the **operations**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,4,5], k = 1, numOperations = 2 + +Output: 2 -## 题意 -> ... +Explanation: -## 题解 +We can achieve a maximum frequency of two by: -### 思路1 -> ... -Maximum Frequency of an Element After Performing Operations II -```go +Adding 0 to nums[1], after which nums becomes [1, 4, 5]. +Adding -1 to nums[2], after which nums becomes [1, 4, 4]. ``` +**Example 2:** + +``` +Input: nums = [5,11,20,20], k = 5, numOperations = 1 + +Output: 2 + +Explanation: + +We can achieve a maximum frequency of two by: + +Adding 0 to nums[1]. +``` ## 结语 diff --git a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go index d115ccf5e..ed05d7def 100644 --- a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go +++ b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go @@ -1,5 +1,86 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int, numOperations int) int { + sort.Ints(nums) + ans := 0 + numCount := make(map[int]int) + modes := make(map[int]bool) + + addMode := func(value int) { + modes[value] = true + if value-k >= nums[0] { + modes[value-k] = true + } + if value+k <= nums[len(nums)-1] { + modes[value+k] = true + } + } + + lastNumIndex := 0 + for i := 0; i < len(nums); i++ { + if nums[i] != nums[lastNumIndex] { + numCount[nums[lastNumIndex]] = i - lastNumIndex + if i-lastNumIndex > ans { + ans = i - lastNumIndex + } + addMode(nums[lastNumIndex]) + lastNumIndex = i + } + } + + numCount[nums[lastNumIndex]] = len(nums) - lastNumIndex + if len(nums)-lastNumIndex > ans { + ans = len(nums) - lastNumIndex + } + addMode(nums[lastNumIndex]) + + leftBound := func(value int) int { + left, right := 0, len(nums)-1 + for left < right { + mid := (left + right) / 2 + if nums[mid] < value { + left = mid + 1 + } else { + right = mid + } + } + return left + } + + rightBound := func(value int) int { + left, right := 0, len(nums)-1 + for left < right { + mid := (left + right + 1) / 2 + if nums[mid] > value { + right = mid - 1 + } else { + left = mid + } + } + return left + } + + uniqueModes := make([]int, 0, len(modes)) + for mode := range modes { + uniqueModes = append(uniqueModes, mode) + } + sort.Ints(uniqueModes) + + for _, mode := range uniqueModes { + l := leftBound(mode - k) + r := rightBound(mode + k) + var tempAns int + if count, exists := numCount[mode]; exists { + tempAns = min(r-l+1, count+numOperations) + } else { + tempAns = min(r-l+1, numOperations) + } + if tempAns > ans { + ans = tempAns + } + } + + return ans } diff --git a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go index 14ff50eb4..dcd121fca 100644 --- a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go +++ b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums []int + k int + numOperations int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 4, 5}, 1, 2, 2}, + {"TestCase2", []int{5, 11, 20, 20}, 5, 1, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k, c.numOperations) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.nums, c.k, c.numOperations) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f650fa4c89ccc66e5fa378eedc898d065baef91c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 23 Oct 2025 09:42:06 +0800 Subject: [PATCH 427/450] Add solution and test-cases for problem 3461 --- .../README.md | 48 ++++++++++++++----- .../Solution.go | 11 ++++- .../Solution_test.go | 11 ++--- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md index ce9f8a897..4f9ad9886 100755 --- a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md +++ b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/README.md @@ -1,28 +1,50 @@ # [3461.Check If Digits Are Equal in String After Operations I][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 a string `s` consisting of digits. Perform the following operation repeatedly until the string has **exactly** two digits: + +- For each pair of consecutive digits in `s`, starting from the first digit, calculate a new digit as the sum of the two digits **modulo** 10. +- Replace `s` with the sequence of newly calculated digits, maintaining the order in which they are computed. + +Return `true` if the final two digits in `s` are the **same**; otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "3902" + +Output: true + +Explanation: + +Initially, s = "3902" +First operation: +(s[0] + s[1]) % 10 = (3 + 9) % 10 = 2 +(s[1] + s[2]) % 10 = (9 + 0) % 10 = 9 +(s[2] + s[3]) % 10 = (0 + 2) % 10 = 2 +s becomes "292" +Second operation: +(s[0] + s[1]) % 10 = (2 + 9) % 10 = 1 +(s[1] + s[2]) % 10 = (9 + 2) % 10 = 1 +s becomes "11" +Since the digits in "11" are the same, the output is true. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Check If Digits Are Equal in String After Operations I -```go ``` +Input: s = "34789" +Output: false + +Explanation: + +Initially, s = "34789". +After the first operation, s = "7157". +After the second operation, s = "862". +After the third operation, s = "48". +Since '4' != '8', the output is false. +``` ## 结语 diff --git a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go index d115ccf5e..a8a4167e2 100644 --- a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go +++ b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) bool { + count := len(s) - 2 + bs := []byte(s) + for i := count; i > 0; i-- { + for j := 0; j <= i; j++ { + bs[j] = byte((int(bs[j]-'0')+int(bs[j+1]-'0'))%10) + '0' + } + } + return bs[0] == bs[1] } diff --git a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go index 14ff50eb4..11ce16f78 100644 --- a/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go +++ b/leetcode/3401-3500/3461.Check-If-Digits-Are-Equal-in-String-After-Operations-I/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "3902", true}, + {"TestCase2", "34789", false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b00e532c9488c9710ef368fe84b887b2c07e5c93 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 24 Oct 2025 21:48:55 +0800 Subject: [PATCH 428/450] Add solution and test-cases for problem 2048 --- .../README.md | 43 +++++++++++++------ .../Solution.go | 38 +++++++++++++++- .../Solution_test.go | 15 ++++--- 3 files changed, 74 insertions(+), 22 deletions(-) diff --git a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md index 8f136a949..da4c4cb1a 100755 --- a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md +++ b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md @@ -1,28 +1,45 @@ # [2048.Next Greater Numerically Balanced Number][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 +An integer `x` is **numerically balanced** if for every digit `d` in the number `x`, there are **exactly** `d` occurrences of that digit in `x`. + +Given an integer `n`, return the **smallest numerically balanced** number **strictly greater** than `n`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 1 +Output: 22 +Explanation: +22 is numerically balanced since: +- The digit 2 occurs 2 times. +It is also the smallest numerically balanced number strictly greater than 1. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Next Greater Numerically Balanced Number -```go +``` +Input: n = 1000 +Output: 1333 +Explanation: +1333 is numerically balanced since: +- The digit 1 occurs 1 time. +- The digit 3 occurs 3 times. +It is also the smallest numerically balanced number strictly greater than 1000. +Note that 1022 cannot be the answer because 0 appeared more than 0 times. ``` +**Example 3:** + +``` +Input: n = 3000 +Output: 3133 +Explanation: +3133 is numerically balanced since: +- The digit 1 occurs 1 time. +- The digit 3 occurs 3 times. +It is also the smallest numerically balanced number strictly greater than 3000. +``` ## 结语 diff --git a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go index d115ccf5e..d05edc78c 100644 --- a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go +++ b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(n int) int { + if n == 0 { + return 1 + } + nums := [7][]int{ + // 1 + {1}, + // 2 + {22}, + // 3 + {122, 212, 221, 333}, + // 4 + {1333, 3133, 3313, 3331, 4444}, + // 5 + {14444, 22333, 23233, 23323, 23332, 32233, 32323, 32332, 33223, 33232, 33322, 41444, 44144, 44414, 44441, 55555}, + // 6 + {122333, 123233, 123323, 123332, 132233, 132323, 132332, 133223, 133232, 133322, 155555, 212333, 213233, 213323, 213332, 221333, 223133, 223313, 223331, 224444, 231233, 231323, 231332, 232133, 232313, 232331, 233123, 233132, 233213, 233231, 233312, 233321, 242444, 244244, 244424, 244442, 312233, 312323, 312332, 313223, 313232, 313322, 321233, 321323, 321332, 322133, 322313, 322331, 323123, 323132, 323213, 323231, 323312, 323321, 331223, 331232, 331322, 332123, 332132, 332213, 332231, 332312, 332321, 333122, 333212, 333221, 422444, 424244, 424424, 424442, 442244, 442424, 442442, 444224, 444242, 444422, 515555, 551555, 555155, 555515, 555551, 666666}, + // 7 + {1224444, 1242444, 1244244, 1244424, 1244442, 1422444, 1424244, 1424424, 1424442, 1442244, 1442424, 1442442, 1444224, 1444242, 1444422, 1666666, 2124444, 2142444, 2144244, 2144424, 2144442, 2214444, 2241444, 2244144, 2244414, 2244441, 2255555, 2412444, 2414244, 2414424, 2414442, 2421444, 2424144, 2424414, 2424441, 2441244, 2441424, 2441442, 2442144, 2442414, 2442441, 2444124, 2444142, 2444214, 2444241, 2444412, 2444421, 2525555, 2552555, 2555255, 2555525, 2555552, 3334444, 3343444, 3344344, 3344434, 3344443, 3433444, 3434344, 3434434, 3434443, 3443344, 3443434, 3443443, 3444334, 3444343, 3444433, 4122444, 4124244, 4124424, 4124442, 4142244, 4142424, 4142442, 4144224, 4144242, 4144422, 4212444, 4214244, 4214424, 4214442, 4221444, 4224144, 4224414, 4224441, 4241244, 4241424, 4241442, 4242144, 4242414, 4242441, 4244124, 4244142, 4244214, 4244241, 4244412, 4244421, 4333444, 4334344, 4334434, 4334443, 4343344, 4343434, 4343443, 4344334, 4344343, 4344433, 4412244, 4412424, 4412442, 4414224, 4414242, 4414422, 4421244, 4421424, 4421442, 4422144, 4422414, 4422441, 4424124, 4424142, 4424214, 4424241, 4424412, 4424421, 4433344, 4433434, 4433443, 4434334, 4434343, 4434433, 4441224, 4441242, 4441422, 4442124, 4442142, 4442214, 4442241, 4442412, 4442421, 4443334, 4443343, 4443433, 4444122, 4444212, 4444221, 4444333, 5225555, 5252555, 5255255, 5255525, 5255552, 5522555, 5525255, 5525525, 5525552, 5552255, 5552525, 5552552, 5555225, 5555252, 5555522, 6166666, 6616666, 6661666, 6666166, 6666616, 6666661, 7777777}, + } + nBit := 0 + x := n + for n > 0 { + n /= 10 + nBit++ + } + l := len(nums[nBit-1]) + index := sort.Search(l, func(i int) bool { + return nums[nBit-1][i] > x + }) + if index == l { + return nums[nBit][0] + } + return nums[nBit-1][index] } diff --git a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go index 14ff50eb4..7dde2f5c2 100644 --- a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go +++ b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go @@ -10,12 +10,13 @@ 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", 1, 22}, + {"TestCase2", 1000, 1333}, + {"TestCase3", 3000, 3133}, + {"TestCase4", 0, 1}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 36079e6b9a611ee82607bb0ff60ab65157f07b99 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 25 Oct 2025 11:29:36 +0800 Subject: [PATCH 429/450] Add solution and test-cases for problem 2639 --- .../README.md | 36 +++++++++++++++++++ .../Solution.go | 27 ++++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/README.md diff --git a/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/README.md b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/README.md new file mode 100644 index 000000000..9073dfb30 --- /dev/null +++ b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/README.md @@ -0,0 +1,36 @@ +# [2639.Find the Width of Columns of a Grid][title] + +## Description +You are given a **0-indexed** `m x n` integer matrix `grid`. The width of a column is the maximum **length** of its integers. + +- For example, if `grid = [[-10], [3], [12]]`, the width of the only column is `3` since `-10` is of length `3`. + +Return an integer array `ans` of size n where `ans[i]` is the width of the `ith` column. + +The **length** of an integer `x` with `len` digits is equal to `len` if `x` is non-negative, and `len + 1` otherwise. + +**Example 1:** + +``` +Input: grid = [[1],[22],[333]] +Output: [3] +Explanation: In the 0th column, 333 is of length 3. +``` + +**Example 2:** + +``` +Input: grid = [[-15,1,3],[15,7,12],[5,6,-2]] +Output: [3,1,2] +Explanation: +In the 0th column, only -15 is of length 3. +In the 1st column, all integers are of length 1. +In the 2nd column, both 12 and -2 are of length 2. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-width-of-columns-of-a-grid +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go index d115ccf5e..8dc764d2e 100755 --- a/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go +++ b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func nBits(n int) int { + if n == 0 { + return 1 + } + bits := 0 + if n < 0 { + bits++ + n = -n + } + for n > 0 { + n /= 10 + bits++ + } + return bits +} + +func Solution(grid [][]int) []int { + rows, cols := len(grid), len(grid[0]) + ret := make([]int, cols) + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + ret[c] = max(ret[c], nBits(grid[r][c])) + } + } + return ret } diff --git a/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution_test.go b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution_test.go index 14ff50eb4..2ae1a0723 100755 --- a/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution_test.go +++ b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/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}, {22}, {333}}, []int{3}}, + {"TestCase2", [][]int{{-15, 1, 3}, {15, 7, 12}, {5, 6, -2}}, []int{3, 1, 2}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a441a793d9ac8dab0d76d61ec472269031943301 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Oct 2025 15:48:31 +0800 Subject: [PATCH 430/450] Add solution and test-cases for problem 2241 --- .../2241.Design-an-ATM-Machine/README.md | 49 +++++++++----- .../2241.Design-an-ATM-Machine/Solution.go | 66 ++++++++++++++++++- .../Solution_test.go | 18 +++-- 3 files changed, 108 insertions(+), 25 deletions(-) diff --git a/leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md b/leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md index d7bcfe292..cb794a8dd 100755 --- a/leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md +++ b/leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md @@ -1,28 +1,45 @@ # [2241.Design an ATM Machine][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 +There is an ATM machine that stores banknotes of `5` denominations: `20`, `50`, `100`, `200`, and `500` dollars. Initially the ATM is empty. The user can use the machine to deposit or withdraw any amount of money. -**Example 1:** +When withdrawing, the machine prioritizes using banknotes of **larger** values. -``` -Input: a = "11", b = "1" -Output: "100" -``` +- For example, if you want to withdraw `$300` and there are `2` `$50` banknotes, `1` `$100` banknote, and `1` `$200` banknote, then the machine will use the `$100` and `$200` banknotes. +- However, if you try to withdraw `$600` and there are `3` `$200` banknotes and `1` `$500` banknote, then the withdraw request will be rejected because the machine will first try to use the `$500` banknote and then be unable to use banknotes to complete the remaining `$100`. Note that the machine is **not** allowed to use the `$200` banknotes instead of the `$500` banknote. -## 题意 -> ... +Implement the ATM class: -## 题解 +- `ATM()` Initializes the ATM object. +- `void deposit(int[] banknotesCount)` Deposits new banknotes in the order `$20`, `$50`, `$100`, `$200`, and `$500`. +- `int[] withdraw(int amount)` Returns an array of length `5` of the number of banknotes that will be handed to the user in the order `$20`, `$50`, `$100`, `$200`, and `$500`, and update the number of banknotes in the ATM after withdrawing. Returns `[-1]` if it is not possible (do **not** withdraw any banknotes in this case). -### 思路1 -> ... -Design an ATM Machine -```go -``` +**Example 1:** +``` +Input +["ATM", "deposit", "withdraw", "deposit", "withdraw", "withdraw"] +[[], [[0,0,1,2,1]], [600], [[0,1,0,1,1]], [600], [550]] +Output +[null, null, [0,0,1,0,1], null, [-1], [0,1,0,0,1]] + +Explanation +ATM atm = new ATM(); +atm.deposit([0,0,1,2,1]); // Deposits 1 $100 banknote, 2 $200 banknotes, + // and 1 $500 banknote. +atm.withdraw(600); // Returns [0,0,1,0,1]. The machine uses 1 $100 banknote + // and 1 $500 banknote. The banknotes left over in the + // machine are [0,0,0,2,0]. +atm.deposit([0,1,0,1,1]); // Deposits 1 $50, $200, and $500 banknote. + // The banknotes in the machine are now [0,1,0,3,1]. +atm.withdraw(600); // Returns [-1]. The machine will try to use a $500 banknote + // and then be unable to complete the remaining $100, + // so the withdraw request will be rejected. + // Since the request is rejected, the number of banknotes + // in the machine is not modified. +atm.withdraw(550); // Returns [0,1,0,0,1]. The machine uses 1 $50 banknote + // and 1 $500 banknote. +``` ## 结语 diff --git a/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go index d115ccf5e..1eb113eb9 100644 --- a/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go +++ b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go @@ -1,5 +1,67 @@ package Solution -func Solution(x bool) bool { - return x +type ATM struct { + value [5]int + atm [5]int +} + +func Constructor() ATM { + return ATM{ + value: [5]int{20, 50, 100, 200, 500}, + atm: [5]int{}, + } +} + +func (this *ATM) Deposit(banknotesCount []int) { + for i := range 5 { + this.atm[i] += banknotesCount[i] + } +} + +func (this *ATM) Withdraw(amount int) []int { + index := 4 + ret := make([]int, 5) + for ; index >= 0; index-- { + if this.atm[index] != 0 { + break + } + } + if index == -1 { + return []int{-1} + } + source := this.atm + for ; index >= 0 && amount > 0; index-- { + if this.atm[index] > 0 { + c := amount / this.value[index] + use := min(c, this.atm[index]) + amount -= use * this.value[index] + this.atm[index] = max(0, this.atm[index]-use) + ret[index] = use + } + } + if amount > 0 { + // 不要见 + this.atm = source + return []int{-1} + } + return ret +} + +type op struct { + name byte + banknotesCount []int + amount int +} + +func Solution(opts []op) [][]int { + var ret [][]int + atm := Constructor() + for _, o := range opts { + if o.name == 'd' { + atm.Deposit(o.banknotesCount) + continue + } + ret = append(ret, atm.Withdraw(o.amount)) + } + return ret } diff --git a/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go index 14ff50eb4..5be79041b 100644 --- a/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go +++ b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go @@ -10,12 +10,16 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []op + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []op{ + {'d', []int{0, 0, 1, 2, 1}, 0}, + {'w', []int{}, 600}, + {'d', []int{0, 1, 0, 1, 1}, 0}, + {'w', []int{}, 600}, + {'w', []int{}, 550}, + }, [][]int{{0, 0, 1, 0, 1}, {-1}, {0, 1, 0, 0, 1}}}, } // 开始测试 @@ -30,10 +34,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3c80be4c5bc5fb6cd3da22d2fa04280cc31b9488 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Oct 2025 20:19:13 +0800 Subject: [PATCH 431/450] Add solution and test-cases for problem 2240 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 10 +++++-- .../Solution_test.go | 21 +++++++------ 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md index 90aa539aa..e715b72ac 100755 --- a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md +++ b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md @@ -1,28 +1,30 @@ # [2240.Number of Ways to Buy Pens and Pencils][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 integer `total` indicating the amount of money you have. You are also given two integers `cost1` and `cost2` indicating the price of a pen and pencil respectively. You can spend **part or all** of your money to buy multiple quantities (or none) of each kind of writing utensil. + +Return the **number of distinct ways** you can buy some number of pens and pencils. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: total = 20, cost1 = 10, cost2 = 5 +Output: 9 +Explanation: The price of a pen is 10 and the price of a pencil is 5. +- If you buy 0 pens, you can buy 0, 1, 2, 3, or 4 pencils. +- If you buy 1 pen, you can buy 0, 1, or 2 pencils. +- If you buy 2 pens, you cannot buy any pencils. +The total number of ways to buy pens and pencils is 5 + 3 + 1 = 9. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Ways to Buy Pens and Pencils -```go ``` - +Input: total = 5, cost1 = 10, cost2 = 10 +Output: 1 +Explanation: The price of both pens and pencils are 10, which cost more than total, so you cannot buy any writing utensils. Therefore, there is only 1 way: buy 0 pens and 0 pencils. +``` ## 结语 diff --git a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go index d115ccf5e..f8fa34259 100644 --- a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go +++ b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go @@ -1,5 +1,11 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(total int, cost1 int, cost2 int) int64 { + var ret int64 + penCount := 0 + for ; penCount*cost1 <= total; penCount++ { + left := (total-penCount*cost1)/cost2 + 1 // 0 + ret += int64(left) + } + return ret } diff --git a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go index 14ff50eb4..9c0010fc2 100644 --- a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go +++ b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + total, cost1, cost2 int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 20, 10, 5, 9}, + {"TestCase2", 5, 10, 10, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.total, c.cost1, c.cost2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.total, c.cost1, c.cost2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cdbbb6e360f96301d8ac4909dfb51fdadb44c2b4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Oct 2025 20:31:43 +0800 Subject: [PATCH 432/450] Add solution and test-cases for problem 2177 --- .../README.md | 24 ++++++++----------- .../Solution.go | 8 +++++-- .../Solution_test.go | 13 +++++----- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md index 71b2fe39c..c7b64dca9 100755 --- a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md +++ b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md @@ -1,28 +1,24 @@ # [2177.Find Three Consecutive Integers That Sum to a Given Number][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 +Given an integer `num`, return three consecutive integers (as a sorted array) that **sum** to `num`. If `num` cannot be expressed as the sum of three consecutive integers, return an **empty** array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 33 +Output: [10,11,12] +Explanation: 33 can be expressed as 10 + 11 + 12 = 33. +10, 11, 12 are 3 consecutive integers, so we return [10, 11, 12]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Three Consecutive Integers That Sum to a Given Number -```go ``` - +Input: num = 4 +Output: [] +Explanation: There is no way to express 4 as the sum of 3 consecutive integers. +``` ## 结语 diff --git a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go index d115ccf5e..f59ff56da 100644 --- a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go +++ b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go @@ -1,5 +1,9 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num int64) []int64 { + if num%3 != 0 { + return []int64{} + } + mid := num / 3 + return []int64{mid - 1, mid, mid + 1} } diff --git a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go index 14ff50eb4..7370ab829 100644 --- a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go +++ b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int64 + expect []int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 33, []int64{10, 11, 12}}, + {"TestCase2", 4, []int64{}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8716858e7b651357421796802079fb0ff35a608a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 28 Oct 2025 22:49:30 +0800 Subject: [PATCH 433/450] Add solution and test-cases for problem 3354 --- .../README.md | 50 ++++++++++++++----- .../Solution.go | 25 +++++++++- .../Solution_test.go | 13 +++-- 3 files changed, 66 insertions(+), 22 deletions(-) diff --git a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md index c47f9d4f9..4091a8f7d 100755 --- a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md +++ b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md @@ -1,28 +1,52 @@ # [3354.Make Array Elements Equal to Zero][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 integer array `nums`. + +Start by selecting a starting position `curr` such that `nums[curr] == 0`, and choose a movement **direction** of either left or right. + +After that, you repeat the following process: + +- If `curr` is out of the range `[0, n - 1]`, this process ends. +- If `nums[curr] == 0`, move in the current direction by **incrementing** `curr` if you are moving right, or **decrementing** `curr` if you are moving left. +- Else if `nums[curr] > 0`: + + - Decrement `nums[curr]` by 1. + - **Reverse** your movement direction (left becomes right and vice versa). + - Take a step in your new direction. + +A selection of the initial position `curr` and movement direction is considered **valid** if every element in `nums` becomes 0 by the end of the process. + +Return the number of possible **valid** selections. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,0,2,0,3] -## 题意 -> ... +Output: 2 -## 题解 +Explanation: + +The only possible valid selections are the following: + +Choose curr = 3, and a movement direction to the left. +[1,0,2,0,3] -> [1,0,2,0,3] -> [1,0,1,0,3] -> [1,0,1,0,3] -> [1,0,1,0,2] -> [1,0,1,0,2] -> [1,0,0,0,2] -> [1,0,0,0,2] -> [1,0,0,0,1] -> [1,0,0,0,1] -> [1,0,0,0,1] -> [1,0,0,0,1] -> [0,0,0,0,1] -> [0,0,0,0,1] -> [0,0,0,0,1] -> [0,0,0,0,1] -> [0,0,0,0,0]. +Choose curr = 3, and a movement direction to the right. +[1,0,2,0,3] -> [1,0,2,0,3] -> [1,0,2,0,2] -> [1,0,2,0,2] -> [1,0,1,0,2] -> [1,0,1,0,2] -> [1,0,1,0,1] -> [1,0,1,0,1] -> [1,0,0,0,1] -> [1,0,0,0,1] -> [1,0,0,0,0] -> [1,0,0,0,0] -> [1,0,0,0,0] -> [1,0,0,0,0] -> [0,0,0,0,0]. +``` + +**Example 2:** -### 思路1 -> ... -Make Array Elements Equal to Zero -```go ``` +Input: nums = [2,3,4,0,4,1,0] +Output: 0 + +Explanation: + +There are no possible valid selections. +``` ## 结语 diff --git a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go index d115ccf5e..77ea1c3ba 100644 --- a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go +++ b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + l := len(nums) + left, right := make([]int, l+2), make([]int, l+2) + for i := 1; i <= l; i++ { + left[i] = left[i-1] + nums[i-1] + } + for i := l; i >= 1; i-- { + right[i] = right[i+1] + nums[i-1] + } + var ret int + for index := 1; index <= l; index++ { + if nums[index-1] != 0 { + continue + } + diff := left[index-1] - right[index+1] + if diff == 0 { + ret += 2 + } + if diff == 1 || diff == -1 { + ret++ + } + } + return ret } diff --git a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution_test.go b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution_test.go index 14ff50eb4..8ebd3e5dd 100644 --- a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution_test.go +++ b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/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, 0, 2, 0, 3}, 2}, + {"TestCase2", []int{2, 3, 4, 0, 4, 1, 0}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 19c5232feace7337f8ab0e2e1c511b870172d43f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 29 Oct 2025 09:37:11 +0800 Subject: [PATCH 434/450] Add solution and test-cases for problem 3370 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 11 ++++- .../Solution_test.go | 14 +++---- 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md index 5035313d8..f81fef0be 100755 --- a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md +++ b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md @@ -1,28 +1,45 @@ # [3370.Smallest Number With All Set Bits][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 a positive number `n`. + +Return the **smallest** number `x` **greater than** or **equal to** `n`, such that the binary representation of `x` contains only set bits **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5 + +Output: 7 + +Explanation: + +The binary representation of 7 is "111". +``` + +**Example 2:** + ``` +Input: n = 10 + +Output: 15 -## 题意 -> ... +Explanation: + +The binary representation of 15 is "1111". +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Smallest Number With All Set Bits -```go ``` +Input: n = 3 +Output: 3 + +Explanation: + +The binary representation of 3 is "11". +``` ## 结语 diff --git a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go index d115ccf5e..7f64d6657 100644 --- a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go +++ b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + base := 2 + for i := 0; i < 10; i++ { + if base-1 >= n { + return base - 1 + } + base *= 2 + } + return 0 } diff --git a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go index 14ff50eb4..fffb3b5a6 100644 --- a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go +++ b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go @@ -10,12 +10,12 @@ 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", 5, 7}, + {"TestCase2", 10, 15}, + {"TestCase3", 3, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 02b256d108c193bf1689e7bf5de0244b817bc385 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 30 Oct 2025 22:50:57 +0800 Subject: [PATCH 435/450] Add solution and test-cases for problem 1526 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 9 ++++- .../Solution_test.go | 14 +++---- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md index 05c1a0ab9..6b97c2237 100755 --- a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md +++ b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md @@ -1,28 +1,41 @@ # [1526.Minimum Number of Increments on Subarrays to Form a Target Array][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 +ou are given an integer array `target`. You have an integer array `initial` of the same size as `target` with all elements initially zeros. + +In one operation you can choose **any** subarray from `initial` and increment each value by one. + +Return the minimum number of operations to form a `target` array from `initial`. + +The test cases are generated so that the answer fits in a 32-bit integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: target = [1,2,3,2,1] +Output: 3 +Explanation: We need at least 3 operations to form the target array from the initial array. +[0,0,0,0,0] increment 1 from index 0 to 4 (inclusive). +[1,1,1,1,1] increment 1 from index 1 to 3 (inclusive). +[1,2,2,2,1] increment 1 at index 2. +[1,2,3,2,1] target array is formed. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Number of Increments on Subarrays to Form a Target Array -```go ``` +Input: target = [3,1,1,2] +Output: 4 +Explanation: [0,0,0,0] -> [1,1,1,1] -> [1,1,1,2] -> [2,1,1,2] -> [3,1,1,2] +``` + +**Example 3:** +``` +Input: target = [3,1,5,4,2] +Output: 7 +Explanation: [0,0,0,0,0] -> [1,1,1,1,1] -> [2,1,1,1,1] -> [3,1,1,1,1] -> [3,1,2,2,2] -> [3,1,3,3,2] -> [3,1,4,4,2] -> [3,1,5,4,2]. +``` ## 结语 diff --git a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go index d115ccf5e..64faff70f 100644 --- a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go +++ b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go @@ -1,5 +1,10 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(target []int) int { + n := len(target) + ans := target[0] + for i := 1; i < n; i++ { + ans += max(target[i]-target[i-1], 0) + } + return ans } diff --git a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution_test.go b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution_test.go index 14ff50eb4..383d2d162 100644 --- a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution_test.go +++ b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution_test.go @@ -10,12 +10,12 @@ 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, 3, 2, 1}, 3}, + {"TestCase2", []int{3, 1, 1, 2}, 4}, + {"TestCase3", []int{3, 1, 5, 4, 2}, 7}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 620bd1af1aa05c0e85bde415f1a2c3da166f6cee Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 31 Oct 2025 09:48:29 +0800 Subject: [PATCH 436/450] Add solution and test-cases for problem 3289 --- .../README.md | 49 +++++++++++++++++++ .../Solution.go | 16 ++++++ .../Solution_test.go | 41 ++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/README.md create mode 100644 leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution.go create mode 100644 leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution_test.go diff --git a/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/README.md b/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/README.md new file mode 100644 index 000000000..16930560c --- /dev/null +++ b/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/README.md @@ -0,0 +1,49 @@ +# [3289.The Two Sneaky Numbers of Digitville][title] + +## Description +In the town of Digitville, there was a list of numbers called `nums` containing integers from `0` to `n - 1`. Each number was supposed to appear **exactly once** in the list, however, **two** mischievous numbers sneaked in an additional time, making the list longer than usual. + +As the town detective, your task is to find these **two** sneaky numbers. Return an array of size two containing the two numbers (in any order), so peace can return to Digitville. + +**Example 1:** + +``` +Input: nums = [0,1,1,0] + +Output: [0,1] + +Explanation: + +The numbers 0 and 1 each appear twice in the array. +``` + +**Example 2:** + +``` +Input: nums = [0,3,2,1,3,2] + +Output: [2,3] + +Explanation: + +The numbers 2 and 3 each appear twice in the array. +``` + +**Example 3:** + +``` +Input: nums = [7,1,5,4,3,4,6,0,9,5,8,2] + +Output: [4,5] + +Explanation: + +The numbers 4 and 5 each appear twice in the array. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-two-sneaky-numbers-of-digitville +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution.go b/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution.go new file mode 100644 index 000000000..587844c45 --- /dev/null +++ b/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution.go @@ -0,0 +1,16 @@ +package Solution + +func Solution(nums []int) []int { + ret := make([]int, 2) + index := 0 + exists := make([]bool, len(nums)-2) + for _, n := range nums { + if exists[n] { + ret[index] = n + index++ + continue + } + exists[n] = true + } + return ret +} diff --git a/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution_test.go b/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution_test.go new file mode 100644 index 000000000..8cb103a68 --- /dev/null +++ b/leetcode/3201-3300/3289.The-Two-Sneaky-Numbers-of-Digitville/Solution_test.go @@ -0,0 +1,41 @@ +package Solution + +import ( + "reflect" + "sort" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + expect []int + }{ + {"TestCase1", []int{0, 1, 1, 0}, []int{0, 1}}, + {"TestCase2", []int{0, 3, 2, 1, 3, 2}, []int{2, 3}}, + {"TestCase3", []int{7, 1, 5, 4, 3, 4, 6, 0, 9, 5, 8, 2}, []int{4, 5}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + sort.Ints(got) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 8ac42a2ecb37f2030eea689406475e1828d470a0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 1 Nov 2025 22:33:36 +0800 Subject: [PATCH 437/450] Add solution and test-cases for problem 3280 --- .../3280.Convert-Date-to-Binary/README.md | 39 +++++++++++++++++++ .../3280.Convert-Date-to-Binary/Solution.go | 30 ++++++++++++++ .../Solution_test.go | 38 ++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 leetcode/3201-3300/3280.Convert-Date-to-Binary/README.md create mode 100644 leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution.go create mode 100644 leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution_test.go diff --git a/leetcode/3201-3300/3280.Convert-Date-to-Binary/README.md b/leetcode/3201-3300/3280.Convert-Date-to-Binary/README.md new file mode 100644 index 000000000..a83590013 --- /dev/null +++ b/leetcode/3201-3300/3280.Convert-Date-to-Binary/README.md @@ -0,0 +1,39 @@ +# [3280.Convert Date to Binary][title] + +## Description +You are given a string `date` representing a Gregorian calendar date in the `yyyy-mm-dd` format. + +`date` can be written in its binary representation obtained by converting year, month, and day to their binary representations without any leading zeroes and writing them down in `year-month-day` format. + +Return the **binary** representation of `date`. + +**Example 1:** + +``` +Input: date = "2080-02-29" + +Output: "100000100000-10-11101" + +Explanation: + +100000100000, 10, and 11101 are the binary representations of 2080, 02, and 29 respectively. +``` + +**Example 2:** + +``` +Input: date = "1900-01-01" + +Output: "11101101100-1-1" + +Explanation: + +11101101100, 1, and 1 are the binary representations of 1900, 1, and 1 respectively. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/convert-date-to-binary +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution.go b/leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution.go new file mode 100644 index 000000000..256164025 --- /dev/null +++ b/leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution.go @@ -0,0 +1,30 @@ +package Solution + +import "bytes" + +func convert(s string) string { + base := 0 + for _, b := range s { + base = base*10 + int(b-'0') + } + buf := bytes.NewBuffer([]byte{}) + for base > 0 { + mod := base & 1 + if mod == 1 { + buf.WriteByte('1') + } else { + buf.WriteByte('0') + } + base >>= 1 + } + bs := buf.Bytes() + for s, e := 0, len(bs)-1; s < e; s, e = s+1, e-1 { + bs[s], bs[e] = bs[e], bs[s] + } + return string(bs) +} + +func Solution(date string) string { + // 0:4, 5:7 8:end + return convert(date[:4]) + "-" + convert(date[5:7]) + "-" + convert(date[8:]) +} diff --git a/leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution_test.go b/leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution_test.go new file mode 100644 index 000000000..7319a2e44 --- /dev/null +++ b/leetcode/3201-3300/3280.Convert-Date-to-Binary/Solution_test.go @@ -0,0 +1,38 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs string + expect string + }{ + {"TestCase1", "2080-02-29", "100000100000-10-11101"}, + {"TestCase2", "1900-01-01", "11101101100-1-1"}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 338c4894a0198d1820268560dd6e05c9cc7f3fbf Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 2 Nov 2025 20:25:45 +0800 Subject: [PATCH 438/450] Add solution and test-cases for problem 384 --- .../301-400/0384.Shuffle-an-Array/README.md | 37 ++++++++------- .../301-400/0384.Shuffle-an-Array/Solution.go | 45 ++++++++++++++++++- .../0384.Shuffle-an-Array/Solution_test.go | 19 ++++---- 3 files changed, 72 insertions(+), 29 deletions(-) diff --git a/leetcode/301-400/0384.Shuffle-an-Array/README.md b/leetcode/301-400/0384.Shuffle-an-Array/README.md index 1b57d93ac..cb9b3f00f 100644 --- a/leetcode/301-400/0384.Shuffle-an-Array/README.md +++ b/leetcode/301-400/0384.Shuffle-an-Array/README.md @@ -1,28 +1,31 @@ # [384.Shuffle an Array][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 +Given an integer array `nums`, design an algorithm to randomly shuffle the array. All permutations of the array should be **equally likely** as a result of the shuffling. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `Solution` class: -## 题意 -> ... +- `Solution(int[] nums)` Initializes the object with the integer array `nums`. +- `int[] reset()` Resets the array to its original configuration and returns it. +- `int[] shuffle()` Returns a random shuffling of the array. -## 题解 +**Example 1:** -### 思路1 -> ... -Shuffle an Array -```go ``` - +Input +["Solution", "shuffle", "reset", "shuffle"] +[[[1, 2, 3]], [], [], []] +Output +[null, [3, 1, 2], [1, 2, 3], [1, 3, 2]] + +Explanation +Solution solution = new Solution([1, 2, 3]); +solution.shuffle(); // Shuffle the array [1,2,3] and return its result. + // Any permutation of [1,2,3] must be equally likely to be returned. + // Example: return [3, 1, 2] +solution.reset(); // Resets the array back to its original configuration [1,2,3]. Return [1, 2, 3] +solution.shuffle(); // Returns the random shuffling of array [1,2,3]. Example: return [1, 3, 2] +``` ## 结语 diff --git a/leetcode/301-400/0384.Shuffle-an-Array/Solution.go b/leetcode/301-400/0384.Shuffle-an-Array/Solution.go index d115ccf5e..38bdc1793 100644 --- a/leetcode/301-400/0384.Shuffle-an-Array/Solution.go +++ b/leetcode/301-400/0384.Shuffle-an-Array/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math/rand" + "time" +) + +type Shuffle struct { + origin []int + r *rand.Rand +} + +func Constructor(nums []int) Shuffle { + return Shuffle{ + origin: nums, + r: rand.New(rand.NewSource(time.Now().UnixNano())), + } +} + +func (this *Shuffle) Reset() []int { + this.r = rand.New(rand.NewSource(time.Now().UnixNano())) + return this.origin +} + +func (this *Shuffle) Shuffle() []int { + n := len(this.origin) + cur := make([]int, len(this.origin)) + copy(cur, this.origin) + for i := n - 1; i > 0; i-- { + j := this.r.Intn(i + 1) + cur[i], cur[j] = cur[j], cur[i] + } + return cur +} +func Solution(nums []int, op []string) [][]int { + c := Constructor(nums) + var ret [][]int + for _, name := range op { + if name == "shuffle" { + ret = append(ret, c.Shuffle()) + continue + } + ret = append(ret, c.Reset()) + } + return ret } diff --git a/leetcode/301-400/0384.Shuffle-an-Array/Solution_test.go b/leetcode/301-400/0384.Shuffle-an-Array/Solution_test.go index 14ff50eb4..5d6a52681 100644 --- a/leetcode/301-400/0384.Shuffle-an-Array/Solution_test.go +++ b/leetcode/301-400/0384.Shuffle-an-Array/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + op []string + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1}, []string{"shuffle", "rest"}, [][]int{{1}, {1}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.op) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.op) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 024667ac70ff8783084a42e070cbf7c50ee03d6b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 3 Nov 2025 22:47:51 +0800 Subject: [PATCH 439/450] Add solution and test-cases for problem 1410 --- .../1410.HTML-Entity-Parser/README.md | 39 +++++++++++++++++++ .../1410.HTML-Entity-Parser/Solution.go | 13 ++++++- .../1410.HTML-Entity-Parser/Solution_test.go | 13 +++---- 3 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1410.HTML-Entity-Parser/README.md diff --git a/leetcode/1401-1500/1410.HTML-Entity-Parser/README.md b/leetcode/1401-1500/1410.HTML-Entity-Parser/README.md new file mode 100644 index 000000000..b461ed2fc --- /dev/null +++ b/leetcode/1401-1500/1410.HTML-Entity-Parser/README.md @@ -0,0 +1,39 @@ +# [1410.HTML Entity Parser][title] + +## Description +**HTML entity parser** is the parser that takes HTML code as input and replace all the entities of the special characters by the characters itself. + +The special characters and their entities for HTML are: + +- **Quotation Mark**: the entity is `"` and symbol character is `"`. +- **Single Quote Mark**: the entity is `'` and symbol character is `'`. +- **Ampersand**: the entity is `&` and symbol character is `&`. +- **Greater Than Sign**: the entity is `>` and symbol character is `>`. +- **Less Than Sign**: the entity is `<` and symbol character is `<`. +- **Slash**: the entity is `⁄` and symbol character is `/`. + +Given the input `text` string to the HTML parser, you have to implement the entity parser. + +Return the text after replacing the entities by the special characters. + +**Example 1:** + +``` +Input: text = "& is an HTML entity but &ambassador; is not." +Output: "& is an HTML entity but &ambassador; is not." +Explanation: The parser will replace the & entity by & +``` + +**Example 2:** + +``` +Input: text = "and I quote: "..."" +Output: "and I quote: \"...\"" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/html-entity-parser +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go index d115ccf5e..3d24207bd 100755 --- a/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go +++ b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "strings" +) + +func Solution(text string) string { + entities := []string{""", "'", ">", "<", "⁄", "&"} + entityMap := []string{"\"", "'", ">", "<", "/", "&"} + for index, e := range entities { + text = strings.ReplaceAll(text, e, entityMap[index]) + } + return text } diff --git a/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go index 14ff50eb4..46404ab95 100755 --- a/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go +++ b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "& is an HTML entity but &ambassador; is not.", "& is an HTML entity but &ambassador; is not."}, + {"TestCase2", "and I quote: "..."", "and I quote: \"...\""}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 56769443403ebb1ea992ee10107b261eabc6d7f6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 4 Nov 2025 22:47:23 +0800 Subject: [PATCH 440/450] Add solution and test-cases for problem 3318 --- .../README.md | 41 +++++++++----- .../Solution.go | 56 ++++++++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 92 insertions(+), 25 deletions(-) diff --git a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md index 4e5204fb8..73fe35ee4 100755 --- a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md +++ b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md @@ -1,28 +1,43 @@ # [3318.Find X-Sum of All K-Long Subarrays I][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 `nums` of `n` integers and two integers `k` and `x`. + +The **x-sum** of an array is calculated by the following procedure: + +- Count the occurrences of all elements in the array. +- Keep only the occurrences of the top `x` most frequent elements. If two elements have the same number of occurrences, the element with the **bigger** value is considered more frequent. +- Calculate the sum of the resulting array. + +**Note** that if an array has less than `x` distinct elements, its **x-sum** is the sum of the array. + +Return an integer array `answer` of length `n - k + 1` where `answer[i]` is the **x-sum** of the subarray `nums[i..i + k - 1]`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,1,2,2,3,4,2,3], k = 6, x = 2 -## 题意 -> ... +Output: [6,10,12] -## 题解 +Explanation: -### 思路1 -> ... -Find X-Sum of All K-Long Subarrays I -```go +For subarray [1, 1, 2, 2, 3, 4], only elements 1 and 2 will be kept in the resulting array. Hence, answer[0] = 1 + 1 + 2 + 2. +For subarray [1, 2, 2, 3, 4, 2], only elements 2 and 4 will be kept in the resulting array. Hence, answer[1] = 2 + 2 + 2 + 4. Note that 4 is kept in the array since it is bigger than 3 and 1 which occur the same number of times. +For subarray [2, 2, 3, 4, 2, 3], only elements 2 and 3 are kept in the resulting array. Hence, answer[2] = 2 + 2 + 2 + 3 + 3. ``` +**Example 2:** + +``` +Input: nums = [3,8,7,8,7,5], k = 2, x = 2 + +Output: [11,15,15,15,12] + +Explanation: + +Since k == x, answer[i] is equal to the sum of the subarray nums[i..i + k - 1]. +``` ## 结语 diff --git a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go index d115ccf5e..8c8497484 100644 --- a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go +++ b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go @@ -1,5 +1,57 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +type ElementInfo struct { + Value int + Freq int +} + +func Solution(nums []int, k int, x int) []int { + n := len(nums) + if k == 0 || n < k { + return []int{} + } + + answer := make([]int, n-k+1) + + for i := 0; i <= n-k; i++ { + freqMap := make(map[int]int) + for j := i; j < i+k; j++ { + freqMap[nums[j]]++ + } + + var elements []ElementInfo + for val, freq := range freqMap { + elements = append(elements, ElementInfo{ + Value: val, + Freq: freq, + }) + } + + sort.Slice(elements, func(a, b int) bool { + if elements[a].Freq != elements[b].Freq { + return elements[a].Freq > elements[b].Freq + } + return elements[a].Value > elements[b].Value + }) + + currentXSum := 0 + + limit := x + if len(elements) < x { + limit = len(elements) + } + + for idx := 0; idx < limit; idx++ { + element := elements[idx] + currentXSum += element.Value * element.Freq + } + + answer[i] = currentXSum + } + + return answer } diff --git a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go index 14ff50eb4..275f283eb 100644 --- a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go +++ b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k, x int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 2, 2, 3, 4, 2, 3}, 6, 2, []int{6, 10, 12}}, + {"TestCase2", []int{3, 8, 7, 8, 7, 5}, 2, 2, []int{11, 15, 15, 15, 12}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k, c.x) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.inputs, c.k, c.x) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ad4671df8727623427edd2cffbf73dc648150320 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 7 Nov 2025 23:02:07 +0800 Subject: [PATCH 441/450] Add solution and test-cases for problem 2528 --- .../README.md | 49 ++++++++++++++++ .../Solution.go | 58 ++++++++++++++++++- .../Solution_test.go | 22 +++---- 3 files changed, 116 insertions(+), 13 deletions(-) create mode 100644 leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/README.md diff --git a/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/README.md b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/README.md new file mode 100644 index 000000000..963c58fb1 --- /dev/null +++ b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/README.md @@ -0,0 +1,49 @@ +# [2528.Maximize the Minimum Powered City][title] + +## Description +You are given a **0-indexed** integer array `stations` of length `n`, where `stations[i]` represents the number of power stations in the `ith` city. + +Each power station can provide power to every city in a fixed **range**. In other words, if the range is denoted by r, then a power station at city `i` can provide power to all cities `j` such that `|i - j| <= r` and `0 <= i, j <= n - 1`. + +- Note that `|x|` denotes absolute value. For example, `|7 - 5| = 2` and `|3 - 10| = 7`. + +The **power** of a city is the total number of power stations it is being provided power from. + +The government has sanctioned building `k` more power stations, each of which can be built in any city, and have the same range as the pre-existing ones. + +Given the two integers `r` and `k`, return the **maximum possible minimum power** of a city, if the additional power stations are built optimally. + +**Note** that you can build the k power stations in multiple cities. + +**Example 1:** + +``` +Input: stations = [1,2,4,5,0], r = 1, k = 2 +Output: 5 +Explanation: +One of the optimal ways is to install both the power stations at city 1. +So stations will become [1,4,4,5,0]. +- City 0 is provided by 1 + 4 = 5 power stations. +- City 1 is provided by 1 + 4 + 4 = 9 power stations. +- City 2 is provided by 4 + 4 + 5 = 13 power stations. +- City 3 is provided by 5 + 4 = 9 power stations. +- City 4 is provided by 5 + 0 = 5 power stations. +So the minimum power of a city is 5. +Since it is not possible to obtain a larger power, we return 5. +``` + +**Example 2:** + +``` +Input: stations = [4,4,4,4], r = 0, k = 3 +Output: 4 +Explanation: +It can be proved that we cannot make the minimum power of a city greater than 4. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-minimum-powered-city +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go index d115ccf5e..39c4a248f 100755 --- a/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go +++ b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(stations []int, r int, k int) int64 { + n := len(stations) + cnt := make([]int64, n+1) + for i := 0; i < n; i++ { + left := max(0, i-r) + right := min(n, i+r+1) + cnt[left] += int64(stations[i]) + cnt[right] -= int64(stations[i]) + } + + minVal := int64(stations[0]) + sumTotal := int64(0) + for _, s := range stations { + if int64(s) < minVal { + minVal = int64(s) + } + sumTotal += int64(s) + } + + lo, hi := minVal, sumTotal+int64(k) + var res int64 = 0 + + for lo <= hi { + mid := lo + (hi-lo)/2 + if check(cnt, mid, r, k) { + res = mid + lo = mid + 1 + } else { + hi = mid - 1 + } + } + return res +} + +func check(cnt []int64, val int64, r int, k int) bool { + n := len(cnt) - 1 + diff := make([]int64, len(cnt)) + copy(diff, cnt) + var sum int64 = 0 + remaining := int64(k) + + for i := 0; i < n; i++ { + sum += diff[i] + if sum < val { + add := val - sum + if remaining < add { + return false + } + remaining -= add + end := min(n, i+2*r+1) + diff[end] -= add + sum += add + } + } + + return true } diff --git a/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go index 14ff50eb4..aa1cffbf6 100755 --- a/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go +++ b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + stations []int + r, k int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 4, 5, 0}, 1, 2, 5}, + {"TestCase2", []int{4, 4, 4, 4}, 0, 3, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.stations, c.r, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.stations, c.r, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1eaa7e431333b581568bc55df9f90723d419927b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 8 Nov 2025 10:09:08 +0800 Subject: [PATCH 442/450] Add solution and test-cases for problem 3271 --- .../3271.Hash-Divided-String/README.md | 43 +++++++++++++------ .../3271.Hash-Divided-String/Solution.go | 17 +++++++- .../3271.Hash-Divided-String/Solution_test.go | 20 ++++----- 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/leetcode/3201-3300/3271.Hash-Divided-String/README.md b/leetcode/3201-3300/3271.Hash-Divided-String/README.md index 123613c87..cb6446a1d 100755 --- a/leetcode/3201-3300/3271.Hash-Divided-String/README.md +++ b/leetcode/3201-3300/3271.Hash-Divided-String/README.md @@ -1,28 +1,45 @@ # [3271.Hash Divided String][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 a string `s` of length `n` and an integer `k`, where `n` is a **multiple** of `k`. Your task is to hash the string `s` into a new string called `result`, which has a length of `n / k`. + +First, divide `s` into `n / k` substrings, each with a length of `k`. Then, initialize `result` as an **empty** string. + +For each **substring** in order from the beginning: + +- The **hash value** of a character is the index of that character in the **English alphabet** (e.g., `'a' → 0, 'b' → 1, ..., 'z' → 25`). +- Calculate the sum of all the **hash values** of the characters in the substring. +- Find the remainder of this sum when divided by 26, which is called `hashedChar`. +- Identify the character in the English lowercase alphabet that corresponds to `hashedChar`. +- Append that character to the end of `result`. + +Return `result`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "abcd", k = 2 + +Output: "bf" -## 题意 -> ... +Explanation: -## 题解 +First substring: "ab", 0 + 1 = 1, 1 % 26 = 1, result[0] = 'b'. -### 思路1 -> ... -Hash Divided String -```go +Second substring: "cd", 2 + 3 = 5, 5 % 26 = 5, result[1] = 'f'. ``` +**Example 2:** + +``` +Input: s = "mxz", k = 3 + +Output: "i" + +Explanation: + +The only substring: "mxz", 12 + 23 + 25 = 60, 60 % 26 = 8, result[0] = 'i'. +``` ## 结语 diff --git a/leetcode/3201-3300/3271.Hash-Divided-String/Solution.go b/leetcode/3201-3300/3271.Hash-Divided-String/Solution.go index d115ccf5e..0b4625119 100644 --- a/leetcode/3201-3300/3271.Hash-Divided-String/Solution.go +++ b/leetcode/3201-3300/3271.Hash-Divided-String/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +import "bytes" + +func Solution(s string, k int) string { + buf := bytes.NewBuffer([]byte{}) + sum := 0 + for i := 0; i < len(s); i++ { + if i != 0 && i%k == 0 { + buf.WriteByte(byte(sum%26 + 'a')) + sum = int(s[i]-'a') + continue + } + sum += int(s[i] - 'a') + } + buf.WriteByte(byte(sum%26 + 'a')) + return buf.String() } diff --git a/leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go b/leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go index 14ff50eb4..d6843d174 100644 --- a/leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go +++ b/leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcd", 2, "bf"}, + {"TestCase2", "mxz", 3, "i"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6bda3ef91cdd92b56f24c32053d8be5897e7c368 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 9 Nov 2025 12:04:39 +0800 Subject: [PATCH 443/450] Add solution and test-cases for problem 2169 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 16 +++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md index 97a834432..b810169ea 100755 --- a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md +++ b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md @@ -1,28 +1,38 @@ # [2169.Count Operations to Obtain Zero][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 two **non-negative** integers `num1` and `num2`. + +In one **operation**, if `num1 >= num2`, you must subtract `num2` from `num1`, otherwise subtract `num1` from `num2`. + +- For example, if `num1 = 5` and `num2 = 4`, subtract `num2` from `num1`, thus obtaining `num1 = 1` and `num2 = 4`. However, if `num1 = 4` and `num2 = 5`, after one operation, `num1 = 4` and `num2 = 1`. + +Return the **number of operations** required to make either `num1 = 0` or `num2 = 0`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num1 = 2, num2 = 3 +Output: 3 +Explanation: +- Operation 1: num1 = 2, num2 = 3. Since num1 < num2, we subtract num1 from num2 and get num1 = 2, num2 = 3 - 2 = 1. +- Operation 2: num1 = 2, num2 = 1. Since num1 > num2, we subtract num2 from num1. +- Operation 3: num1 = 1, num2 = 1. Since num1 == num2, we subtract num2 from num1. +Now num1 = 0 and num2 = 1. Since num1 == 0, we do not need to perform any further operations. +So the total number of operations required is 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Operations to Obtain Zero -```go ``` - +Input: num1 = 10, num2 = 10 +Output: 1 +Explanation: +- Operation 1: num1 = 10, num2 = 10. Since num1 == num2, we subtract num2 from num1 and get num1 = 10 - 10 = 0. +Now num1 = 0 and num2 = 10. Since num1 == 0, we are done. +So the total number of operations required is 1. +``` ## 结语 diff --git a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go index d115ccf5e..5374791ba 100644 --- a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go +++ b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num1 int, num2 int) int { + var ret, x int + for num1 > 0 && num2 > 0 { + if num1 > num2 { + x = num1 / num2 + ret += x + num1 -= num2 * x + continue + } + x = num2 / num1 + ret += x + num2 -= num1 * x + } + return ret } diff --git a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go index 14ff50eb4..4fc36ec4d 100644 --- a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go +++ b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + num1, num2 int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 3, 3}, + {"TestCase2", 10, 10, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.num1, c.num2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.num1, c.num2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 20ab8f01b868275656e4e7ec1426e71b6e83418a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 10 Nov 2025 23:03:50 +0800 Subject: [PATCH 444/450] Add solution and test-cases for problem 3542 --- .../README.md | 51 ++++++++++++++----- .../Solution.go | 18 ++++++- .../Solution_test.go | 13 +++-- 3 files changed, 61 insertions(+), 21 deletions(-) diff --git a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md index e674601f0..32e2fcc31 100755 --- a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md +++ b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/README.md @@ -1,28 +1,55 @@ # [3542.Minimum Operations to Convert All Elements to Zero][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 `nums` of size `n`, consisting of **non-negative** integers. Your task is to apply some (possibly zero) operations on the array so that **all** elements become 0. + +In one operation, you can select a subarray `[i, j]` (where `0 <= i <= j < n`) and set all occurrences of the **minimum non-negative** integer in that subarray to 0. + +Return the **minimum** number of operations required to make all elements in the array 0. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,2] + +Output: 1 + +Explanation: + +Select the subarray [1,1] (which is [2]), where the minimum non-negative integer is 2. Setting all occurrences of 2 to 0 results in [0,0]. +Thus, the minimum number of operations required is 1. ``` -## 题意 -> ... +**Example 2:** + +``` +Input: nums = [3,1,2,1] -## 题解 +Output: 3 + +Explanation: + +Select subarray [1,3] (which is [1,2,1]), where the minimum non-negative integer is 1. Setting all occurrences of 1 to 0 results in [3,0,2,0]. +Select subarray [2,2] (which is [2]), where the minimum non-negative integer is 2. Setting all occurrences of 2 to 0 results in [3,0,0,0]. +Select subarray [0,0] (which is [3]), where the minimum non-negative integer is 3. Setting all occurrences of 3 to 0 results in [0,0,0,0]. +Thus, the minimum number of operations required is 3. +``` + +**Example 3:** -### 思路1 -> ... -Minimum Operations to Convert All Elements to Zero -```go ``` +Input: nums = [1,2,1,2,1,2] +Output: 4 + +Explanation: + +Select subarray [0,5] (which is [1,2,1,2,1,2]), where the minimum non-negative integer is 1. Setting all occurrences of 1 to 0 results in [0,2,0,2,0,2]. +Select subarray [1,1] (which is [2]), where the minimum non-negative integer is 2. Setting all occurrences of 2 to 0 results in [0,0,0,2,0,2]. +Select subarray [3,3] (which is [2]), where the minimum non-negative integer is 2. Setting all occurrences of 2 to 0 results in [0,0,0,0,0,2]. +Select subarray [5,5] (which is [2]), where the minimum non-negative integer is 2. Setting all occurrences of 2 to 0 results in [0,0,0,0,0,0]. +Thus, the minimum number of operations required is 4. +``` ## 结语 diff --git a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go index d115ccf5e..3e3b1d8de 100644 --- a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go +++ b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + s := []int{} + res := 0 + for _, a := range nums { + for len(s) > 0 && s[len(s)-1] > a { + s = s[:len(s)-1] + } + if a == 0 { + continue + } + if len(s) == 0 || s[len(s)-1] < a { + res++ + s = append(s, a) + } + } + return res } diff --git a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution_test.go b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution_test.go index 14ff50eb4..bf8264129 100644 --- a/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/Solution_test.go +++ b/leetcode/3501-3600/3542.Minimum-Operations-to-Convert-All-Elements-to-Zero/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{0, 2}, 1}, + {"TestCase2", []int{3, 1, 2, 1}, 3}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e4c408e7feecf1fe905eeb9b4694f055d8c5c1b8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 12 Nov 2025 22:30:29 +0800 Subject: [PATCH 445/450] Add solution and test-cases for problem 2654 --- .../README.md | 37 +++++++++++++++++ .../Solution.go | 40 ++++++++++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/README.md diff --git a/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/README.md b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/README.md new file mode 100644 index 000000000..572fc0897 --- /dev/null +++ b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/README.md @@ -0,0 +1,37 @@ +# [2654.Minimum Number of Operations to Make All Array Elements Equal to 1][title] + +## Description +You are given a **0-indexed** array `nums` consisiting of **positive** integers. You can do the following operation on the array **any** number of times: + +- Select an index `i` such that `0 <= i < n - 1` and replace either of `nums[i]` or `nums[i+1]` with their gcd value. + +Return the **minimum** number of operations to make all elements of `nums` equal to `1`. If it is impossible, return `-1`. + +The gcd of two integers is the greatest common divisor of the two integers. + +**Example 1:** + +``` +Input: nums = [2,6,3,4] +Output: 4 +Explanation: We can do the following operations: +- Choose index i = 2 and replace nums[2] with gcd(3,4) = 1. Now we have nums = [2,6,1,4]. +- Choose index i = 1 and replace nums[1] with gcd(6,1) = 1. Now we have nums = [2,1,1,4]. +- Choose index i = 0 and replace nums[0] with gcd(2,1) = 1. Now we have nums = [1,1,1,4]. +- Choose index i = 2 and replace nums[3] with gcd(1,4) = 1. Now we have nums = [1,1,1,1]. +``` + +**Example 2:** + +``` +Input: nums = [2,10,6,14] +Output: -1 +Explanation: It can be shown that it is impossible to make all the elements equal to 1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-all-array-elements-equal-to-1/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go index d115ccf5e..297260c8d 100755 --- a/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go +++ b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +func gcd2654(a, b int) int { + for b != 0 { + a, b = b, a%b + } + return a +} + +func Solution(nums []int) int { + l := len(nums) + ones := 0 + // 有1就是直接响四周扩散就可以 + for _, n := range nums { + if n == 1 { + ones++ + } + } + if ones > 0 { + return l - ones + } + + // 没有,就需要看否构建出1 + minLenArrayWithOne := l + 1 + // 2, 2, 3, 4, 5 + for i := 0; i < l; i++ { + gcdNum := nums[i] + for j := i + 1; j < l; j++ { + gcdNum = gcd2654(gcdNum, nums[j]) + if gcdNum == 1 { + minLenArrayWithOne = min(minLenArrayWithOne, j-i+1) + break + } + } + } + if minLenArrayWithOne == l+1 { + return -1 + } + // 构建minLenArrayWithOne里面的1,需要-1次,然后扩散到整个数组 + return minLenArrayWithOne - 1 + l - 1 } diff --git a/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution_test.go b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution_test.go index 14ff50eb4..7ebc1f339 100755 --- a/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution_test.go +++ b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/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{2, 6, 3, 4}, 4}, + {"TestCase2", []int{2, 10, 6, 14}, -1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f6405c706801d9efccb83b6e4e55bdefa248d27c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 13 Nov 2025 22:14:28 +0800 Subject: [PATCH 446/450] Add solution and test-cases for problem 3228 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 18 ++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md index 5b00aedbc..f9218b48e 100755 --- a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md +++ b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md @@ -1,28 +1,39 @@ # [3228.Maximum Number of Operations to Move Ones to the End][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 a binary string `s`. + +You can perform the following operation on the string **any** number of times: + +- Choose **any** index `i` from the string where `i + 1 < s.length` such that `s[i] == '1'` and `s[i + 1] == '0'`. +- Move the character `s[i]` to the **right** until it reaches the end of the string or another `'1'`. For example, for `s = "010010"`, if we choose `i = 1`, the resulting string will be `s = "000110"`. + +Return the **maximum** number of operations that you can perform. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "1001101" -## 题意 -> ... +Output: 4 -## 题解 +Explanation: -### 思路1 -> ... -Maximum Number of Operations to Move Ones to the End -```go +We can perform the following operations: + +Choose index i = 0. The resulting string is s = "0011101". +Choose index i = 4. The resulting string is s = "0011011". +Choose index i = 3. The resulting string is s = "0010111". +Choose index i = 2. The resulting string is s = "0001111". ``` +**Example 2:** + +``` +Input: s = "00111" + +Output: 0 +``` ## 结语 diff --git a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go index d115ccf5e..7ad53eb5b 100644 --- a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go +++ b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + countOne := 0 + ans := 0 + i := 0 + for i < len(s) { + if s[i] == '0' { + for i+1 < len(s) && s[i+1] == '0' { + i++ + } + ans += countOne + } else { + countOne++ + } + i++ + } + return ans } diff --git a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go index 14ff50eb4..7866a59d2 100644 --- a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go +++ b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "1001101", 4}, + {"TestCase2", "00111", 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From add853b46f73a31b938802bec87b3e6e999c3e88 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 14 Nov 2025 21:51:20 +0800 Subject: [PATCH 447/450] Add solution and test-cases for proble 2536 --- .../2536.Increment-Submatrices-by-One/1.png | Bin 0 -> 9593 bytes .../2536.Increment-Submatrices-by-One/2.png | Bin 0 -> 4258 bytes .../README.md | 40 ++++++++++++++++++ .../Solution.go | 15 ++++++- .../Solution_test.go | 26 +++++++----- 5 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 leetcode/2501-2600/2536.Increment-Submatrices-by-One/1.png create mode 100644 leetcode/2501-2600/2536.Increment-Submatrices-by-One/2.png create mode 100644 leetcode/2501-2600/2536.Increment-Submatrices-by-One/README.md diff --git a/leetcode/2501-2600/2536.Increment-Submatrices-by-One/1.png b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e16e639bf21c738d56db954870f433e34eb5b282 GIT binary patch literal 9593 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 H+4=tf;>oe- literal 0 HcmV?d00001 diff --git a/leetcode/2501-2600/2536.Increment-Submatrices-by-One/README.md b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/README.md new file mode 100644 index 000000000..6db7e23e9 --- /dev/null +++ b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/README.md @@ -0,0 +1,40 @@ +# [2536.Increment Submatrices by One][title] + +## Description +You are given a positive integer `n`, indicating that we initially have an `n x n` **0-indexed** integer matrix `mat` filled with zeroes. + +You are also given a 2D integer array `query`. For each `query[i] = [row1i, col1i, row2i, col2i]`, you should do the following operation: + +- Add `1` to **every element** in the submatrix with the **top left** corner `(row1i, col1i)` and the **bottom right** corner `(row2i, col2i)`. That is, add `1` to `mat[x][y]` for all `row1i <= x <= row2i` and `col1i <= y <= col2i`. + +Return the matrix `mat` after performing every query. + +**Example 1:** + +![1](./1.png) + +``` +Input: n = 3, queries = [[1,1,2,2],[0,0,1,1]] +Output: [[1,1,0],[1,2,1],[0,1,1]] +Explanation: The diagram above shows the initial matrix, the matrix after the first query, and the matrix after the second query. +- In the first query, we add 1 to every element in the submatrix with the top left corner (1, 1) and bottom right corner (2, 2). +- In the second query, we add 1 to every element in the submatrix with the top left corner (0, 0) and bottom right corner (1, 1). +``` + +**Example 2:** + +![2](./2.png) + +``` +Input: n = 2, queries = [[0,0,1,1]] +Output: [[1,1],[1,1]] +Explanation: The diagram above shows the initial matrix and the matrix after the first query. +- In the first query we add 1 to every element in the matrix. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/increment-submatrices-by-one +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution.go b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution.go index d115ccf5e..4e3fdda11 100755 --- a/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution.go +++ b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, queries [][]int) [][]int { + mat := make([][]int, n) + for i := 0; i < n; i++ { + mat[i] = make([]int, n) + } + for _, q := range queries { + for i := q[0]; i <= q[2]; i++ { + for j := q[1]; j <= q[3]; j++ { + mat[i][j]++ + } + } + } + return mat } diff --git a/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go index 14ff50eb4..63cf3703e 100755 --- a/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go +++ b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go @@ -9,31 +9,35 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs int + queries [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{ + {1, 1, 2, 2}, {0, 0, 1, 1}, + }, [][]int{ + {1, 1, 0}, {1, 2, 1}, {0, 1, 1}, + }}, + {"TestCase2", 2, [][]int{{0, 0, 1, 1}}, [][]int{{1, 1}, {1, 1}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 530c260a0b0ebb619c1bf269f6354711cdd095da Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 15 Nov 2025 12:48:59 +0800 Subject: [PATCH 448/450] Add solution and test-cases for problem 3234 --- .../README.md | 49 ++++++++++++++----- .../Solution.go | 34 ++++++++++++- .../Solution_test.go | 13 +++-- 3 files changed, 74 insertions(+), 22 deletions(-) diff --git a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md index d17dd1046..98ea9dbf7 100755 --- a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md +++ b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md @@ -1,28 +1,51 @@ # [3234.Count the Number of Substrings With Dominant Ones][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 a binary string `s`. + +Return the number of substrings with **dominant** ones. + +A string has **dominant** ones if the number of ones in the string is **greater than or equal to** the **square** of the number of zeros in the string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "00011" -## 题意 -> ... +Output: 5 -## 题解 +Explanation: -### 思路1 -> ... -Count the Number of Substrings With Dominant Ones -```go +The substrings with dominant ones are shown in the table below. + +i j s[i..j] Number of Zeros Number of Ones +3 3 1 0 1 +4 4 1 0 1 +2 3 01 1 1 +3 4 11 0 2 +2 4 011 1 2 ``` +**Example 2:** + +``` +Input: s = "101101" + +Output: 16 + +Explanation: + +The substrings with non-dominant ones are shown in the table below. + +Since there are 21 substrings total and 5 of them have non-dominant ones, it follows that there are 16 substrings with dominant ones. + +i j s[i..j] Number of Zeros Number of Ones +1 1 0 1 0 +4 4 0 1 0 +1 4 0110 2 2 +0 4 10110 2 3 +1 5 01101 2 3 +``` ## 结语 diff --git a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go index d115ccf5e..345d9e25b 100644 --- a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go +++ b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + n := len(s) + pre := make([]int, n+1) + pre[0] = -1 + for i := 0; i < n; i++ { + if i == 0 || (i > 0 && s[i-1] == '0') { + pre[i+1] = i + } else { + pre[i+1] = pre[i] + } + } + res := 0 + for i := 1; i <= n; i++ { + cnt0 := 0 + if s[i-1] == '0' { + cnt0 = 1 + } + j := i + for j > 0 && cnt0*cnt0 <= n { + cnt1 := (i - pre[j]) - cnt0 + if cnt0*cnt0 <= cnt1 { + add := j - pre[j] + if cnt1-cnt0*cnt0+1 < add { + add = cnt1 - cnt0*cnt0 + 1 + } + res += add + } + j = pre[j] + cnt0++ + } + } + return res } diff --git a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go index 14ff50eb4..1108dbd33 100644 --- a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go +++ b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "00011", 5}, + {"TestCase2", "101101", 16}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 595ba2836d52a7c5ba2c6e49710049789891d010 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 16 Nov 2025 16:38:23 +0800 Subject: [PATCH 449/450] Add solution and test-cases for problem 1292 --- .../README.md | 20 ------------- .../Solution.go | 28 +++++++++++++++++-- .../Solution_test.go | 22 +++++++-------- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/README.md b/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/README.md index 27e6c8f53..00d4f4fff 100644 --- a/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/README.md +++ b/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/README.md @@ -18,26 +18,6 @@ Input: mat = [[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2]], thre Output: 0 ``` -**Tags:** Math, String - -## 题意 -> 求2数之和 - -## 题解 - -### 思路1 -> 。。。。 - -```go - -``` - -### 思路2 -> 思路2 -```go - -``` - ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution.go b/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution.go index d115ccf5e..0332e86f0 100644 --- a/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution.go +++ b/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(mat [][]int, threshold int) int { + rows, cols := len(mat), len(mat[0]) + cache := make([][]int, rows+1) + for i := 0; i <= rows; i++ { + cache[i] = make([]int, cols+1) + } + + for i := rows - 1; i >= 0; i-- { + for j := cols - 1; j >= 0; j-- { + cache[i][j] = mat[i][j] + cache[i+1][j] + cache[i][j+1] - cache[i+1][j+1] + } + } + + var ret, ml int + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + ml = min(rows-i, cols-j) + for k := 1; k <= ml; k++ { + sum := cache[i][j] - cache[i+k][j] - cache[i][j+k] + cache[i+k][j+k] + if sum <= threshold { + ret = max(ret, k) + } + } + } + } + return ret } diff --git a/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution_test.go b/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution_test.go index 14ff50eb4..53aae164d 100644 --- a/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution_test.go +++ b/leetcode/1201-1300/1292.Maximum-Side-Length-of-a-Square-with-Sum-Less-than-or-Equal-to-Threshold/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs [][]int + threshold int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 1, 2, 3, 4, 3, 2}, {1, 1, 2, 3, 4, 3, 2}, {1, 1, 2, 3, 4, 3, 2}}, 4, 2}, + {"TestCase2", [][]int{{2, 2, 2, 2, 2}, {2, 2, 2, 2, 2}, {2, 2, 2, 2, 2}, {2, 2, 2, 2, 2}, {2, 2, 2, 2, 2}}, 1, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.threshold) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.threshold) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 28170271ee6dda163dd28cd9bd94ba8fd6bcf84b Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 19 Nov 2025 22:18:34 +0800 Subject: [PATCH 450/450] update go.mod --- go.mod | 25 ++++++++++--------------- go.sum | 49 ++++++++++++++++++++----------------------------- 2 files changed, 30 insertions(+), 44 deletions(-) diff --git a/go.mod b/go.mod index cf1e47c0d..169076993 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module awesome-golang-algorithm go 1.25 require ( - github.com/imroc/req/v3 v3.55.0 + github.com/imroc/req/v3 v3.56.0 github.com/stretchr/testify v1.11.1 ) @@ -12,21 +12,16 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/icholy/digest v1.1.0 // indirect - github.com/klauspost/compress v1.18.0 // indirect - github.com/kr/pretty v0.3.1 // indirect + github.com/klauspost/compress v1.18.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.55.0 // indirect - github.com/refraction-networking/utls v1.8.0 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/quic-go/quic-go v0.56.0 // indirect + github.com/refraction-networking/utls v1.8.1 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect - go.uber.org/mock v0.6.0 // indirect - golang.org/x/crypto v0.42.0 // indirect - golang.org/x/mod v0.28.0 // indirect - golang.org/x/net v0.44.0 // indirect - golang.org/x/sync v0.17.0 // indirect - golang.org/x/sys v0.36.0 // indirect - golang.org/x/text v0.29.0 // indirect - golang.org/x/tools v0.37.0 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + golang.org/x/crypto v0.44.0 // indirect + golang.org/x/net v0.47.0 // indirect + golang.org/x/sys v0.38.0 // indirect + golang.org/x/text v0.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 4f32c03f6..63af53587 100644 --- a/go.sum +++ b/go.sum @@ -10,27 +10,22 @@ github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4= github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y= -github.com/imroc/req/v3 v3.55.0 h1:vg2Q33TGU12wZWZyPkiPbCGGTeiOmlEOdOwHLH03//I= -github.com/imroc/req/v3 v3.55.0/go.mod h1:MOn++r2lE4+du3nuefTaPGQ6pY3/yRP2r1pFK1BUqq0= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/imroc/req/v3 v3.56.0 h1:t6YdqqerYBXhZ9+VjqsQs5wlKxdUNEvsgBhxWc1AEEo= +github.com/imroc/req/v3 v3.56.0/go.mod h1:cUZSooE8hhzFNOrAbdxuemXDQxFXLQTnu3066jr7ZGk= +github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= +github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= -github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk= -github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U= -github.com/refraction-networking/utls v1.8.0 h1:L38krhiTAyj9EeiQQa2sg+hYb4qwLCqdMcpZrRfbONE= -github.com/refraction-networking/utls v1.8.0/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= +github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= +github.com/quic-go/quic-go v0.56.0 h1:q/TW+OLismmXAehgFLczhCDTYB3bFmua4D9lsNBWxvY= +github.com/quic-go/quic-go v0.56.0/go.mod h1:9gx5KsFQtw2oZ6GZTyh+7YEvOxWCL9WZAepnHxgAo6c= +github.com/refraction-networking/utls v1.8.1 h1:yNY1kapmQU8JeM1sSw2H2asfTIwWxIkrMJI0pRUOCAo= +github.com/refraction-networking/utls v1.8.1/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= @@ -39,20 +34,16 @@ github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= -golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= -golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= -golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= -golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= -golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= -golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= -golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= -golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= -golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= -golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= +golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= +golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=

    @~(_aF%Q14oQFu^ifGh!SeT~cxJ?Lg}lI8 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

    Lwsmwujv8X%-k+4fR%=>6s zsSus}9!XWjLm|>Dm#K&;g^Rb4>EJX5s^RH0zm*{AtaB^nam#-sD;b%{)R*Zci@V=8 zE?Wy;w%@=LW%!!NHG54>AFZztCmBz@*B(bCf-nd zvoKqS{_?qFn%s<&my#lHS}KAlci>gf=I;B$G`MCO&8^q}N(yi}1KN^WDn#FAzdzAi9*Du^0pkVG^|n`A0EK8N<}lc24`OwY z!9UHrH82jMP9e|Zcrpcn5bi(zngwo!R@|{K+Yp-D?E zlZ6F+@{ds5Pqb~gsE7Y(YXI4~0NB64w4q3fZ`TqEw6q~zy7I&Dk-#N_TS9%6QYk4s z^#xu9$zSujgH>{C5Cv9z4IJ!}nV7Bs{nMy1L0K*j4mFHH&IaJFwR_1=#{wJ8PF`?d zca{YlJ;`^=)6bHYhga0U^_NOmd)eVNlvh-R{Gv_>Li8lJAt_w-t$Iq~V>-5|J1QYQ zd8Xe5VC7P`7TbWF;DZ0K&#R0VDOp0JBOIrDcj~DWS{B~xH*G>fi&0l}w*?+}H zcYE}rfHJj`0lsWVvzoJ!*?96QZe~@cEWaz_<4p`e@VY}6#SAACee%$8F!jby8eG=& zG^ga3V)h&j^&WISHI7*aU6m^;O5TE79N2&{|AyZz68O38VWbVkW`9s>;gFYH{k9iS zo#-pfClC9g!1K|j56!y2yvErZa!j_%lOL-={nx%YyB9J+^=+U;_y+KCU{)EiO1cRn zvCdxT;<*byQx0XYOZQ6vY1`?@LpY%rjT`}rt#YL)c)eM(x+WyxRZWH=o7j60<& zK}jk_bhy5;l^og=+lCB39UhkNme*fS%aXQl190L3=rS|qG*N5EedHuKk`3>!+vVsR zzacd1AEAQM9SOoSsV{Sr2DZDM)5x^!qG?sv7W^k223Ha#=w``psr{-C)(kt~r8}XA zd{9UOL*|$gkSD7$YT){tW;F)}gkliE?$E0!rUGh(Q7PxjN1e{)&TM{w%*+vZt$ig521cqz6HGLD=fh>fpcmZ!Q z%L@6(F&x5?nT$j>R=ri*_&y@@8efIHz|BTAgMoQeQxA}Rc+;F#t+^4nBb&w%{= zY&2MZz5%p|L4<#YPDM8Pm0%|5Iq4QH3w$YJ%X4nGCVa9m8X!L##>mgJ9;Rs1;Ot6B z>#&u<;X6*oU}XHWQHRo+5=FUKkP+Av&xw!y&FA9?CbS|o)FBC;!Qm-HL3u^4O~(`Wm^| z!nqDcqg%{3hRyFCJb$iz3k!8gej*?B+_cNG@6R0?9wN|QyBVSA(#@Jd4&)pU%s6b` zCi0}s4#XB3W0nBZLBTNK+mO3k;s)Y%9pq`RK#Ec&IjP-$IIe@=M`4yyr7)8?dAXMG1Xj1gP;9Oa81M;*wB4x?#-+h zzxt{5qe5l;|KI`ORY#wTQV}4GxV`ky_Tj=Tdj3AZnMC<^cPHf$&b&hUlrhN9;`6fO zghyQ0Q}AC$i)g8-r+XJRwA3)etvGoZNGY5>uk!1}h5$vgnC{nczx=Pm70pDfq0oD>A)ca(_kWzTAI17K`(W11L+GG#Q`B7)! zw%6ei)?2vEOu7)L6=>2LWW^vq*Gx?_eT!*YJu)227z>}4&ApiJ(D!@|38vW`R@67+EZIFk}H(ce0B38Z{e;^>{_{d>4Zw2`HS*5zMFN87Q zIGSz0Z-U79!I;o#)L=2ABsJ zyD13cb=oN^#f3ZA05$Usq^s>;h&t+0~GGNL-*JSL}yFEh>O?%~c?B$*TxHzrhFPZCW zD4EYL@wL=KpK^I<40s?%R;&L?2ij%$7e{pl=OX?Su+p1Z0|8OW`EVu)^-i25j21a!>`ws+vXFz*>38g z1y4QxGl5Mlm+fb-eVIGWY3V3f_VsBLKDrxal^5X#T8Qe*HZaa0VAxQfoqAmnXg{3YI7+*fPv8Y0$b5 zI^cL$If`fG5^<8nk?>cH7&P=C4r$4){ zfCI`fSom&sj9OD|N!EhNWNN(O{?C9DN@sHXwKFNq<~~Hjho2+@RzE}0qUY!|C?;I3 zslJOO%U~XVdf>yXH_nwL1fJ6J#lA&5b0fJ0)mb5R-xz8nqCFCfvS5afUbo!IjtIP= zYVI(Rlw<-zwsR81^v-I6e2c#r3p06wREGFG<2c1pSo!ZZba$VDv3kL;F$&74_r9RJ z?@e3%r##9h+D}kjpQjoZ32!R4oH%^Sy0l|s4MtBO+0BG+wI6uHcJXoil* z807)oqb~!ysklEkYhM4*l1w=(f4wJX_vgd*u4+3lE)!fqwOfc4=ZB&PH?wv+01~hR znj?TmyDqRXk)zIk$lEp@n#wz-cm!Tmbb81pF=^;iZqM2N_@u(fz$8hZFG|%yTWRBQ zo6b41v&Y}|B3q;4LA$nxMoMPqoRpWm^~3YlU&vD5S8;UlDSj^mLRpL(wJEnjx68U5 z=k-s7ew#hvd75vuN*9<7f@2641q!92J^{6I~R1+d$F;Zn!#h`iDU{9^^d z6d>HuxLsd1M8op3R3pX>Rm@r^{l-q&`~^&FM_H;YJf!E>??pz@GzE;bys%k$`yryg z3S7RCM9C^AgC=$?nT$u!_D zo1IxVQwflo@BG6eC9Qgqr8bBiq4<7%Olemwa{VP(mvU1ngGtflR z)cl@LH~$x*A1y~cGi3VYWBWQkA_k1t2QOB)wKVJ$O?|D0cTpX+=`kMv>lJl0BRT`_ zpY9hS!lT;tK7%rqUjrWE00DmF*F#;?qM2?e_(bjp(WjM_&-nA(Z>KZAgy%Ey%2^zjG%r#1{fm}z69sX^i?MJpwPwyR0_ z^WI$yn_wakd1gq%hBl^bq0Qq2#=+;zp@7AW>6X}3B|zUQ_yEnFyL^b?^kxF6okE}7HWB1Aif%qOm%lk)eIIa0t*g&9`0ll^ z@e^7ujEws%IC2*0Eww?Je(T3?Ir9%BScILQ z2kyX+L0dSe!J{gnS%yM{1Qnc|C7gruEdk){$>31dA0^y`F-{+_#%5&7S5*A*)pCVxLg?nIP%6UuIqFYH=7sV&e_W6$K z>G>jCae3Y7c6^MVj{Ps2Hlz5JQ!k4^@Lm-+r)#Z=i6!Z<;rSnOT(;TpLFjbz_s!|h zl)WqtS?5}uN%gg0H8GxSk$WFQ96 zdZ{$bOWUIOkKA_t9|ZG_L??!rY8JH2-enpY?ULPwoMROFWA~PD&2Ahq41S7fDzoKi zH7W`SP2lsq&-(0AxN=y$CHj`3o!YYNirrItSHu)!*V!7~I9Tyg{p7%>mO{^U%a5Os zOc^SE6Cd+E<;H_p_p{cm$gecw5HH7zn`Nxk%Zd&kuNC1cUt10Qg>k%m4-J9`>WSVxv^t?#V^GNuc+51R81ejrTBZ?!iF$9=eS@&jAory9}BryOr%eK0dh< z1frX{&Nwb^Apl&j1$OgUgz#(r>3D8|l2nTOxX&6Tn03S%X+;)!fCP|2L_;MWU)yv? zAT{WK0FS~L9M#+FmJ=`W;9hP8gS&_+X0;a$YOo3qZPG&E1R6OR^%S$c}q1gQwLpZV%6}< zf_Y&PVSNad=Y^4aVp;>ab|)o^&}XlwQdcWM&4%$2)GgF#G=+7IVG>1TBa_wn=aDnF z4aA9AK@1i2_^PHjZb^_g^_2ZCA|gn#Z>%_zUME;F0zM4!fF^+HN)EZE>%Vs%sK>G={stC2$J}RyJ}b=$ z|IYDQ{+&>})V*Q)$@*c z!Q7PNKrN`5y7!|sl4!h45DP%q(ft3NF9hJ3Vqy=u==YYeK)kn3jG#*`L}YGdI%(+W z$d#3qxou5Lz2>#VyK7h*A4My{QDPcF+1vqF@ty?NC!UYWOanYp&;=Vhr!j-zSji${ z2f>H*T?+j#hHTW~IA-R0vh=D`F;-BSO%fTAYR|n8g2(G)lm)G-V28?S2y4j%!9u!T zrrhzyGVb<}t98-B^FSS=qBE(p?_)`~qsTBj8zp=-lBUMPFmP$&Zed$Ps{bTp>kC!R~1Yb>c1yfPt} zMa(I6(HDT-<>}y^b94y{o@5J#1ux5ET@M(L^L?RVyy@&*nKc9ndEJaLoJNYxYc&+5eH~@+TwGYS!OnOX&Zd72FJ-I)0QqZ zFSp%^7?y0)ZPTlp;Y*TIF_E+Gj}fI9X6HF6R?ES^Wss3{rz!;IXiE^x!nbLn_R)_e zo0t4v{5U(FE1RQ6`=?vZqy1f`!K1#H)7-_OICb^TiF9l){p zqkppco3!>E@0o{Y#DXP`m-&hHY8hj2u%mLO{^`f|=a3n)o?y=A43xFXK>2@6k$BDQ zzi=2>ii!7_Ods|^#jNHWTGCvKG@>t;%UA{X+eDr35`&->F1mILamdETlKotr!MVnB zK7`+lGjk_XaI<#ePWM7FRqgXU220_=U?4~8@dQi&(WlAZ|`7!g0;CL1Kxa$IL7swQ(tH6 zlMhfhe&xNE{0%Uy{gY!MSDEn(r4q#v`L%Yy+3Gi~fgmTdIc5RdTFasNPYuD5Roc#UD2>H3<1*Oj;RI^yx3Ww%yX+6#+$TTLC@{+qK{5yeG+ z2ceE=KVG|*oq*t7hypV}MUpgHa>APdO4MJazBciJ+=jM19DzXmS;0!jZa_H_04H`{ zHnVt#Bm)UsV#)Aizx+CgbStf^2NiF)M{>C(=k7+t`-o+m>MAuXj$G+uM-vM5Ukk?9rn*z)tfSCQU{ ze0p!ut9=MZ)GOM zE|=oU7h7V=FF#=CKD!KYAR&3w$f1G#3IFGl$5jp_Z$BoSw;P`Y!O@G?z@)@P-~2ds zZRh2o3j>PtuLKk)8`n)iKJ>uwQ^O^m@TZMmRlR^c5yXmTuRdnm*6Tnip5OA?46L>_ z1+B0DQ3Zb4P`+l)u8300)9vf{c+6+3P7yi!O7Z+*`v6loC)CUKhmfcJn6;-v8{E@< z%fa;XxeILr*LJ*B$UtI)@Ocru)@0D#^3hnV`3tj8npK+L@CGBkYXaTETy=eE(zL%{ z;$0XP9u6ip2p(5dcShf;9OvBd(UV1soQzit$9odidzxz9A1U5nLQy1y z_AnCdM~`fTZWT;4xJEzV&>i^VpuSWNn7VnZVd&pRFw8-O_6E$>Pq7^-iTRM2n0ROG z`(w~!zGdD@!wfbI+qGnp?~R2W2JKG>$A__o0d*JrPuXG5m^JMM8G7yu$S;!s#7xn^Te-Jbe2Tj?#Wz#>;j)4ZUUtL6mA?*&9=`*@#k zPTn@YDM6bn%?6k1#17J&R&Vj`eEg_4%EfaSn;+WS+WNp8DZqY7o&ejoT-@i)7#t3M9g__61@ia& z(x14E`P8-Z$vqiFZ=mP?ffvO7 z4*g5)pjAOkfgxUV+DFU>(AO-l@3oGyB}+I&*mo)genTRj9Bxb$A6%^Dg-aH4lPQy? zsTItLD83{i~P=}a&QMq2o#dAXJ*QKTjACx_y73%>m%*2kV( zzfoyA`VlG5%H`v0=EZOJ)AV(vP#5?lzNY?5wT~;8d28kr;Aq z_r6s=M_&(~jO%rTrA*H^AN(A_j?_!pUC{W2A6TSb50 zRZNE}7|FD)X@y5XmOk1CygPZi#dh~fCMRgKS3*L(m`6s;G~G|B0V154gG>`e6_p&? z^JRtNHlxSVun+BTXCwvZV0fvhs)9WT!JG57`Hcw5G^67(MLAk1dtAv&0n$Z7{iN*+ zicJ!n9Ddbz57-39uh>Dg@+KRE^7p1^NK=_ul;&QUnLXd$-=k`VY4+<4r_ST>#HK#! z|GoURsyWSe2|Yh(8H$8KM!+JFuaW7?1|nX%l$a4try8Z~ATyZs{C)T2^z)^c%+?ER zsfd|-9(PGwsF4G6B_10MP-$>#qi9_cOX)^tZJmw3kYUN>93aL3Ed^_)K4J@av`^bQ z2ZDB2-XLdwKF>#Wi*LbGK+O_M9x4slc>Hz-j&>+;S(S#-@js{t2aY0-N1AJ}zBU@Z zKtGED+>u}{DE&Jrmux0s{Tru)0b>;QL%tSA8m05|^L-!*SjkN?%JRKD^v%EA^}WFN z+4PzsN_%Yl^7sjN@Q9PNJeBmjNNSWeZ<*caB&Ua!ZCgwV*)xiQYa!W(ISP`u8tVW8 zO5V@Q4DXp+Ky%;@<`|N3E*MlT;L8vK=wI*>H1Pr68pa(8%w9kg8T{_$|GX3=_CPu` zMgbrhIi`C1n9g^!ZGZk%S|0B&cpDRS3Ywal6)p?PtAqLYxRm@6^z`)0z?YguP?m$S z+Ndmx@X5|qq%ynr<=E63W{$c62-PNsrG*EN4x?pNRL+lXyq|2)qQt~UjepXkjg15W zgk)ew6;$^5@3g{!7LGrO9|~y0;Z{l-Eclhz8=12t*-_?qUlx!JW^N&-SIe^Lf!PJj z=W}yQQEubwi(4?UZrxNUH7osy4YtO_fBn6^HTeC!V9O?ypF$j*B3&|MZM*ofw&0W4 zZ6|i$Gd)k@#bgv&94rfCng)2EG2H4l8p9%E2*(JI1`4M^4U951QC+*ku#EzloE>!O zKqUVJDit4cOZBY{qxdK(kz#0p3P3qYj=+>e?oqHw7L>7~x|rWgC6pUeVse7e0_KFa z`0S~PXRrG5Q?PZ2OdLfCX%e4@ffW6i0g`s-|9tI@XR7-{z9UXDI8h=zX%rj$Hrb7U zunmU6HK)zem*LB+`)SaJ<$R&FIC*7Q&}50PYX%tRbCsu{bHXzzP)$&n0jzEiM*XT4 znmZfYx4G`7Z-p%*?}h=yu!A{-1eNne9^;@4B00MMeIlAA_G~J<80MIZb=B1EEO5W| z0ZzOI(9%D@b^3}L{1)w`nG@h{Ip=A4x#_}};{m+^++Qf;b(y3-&_#wrKvu$gqZrj= z;D7Wg4u$H6!`$9OA^+T3L{T+treBV)hTf2J8y9pJsK7%A`w^IP5wgsVYgV2bn_l$u z5L&E6jZ+ONsq42HA(a?|52Zmu*tmUh4qvojQN0)13;@Z3@*I2aQT-qj73(ZZC9Boz z_Of{3lcycgg3kR@A81 z5mNjonltUibTrvogmhmWqg#F3AH8e|0KewipMBqIIPv>f2o+Ro5TO29JqKi$S)>KH#{!;gTjmjKD8}Z|oD3ih9&0?7eiiV)gVR7`4(CY< zN$-;Q5LpooAT~^C*zK(Lk54H=31S&j3x^5R!2JabKv1jf15@jj9P78yhl5OeHJRsN zlM)*@4g*eiFdPA0v+!eln!y|#T_g_XefHg4INfy&<{$E`{J!)vl$#xa;0)vChLeg$ zKD%+!KM`wYuT6vEz&)gOVFkek7$I5(Z8P0gBleg4lV5-yziUr4|tQex=H z_1WPbrj~dg*(HZk8z@9~fRLgJR@CTSm;fCIfM5(g?C(n@rKHWL-M=IfOs+H#Kj*r# z*l_Ue8A?h5#I)zo3+JfBbY|1fbgx+}f(F6h`?Z72>T1E0{^*yoz2c|r!#_?Mr|yw~ zX>3lk)wJWJ8@nNv@aWu%f1X!RlXsSh+WCp6@Q6d&9)bF7G)23c$rA(ys5Mwb++e~s~1 z5!M#0KNKb*Y7igQ!UCafjV@~cN0*@$sl}f<6q8GlcQQrwDeWVHjMmaHRiZvoDfQ%X z^n?7mg@v&KCbd1dFBlm@K}oqnd$~;;WD*t`ISfW1nknk*lY>cEcQbbG8_#KQT}itS zNa=^#lfe>hvhrsnj|A^@$>2CVa!x#06U}KrFs&cIiaWgd8Wlj*AA+oV4V#aa#Q!}; zih`UTDCB#C6?=HV#XM@T!M)v1T>5{_6Mf+UsI>4BGOdxazvmp57XvuIFlZ6uQ|H^Gt#*HuUd+cxd1w_nSugzE|E@1<- zHH{hKfB3R_HBIEvI;mSZ{&85EIG^jH3Oru?X!^#w@@ag0d|#<)tE^BrnDhlY8>VnW zVHLlpntf(2#Lu>5)|E{paZ12&z(;=g-d_0or*mrkFuy`FyKl(UM$SH*tK0SXwu!*t zAgXvSQofc=Uxa!{z=jV}F!yVeGd)I6HDL0WazNc05k2g*ODI$_<8LLKx}_{ti{|tu z>09I5co_oVxqS8>1|cD^6+6J@Z!_8xH11mwpT~ATK@D)^3>*N9LMqrA1Ih=YB`yRR zrTbL4E_=XOruOqp(LK{ws{DQXcg-Boa5rinLZwvBU;*~jqMH^)-e8qG!NmkeYvl7gd_L4@EBi7a*cHNF(YNYF?ckg)Q5ji)#Q=_tb5 z)7i~I8_nMumK)60T!4HDyX7ER`Tnqc8ki)#vwZ+}aOy@N)Qn9mrZM_+y!I6==B}1_8s><9CNO7&2Rk+(oT1sJsgp zzyPJrXxhQU&zC;%SoaMu1%00yPkIZ)h{3Q5Hfu3o;q=9b3AO`7a=Xb3(}2$AUA2xi znGn?w%@7^W@z=iYDGYz_+Hl3|GcSk(}rBn{cb>X#{(Aspp86}bQYS-<| zgVJxv)!)ByQDeoq*WYhC!4M#s?GU4P{&a)!^XVaN)(uKtv9{?f?tbuY-N)ao^6`$) z;yTq(eo`Bv=~*wm=Cbf;}hl0I%{Rstzq zTwQTvh)GCtuapUU8}~ArfPesOWRctnXC(8I!n6NM=q0l^f9+D@LPcnzabbBcZ?WTCVu|6}6 z#>)1)!^&o2t=No)mSYg0T$}XTu5mS^{Ydk6r!&fZD03S{m-0q6a~U{$65cJ(!f0bCnF=zO;8ER0U5`IATDn0} z0SW1lPC*faE(r+%>26V^LusU2dT4m}pkDX&oO9mK^9MY~A61w=JJw!n?Qe+c2qA5! zHURD>;vxHS16Tau9+7%X2Z`wQnVIvc8LXG(zNc=Rk;siH^um}daCH?y9b(FiCgr5k zz(Phj){vbjykaUjtT_-4IM7M6Mmz$lgjXW6uw^S z=U)}<3EZv}()}Mt2j0NY zSjfg}M0&C!a0ww|dY_4`#_piay@QCo2!yp?&(9usL_Gr^#zsD5&?DFxNu?m>bS?+I zG~+A);r4e%@6GKr<7-hb^`_r?;9dUjp;D-gd4x1h3K~PCm`tYx{8X?OzjAcY%flfK ziwkOAO?@G-c1;gg!iEVBSdE$W&-H<!`7 zZ$%P?d{hOM2H@LW*GZ0V&zf)nnr8BvjRh!J)W+N3bzK^e!c{ zp3PXVI<7Mkx7Kn!etcc?WjKX-N%Rk?5;u&-#cywMGKMQ2>43FAV(Yhi^k}s^fzSNY z8IaTM;P;f^zwZOd5~@v9T5tU zy8mHQ$pCwj^o<^MJ%)zgT(wJnOY`$W#N)&^4`S3nj(5jZ+I15w=N9sterM7~$Q;E1I5#Ci%ZEF2f zh5<8Uzm4wVg~Q}_aj7D3R)p!xgyP!no!>dyoNh?EI8M7v&@R%Ki>0lImp>s2^Eq}e zY(D?l_{2ZpcAG7ZNeF%Os|8Txi6wq1OrcS=M4uJ)nKnRcJ#nB>!U|!FfRfchhGQe{ z?B%x#m*sJADtn_#{%5l&%&k9i&|LWC6MO!QFD#iri)Q*11zD7GDM2dJfzsdhg{ox= zQPKFpdtBx$xdR_W0bmpGzkdCo!Zv7`B8cG8Sh$qvb-EaxX9_{OBK{Zkz%1Qircrrd zV1NP3u*NxiJLs*6UxI+cBul%txw-k?!f|;wo-~YT5qaaSO;m9s{a+2YSn!Wew{!ze zkvS0kjm=g%IOL-?|3HqMViA6tJcWi30&h<0l^z-cf?7G^!7J-`+oS;{amOwnJ^&3J zmFC~y$eJ!Lp?zM8n)Zvm$uCa@v3wyeIUSqgHSi9c%)W(g60X`06a`FqG~Sen&1AgXtETYVarp7@6wwDvsS07( z?Zjd>yis@BY3qCyFsPS!sWn|THz=S4?{ZT}zKEj$1wM&MUj=RI*6TuI;e2V(aEHG2 zW#-B{x_)GKpSkpjG#>Uac+B?Yiv(zL7pMc*0#;+ZReDR-NDU#l;-zS43mdEvN?>TatpNO${&vbDnSGC zl`Do;TnTiri7si@go00z8+zl08a(gSOSLJx8T!=wxt%5i>|t*GsSq@~U0hC@h&#=H zCyE8=^gpk~ckJ02g@$9gc-&e32G~Jh2Sg=)(?=e?X_ctGy6+wK2w0GdivQ*cueu<( zH+VTW#%38XWC)J>$I5`o>i+nnVs$C003eID?QUHC1fKpe<08->2lNG6e8-dlz{_-o zUSv>t#kW;K0T^p=C6W#c#G=c{Gr;n`^113pG$&^SiObUeOnnB#C+U7k5PuX3*60t6 z78%I97hB~4t9saqzGKP-pxOV7Ok3p_{iT0CjZORQ#$y@vZijzJO3yA8P7L!e?o z>d3mDpFG{Pd-C)Ajc3XTd8APAVbtMs@Qwo^0qyye$>D->ue)N;PZsiC=5=4}axj|| z5})e%pqHZZv~i%uE+>D#D-N{OLU3|>ETz$m?MMTzpCrhdO6CKd9Pf~u|Lie z2OV}R^cW{04$XqcJnpG1!UYmFHF-6KAb+74NF8z}2y!3^Y&O8noG<}>qy6+=VL!69 z=CDw%kdTm8X*rg;7Z<4qp|>+y9pDhk^{v5Q{HwR^n}>40k9IoS+^bZ@?Dq!e@9bOlw0WyL#M$YiNxrOIhgonRK-lm>`jd(!8NlP`gcJ1UWx?q3%!eaBaYKz&9 zHUo_3y?8uy3{#fA7pr?^=vz3MXV%?vc2tzViwCcphiRj5lL)f{>iI+nz0Ez`X;!X5V>p!LXn~Loo~Ie- z{am2CN!G$!jFTiqH3#^pBk>jfd8bfF~C>BB ztElQu_lXaGs$uWN;9S1V*aA7D!(0F*ZDER}A@LJH<3e5)c3h9ZY}`FsD_2-R|mI(w?WvBwi7#pL&?!xRWrTr)2jT<`Y`Z<#ng&J+&Deemy_pUrnNe|!Z3(z;kFza>Y_|b0Pl|JzmNB0YUvuWuB8E#2eGjw z;4!(Z0x+=t^|7c<`s_R&rA(;~lGRxa4E3%+Rp&}QqMJ@s-xU%M$IwE4a0vaKD3=Y# z7Kyj;E!uQH$E{4&8ADY%M1qV_4qoPkfqc~j`Dg4!nSkpA;k-^pXqi5sv}J1g_ekzj zx3bZ9EvgF?Vs(y zo6>0}l)34LoUYX+cOD!b@N2Tx^4MD1G62v7qg|+LJ$4v2$I3dLIUal;^@tKEl2lDQ z&{q_{s1A_uE$Z;{D+z5h_N><9FfKcDu}|2|Xx^|=#Clz9WZ(X50XmblVXL|7B^9u^ zKEZdT!a$DM=6J0My?}@7voL-OIED01d9x>+UCISO@fsLA$3lnt-Jy`A{bQ%`YN43? zu652!!@S31pDgF9847stzf*uN_LY8lXA`1gX664XB2fNIdW}mCQa|zjyW2U*YJ; zCg$H;^q43tzj#<}Jey&>j_2i#eQ~xq+Q*}(n4k{Z zb6vY5prtjUdoiXq4saf<;^I@z(Lqmd&^hM=b(>Vr{S|^^I}hi9;o*m1jqBVt_4l9+ zT>$Ix8{*(o+CKP@($kc%p&}=#RHS^dKb z3p9X&dtn)PW9b3n)d&bL>XziF*HY$*Mxv)Pyn$+iAxph!Br)-m;eD1C} z>f&=Miwz2Z9ch^AR*itnRYlK~AMU`8Hh;`C-mTD527sned2992 z&moHOY3lNT|I>ew15o?Bc&->lk}h39ZK9j|L}O&>`Tojx&P}a=7GKAhaYkg)Fsx49 zTJy~E_{VDdN3q2I)8J0yW)e*cR@PeHhn><#k>G#*O|>?h^_c?Mxjya*c^FF?GYl&O zo$1FJtb$?KH=Z8~Jt}b>2z=pAtQDZjH46(o!pnja`wdwUkP}qNogtpSK!a0AYXmPS zsK)2u3o*y#vM&nC@h(2!&4}?-(~;MK((JF`CW^bljKsZkZ@<7M{e|@o^tu53a37rVck09BbT_q$qyw;hoB<@Rut7`ybTC$}>UkPf)4FQaJ{dzv(L8)y zpT>}n-Iz&pDQG2NHv`e4m$8DIf0?sWf=P1iM^;va4jS~ITe3hXm=O+`OSY%G#7=Jc zwBK&*3rhh!teTa11wzRhyjU6z8-541WHcmXDD{iD%yswJ+i{;iu1jRwD|+XhSUpEz z1GHQ}Q8ItH22XtSYJ`PVn(PpAt&9FXp z_^5ylgQn2aPo0e|nRt}40|EQdQqC>Fii>*fCyKbP-|}~id4<)H zgM?i+TgV7t`sRMU!g4I}Jx7co0%V@FD1*$C!qr4MDHZ7hHX2t~FBmrXTT`Eo36 zK#|*bp3lYxywfaZ=(Q;}#s!fH$_8=Zk#c4<)#BvI7KyiC>0wothMLJ8LK64ddaarj z9Xi_g6)tluH?!Y37&hfLB$Bxu!DxHaYc!7|vuTyhNb}obFlxQ0 zm=k%9-V?kv&3oAFx7-y+1vs4m?(eLAtcFa-8K_mF(44Ki{9=8BO2%@@CY;+rpNS^u z`>w8XbADi|q4^AbEeylEJs51uQW?mcVE8Bdvl|C9H??=wr=N>Axn;eL;-aMD?2>bW z@%7HOY94|1jGPMwlXWuWdl)VMWhf<=F{~$Le}+YSw-kuipR4^{YM(FlP}tO+10gh& z@GkTQis&I7lpbVq^BQ_p=e4euj|vK{j&j8AVGP7v_^97kGm?7^1knp`m}0>bcC1r*x=G=P7o}4yn9$&+~lK7Lsz9sqPwUVGRU#n z(+JMW0#Jci^oQw&Z-C+6lUhOtV?UYwlY|Q$!w@K$L8YE_^ua$zjXAARGo4!^dQ3%- zZK6D%JY+3E;E-EX=llGPiLShOCGM>_mG}&M<#A=^AE=Ma0fE?m@;<0>Y&BUnfripx zM1un0N)4XdT^`zgXukOt_+e_J;Cv+2l%3R$)lfSV*rDohOtp9_MXpMHf zcVcW%vqZCSo9aMD5k-tJ(JdGEC35(kQFnfo05u7b zx^s+5$I{(fEXth{%~OwtRyFRUoYsIE^6&h@hinHz{l0&Y+n)`czRMe_5^~eIxBoR& zWAS~!CL!m{&b;}-bPz4}W2UEtygHy_dyPIZ^0qw9YraVac*xo)rModCM-Dj{Do1#| z;$`ii9^Gi&kg@41@s|Pku^ZiiFiRtqHXS-UTgWT>ut)TQWoq@GM^TF`!S~@sWJ6hmw57xRcxO4# z4?=&}j>!u$Rw&_&cHO8j=9L2L&zh5~ys>w00T#@^)?ej`etbsC7h&ZrsPYaA2~Ei( zv`uBv`){enx9mOu)-XLv(O8wvhB9w4KB-EA>~p8m{c0LIb#TWwLZr?@w+(iU(UX0A zDsASNk}7>5iuwkDutg&k!eF2Sgg_Orw2la4r^Pcn@w=OC!c7RZc=+eMt88Z=04cIp z-7AK0KlG$-Jk28#AYG6p#BRn_x9L@KW!}el(o}=lQW1#Ez0-S(tmY=KNPtTnCgKL1 zr^A?;QEzi7D&KwcvC9^6@@xUNPcX>0YRLj_dctN}P1))yD=+boG?--@`pMhx1|Ij4clh5ClQYg4xXSLvS+ zl)O}avi9?ckxwipp;;+(T5tGtQVPlDO%|^9Ef8wgS2Z*{nU>n>%>==xLkY4*15QRu zqrtg*@C>n^fr>8rZ6F;Y1?J_ya>KrZlr8wzHoqy#sg2o3VhB5Z*PS9)DiU7S z=WMszp-!X(3B`B4RX#2njz+eaX>&t!LTnWrM5qyD%`)Al{GkLHtcj)&b*_r|mj&F1 zxnJl#j`VH6ZHXW?Zi*g-Jp6B^MB5pnPoJ8r+7A>`e0D?+jY+rpvJec!DE{2Kv)k}^ ze~XbB6_mXBP$pv#C;rOG@CF7AnbQ#=_{>aR)g*MkJ^eiJvQXh9$^U}({0xXphZ4q@ z!e8>Ii9%%f5(eAC@*30ccr&X4)w`tO&3P9I(WHPpa< z?~s0<4K!_7Nt~%5%XLl(?@+c%dlGNEgBkhp+^M`LfUjxFp5jtS?{>t%0|6C{^{SjQ&+noY6yDaWhT_rQ}+x#&Wq!RE7y1I;s88;)J|P9?L;IVfopNs7=vNh?_q8r;DvJ*{B#8; zx>JI5XpXtphMi;xi$TKrSA2w`rN`Fk``E|f^V>d`Xjuu}eK}__e!`1~3_Hpks)$j^ z6<47X7~ur_M3u($3PGmfZGa|_MJ;?AC9t>{iIzY#IS2EhZp2UXw>ZY!pPQ@daLmZY zbrq3YN_Bcnkw@az36GEMNMp_2{HAI9ODDBcrTL9=WCkB5wp@fBeahWZ=(e#X`bbLT z`_`{SA=`Ds2lhLnUsg^NMhzz3y-ROM#Qc5T0o$F`(@Vl$(80jrjtCQ4n&Iwh*17*2 zAS3i1#95mxTL?1kfUVo{NBiXkfnkb3ok-gEb_c@6Ov$844z%1R7DBU9|66_qLea)c zC}WL4jLac}acqn9dKxcg6Q^&pn4@Jsu(By$k{6nTY2%j!UX!vJ(Z#SP zHb+NgC(tekj-~uK^n8J-w%+Y|7~r;hTpaPlKWBt1-K)^q`!jH)NR>~GvAd2~wC$ry zI_(2Nu6iczzz{~F)VB9K>GGbRHbh@J_M^T zU0X{C&5W6S`kw?Pek#ke`*s6deXwUWZB4`lb1Y#?02=f=!~)k``jzc|X4cw3w_-)d zic81GeHP;vO&q29u_Nbd0E7#8`TvP7tw8OVjxON+G3Z#8%6IupqIG`=?6;Q)4z6~d zKhX|^v9qvbyX4cm>Qe{Cw(1~>|I)Mb+fR?g;!K!Yl3x;psp*qGE!T}t?4k6^0R-$F z@z}xd9ayeh43U{(_cPwPOA4F`KT`9DUn_;GZDDkIa$Wzu#gQ^mTXeJ^R|@<+R^}Qm zp-}7X7fUM$YJ9^3~A6<3gxX`4ZKw+qRKSz$*BOEfSz%D zCY6gVo!bsKy4ET`TVORaf=-{voN$N&ZVzhR1cgR5+YLtQALrNbJiVcKe!il3Cv8@g zM{^j77i*~cr=NvHcBf61DEUL|7#R&{FoCh?-$A~CPT5q;GuQlRpO%a_^)3e1UAVNL ze`es)_6C~+;xd3;Y5Y47B8B;$rq@raeO7|a;Yt@)esN%%cLM?y?Oj+(E8uQYv0-Br z#b0Gkzknc(VmDEgO*I75(u*3%1}1+j_g71DWVLV?kx4)K`Hjl9pWVRbtj@r8InG19 zH}sPLQ#BG=`zL#|qHA3<(Hc`OJ#n{j5#XdIT7+Mi>Ylf?k%rEZSWE5I^CFkPyX^}&dmon>hInf zb-VqYMVDoSQI~?f@Ei03|3_9G2C3&^OWY@GCe`00C)xmR5manWS6Z&fSGgB5huuRD@m*8^dgPZ)*$&y+osNJU=(^eV&*2rVqbrtjY)Dd3xBN_K)YKCQ`!Grvb@ zdmQq#$cNz60DcWQcF;`k_b);9ttuSeC5MnBuD$6_k^#v4%(HjW1BN+84Z*c6lZ|XK z8W!A9S};-k0;u5cy_xQQF1xzi@v5WT;UYvkMbb>@L`w1$+GFw%aIa_o`w?0%fDM1B zcM5UK*~s0Iw=P#|m7EYzU|P1u;ZnO8VW{2PjzQ!~%UFYayOruK;p%RpR=lJi2S9O_ zV}&WSV(w=}Ry;~Iro3rn%nJ%KqUSewmyX=(h8^HThfwAta5`E162F+myUKgCXPq*i@ik{R5IvV zH_Z;o>tbC8)@w!2nxiE2IS40ZZQ^4*JN3~E)o7vRaX-|<+Sp7 zD#`o+Dsg>gwaKMAOx5gi23T0xI1MXBc8e1YUpzqSYoKgb?KyX>(RE4oSYN|#I$5yj zqTgds5;nY z7v{@4y709?l;w?mPy1Co&L{q44EV=EppcS7?ozRk zO2ctZ?aTUalBJi>#tH!kqK>!B13{e^QBX(V#uDjy0L5&USxGp@48_FL4fw3IU$kHT z3@x3cqr)=(t$NYs&HFGcKBf8kS605++eaV8lwzA0;vO?iDAZbBH30i*x1XUx*-9ce zqmJ6TW&)n;NuP~8;Qxex|Mw-+uM1A6*cgx=TZt!fky}kYWP@valne%)8;|jOqC`nA z%6v~3>#L8wRW`F+MCiqI%yRH3I+iFqOZ698V;bK(q2MiAiD#H-qo>Q~*QB^FgSn6E zF8jzt>R`lk#V6QP_wTJgIVg7Bk={v1VefadK)^R{$|_PT&5sj>*xU}{L5}*R&yNQJ zieoxg;DlSZ)IJs#pUk$P(W?EFLf0;BI3H0uOVGKfK7H}u?>&1K5U`Dg_|{V>i5d zOdhv|^g^}bTMWT-Et@sg)yAnoz8Rk2`zV~d!4Zb$k%WlRGKMo1?U&mxp zF~wx`>tL7a6fy#UG0W+&&c*iBoMspdGMsMyh&@k$7MD5c})$H-54(_@Z-J2zkiWmXC|v>bg!+yY?fGF>-KZ3a3|; ztv856uL89}^BRx#nVPxbJ1y>Dx-Rj7Ldb>XqQOZ%9qs*}DCo2gOi3nY%Km@$Qgujr z!rTe3I^xGmmf&Z)9u6TeVw)S8#iYiL^&fp$ATKtuT#0GqOHqfv`$>mO`>M`Xlv%gy zIm5`kuvq8%H|wf8+yi?{j$*crW<_Ow=x%LklKCI?9t`%~xr&!qQobY5Oqw|w_PWtM zYvzl6Uw^BeYZ4A=HU9kT$(V!cpWZD!uu zVLOmSGM>E8fz(~Q5y@?TQ{ZOqt@)d2WtcAWB9StH!N41mP65Z>>$S54axlap zHa8fwapo)g1LCt>Mdqnr3qA-w+dfg7B?d+(vm+MrA0F>8z_E+EaA?;m(`+}5KobxOku&n(v+>(9M4_a)yj02nMlE-3@pkpNDcO(IvY z*}AVG;LAH0BueK(i8XdRl-Rx$X5}v}&`M`8Iw5BOR~lB}tD9Z$v04r!oGk1gLP1Bl zA0RBih3%7+omvv%%V;|dUW@F!l0AImbr0&+4)aaCpBy4nmkGAxil7{WT|gsZV^Nnxw(o^G zt*ozDT-5xP)(|Mnji;o{w+#&63a-pe6l)A8aSsJJ6c2Sx7Y}xuIrfKRISxHrHOgDA zcmL4YMQhGaHs@$GX%%UA;U_(^&#VTZrLJyro?HkAkf>#!ENx*1ay{y1QCdH+WuL|T zwsz_Htt;)u1+syj-J-%6?~>41)z5+ZRyl@X(MNkq;b~hW3=Ngg--voC$0&QZ^=_%N z4JisZ0##U25O;`2xCG<`yrU5RI6J4CNsy-^HMC=8bRfOdo)OhP%h?xI#7Q){K6{fE ze}g-{yWOsK{H!4i`xi22@wwt3BD=A7ftZ{Z8&xp`rF3zSE798u3s3UafG%e+%*Vdt zly(j#uX%^uyklGKJC+iQYR<-*AsoN0=CE4__`9rZMD$^&QApI`sGr&_@9vblJrEop zU5+i!ohWe4`xfPTazG}w(M{EqTjuZc65)SFS+sRXDtCWFF1Lz1Yw*Y=lZsU~x`{?n z=DB7FeV172xO?#&?^IWJ`g#xQM?|w?0y-foxI+%okvvOM!`NgC$lDC5}9@D8z3Hr~%F?vFIy2>F>V!FlICD?tejyAea&m{EsY4MUKLvrx_Uuh#Q88_Dt zCFBrZv6*#Gv!k}^@0J=(rw4y@q-aG8)zENd3<>`Le1yX(3vJ9SailTl`tz}rg`NNm z@3{=qe3?yGPX+y{#4))u(#N(SVm-XM294fmnI@fY+Z(Yip8A`@D5zbBOC< zuO$mJKaNbeSRtC390V1`GC&(uS}+>!|h*f9ONXGQTg;KlS(|k`D1CbCM{#j`E=nUjRB!NeQ z2mW+hogDk7uqux&-PyK=pN%CVk*DQ$E9L^X-3JbjRi1 zdJ735w76;L5=1@%oBWPENsV2CHJ48Mw-NP6D%+msPsyZ>XC{`J2CPGXY!X0P|9!Uy zO^RAYh*yw?#_iMy?gl1pJov+sxDe#AEw_`lu&n(vc^EC(RA}VE@2V2y-aD|$*~S~q zdeUr-t@X8aU*i8~Qr*gHtpy5G&9k9tSlU|f^c}rfzBcQy!=cnsdv1Iwa`RZq_9!m= z(zpFosMJ^;Q#6 z=xgNye>(QGlhdJ@Dz5D_0?%4-=z%QH5yE&;v{dr-E^ofCNc~jA-+c)ngJLe5)Jy_pdc^F>^nM3|+hFX)RF*B^KS8PdpNJ@n@P3;g zZ@1#HI#@Q-zD(stAl4k_QlB_hcU~BTMxAyv^of)|`<^nvA@ORs)wNc`!2Wow!t&yC z##+5tZSp&XjvfY%M?H2*2|OurpJQ^~&zh(YzL1I^zQj>lJ78r#SW!`=t7lKlIC`{_ znZWP*BAcWq$wK!mkHFQf|61&$l0XVg&PxuCY`tpz^CX&a`K_wSp=DndEF)c~rs^$4 zqW0w%RTg!~bsE+>y`ZUvl>YH^kY1-^8jpE$iePs^9G{>h0TJwDF zNxX^iDh9IThoUL?kb*0kIrlTLh;Hb{IPv`P z5IS|d+-w?fZ#p#sV74T{M06YXpp@`rI-s6Pnx?rRXb{-9KRI6R8{|Hbly9Ow5jDHy znLFHH=i$ckb{l7JO-(wd6qmew{%o_xvlyq0a&IIx={Rx6&yVjI%DLq<95p9?Y2NHI zCy`3G{i*uqB-JmcFYVkN=lZ^+7l|}ZHi-8TJ&H35iQ-SL^=zI~^mtaW_js-=C+?lO z++G%J%6#2-u02{gbEz`=QnKD=wC2afodJ~bnk7kp#Nv!W%(2ByV^78Ux7WEFOzS%< zn!I~GW~#%4xtm6vRnuH^YfOBmotvs1qx#zDTx6){#NPgKv6>dJoV!mc>MVkHY>th0 z_L%ozMI^Phi9bfd<0&JWO<-J4JxKB)Q7D&b`oP~yPNm91)G%vtz@?z?81PSv=T zxXHLegYoo3pd)nP_q1%sZ)f`8)Z@~R`y{7@9}G1nI9V4w8oWRi{mI!?VW8pt}lFGlv7D(ksL zIjNmiQf4l+N1wg*<9>YdsFOO!-N}#V;s*uz>xGM~op){avsRyu4Gx4t!iB4$kHopzAy1geUv2tx(1Sd`CI@ zCH$OTF21We@Hk)BzKkhZ@}D{L^Qz|`@@VqdI`OUFZN>cDaDJkLI2Qo(%MZ>)(`j9k z#W@WikUP4yXINJ{Oer;v|1j}arV?~0r*^5$AoT{CQ2z>Y7yGK0@r{?~TLu8jn7kyj z?)K5qvcRo4+tOR7!nRDXHy3@Pv67mP>VkG}=F!2{H{P2a88k_PLm3C_c%l_vBq>G} znaUGlX4IT?BBRdTkC&P>tEQ5Yo%$TYWkAdOw>%byVWs7~%6PqBahSc~({}0C`NWZU_d71A3_4qt^mbYCcr#>Dl22<;!-)~PQCiwXrQ{A`XvO)G%oO!Frl=> zMpQNb5F05#_f!k{9KQWE8<^IeFBb!L@gz|Ra2`{alM6wZh+Qf6v}XV&iq{dq8kn5@ zBcBodByou0L&K9<)XmA7SNJp{vckf``zr&C_QOa!4loumT1mhA0Kbf+nT~(5j5_N1 z+2oW0+La3cz0lTm6od&~IXPH&{n?C?UtIj-?h)WNa{&x))r=qewEu$#@n6!msT5RI zt(R5*lJ#E@s5tB2{~1NbopU(jpJwd6$?rA)TrkgZrcs()!gE*F`^rTn3g8%?jn)A) zGamV^XSHsdO56?maYsEqI~`D~(7%!6lexa;qDBQ|#O zQrS2;vs;2Nqc{Z&|Fsn&hs;feBroPABgIv$eofXe;w#YbS=~?a2CCZe$kh;XS;Fl} zlT1rYOce8@0<4aGy%?SSV6%nW6gb56CmjR$SrA zns27nxo<^YcD!%0=)~Vq3(;f%7$6BlqFcAar8*!=?|1H$rl$j`2*oD{aGDs9em}G5 zjLGIQstxBulaD5cR}Q83q0(krG4XKoYi|H>*D+*p z*!U1aE;~2T;O#!}^v7C20+>SwX{g^sD)m<;WA>Q4Mkd~whV-IKZ%wJzqG;L zTlT+Lp5svVZ4$a5>v`q39Yhzdq0R-i!fz3E?o zyXovx*!hxRQ-F7jl-Px))*3r2c zqnRM+n0n-h|9{K{LCKSAY^ZN)t}~3&NnW1qm78}&3g`$UgD}|N&8Kp&qIFDsUju!b zuJKr~)R_8TL-z`X7@GC{j+K?NejR znh8)z}D< zxxakS_#;~hns}{>Dp9#rAkd{BPJ63TbIcT*NDdsZF)(EId{RR~upj)yk@Q#-b(j?L zT1v290qJPUDBX&Eu4>wM<4t6T3t(d0P7(GyO`wAlbQQvMX(XK&APu`+?3qEo^3=0z znxCPV`~RG63me%XFq8emfXWrN_w*FzG-)(+Z3!foy|*0$ya|w3ADLeX=0hYSq(#vn z^k&=DCaZVv#nM$&jL>E6w1ZG~0EGZsMjsH4$aN1Bqap9!xhr99r2ZE2J^1gW7UJ4Qzl z2KEBS@IQbG05<^_HnI)&XMz9};rC?%D7_-rfeZ0JTq=;OA|FBiFgZbg8u?S`5`cQW zf(z_+{~QNJ5nml-=+6yZ3UAQ%pFGWNo14zjg z)br*bFi>4N@kR&D3O<_&1U|r^-2VX*_cz=oD$LBxz-1ZuG5eG;;*0<3=L`*X4B-@j zs?pY#b#ZY~?_bq_uY046uI%pfWl#D(YX=jW-%az+qoQs@^6+d=!-r(o@s>PsMV$1O!Zx3?vZG tfO+r##vj%Hjo|-##r$6{X^ij-$-aYy=*UtE>ucbTqMVBCM`_c*{}1$PnC$=n literal 0 HcmV?d00001 diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md index 20e4df9bd..8071c7c1d 100755 --- a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md +++ b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md @@ -1,28 +1,35 @@ # [1828.Queries on Number of Points Inside a Circle][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 `points` where `points[i] = [xi, yi]` is the coordinates of the `ith` point on a 2D plane. Multiple points can have the **same** coordinates. + +You are also given an array `queries` where `queries[j] = [xj, yj, rj]` describes a circle centered at `(xj, yj)` with a radius of `rj`. + +For each query `queries[j]`, compute the number of points **inside** the `jth` circle. Points **on the border** of the circle are considered **inside**. + +Return an array `answer`, where `answer[j]` is the answer to the `jth` query. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[1,3],[3,3],[5,3],[2,2]], queries = [[2,3,1],[4,3,1],[1,1,2]] +Output: [3,2,2] +Explanation: The points and circles are shown above. +queries[0] is the green circle, queries[1] is the red circle, and queries[2] is the blue circle. ``` -## 题意 -> ... +**EXample 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Queries on Number of Points Inside a Circle -```go ``` - +Input: points = [[1,1],[2,2],[3,3],[4,4],[5,5]], queries = [[1,2,2],[2,2,2],[4,3,2],[4,3,3]] +Output: [2,3,2,4] +Explanation: The points and circles are shown above. +queries[0] is green, queries[1] is red, queries[2] is blue, and queries[3] is purple. +``` ## 结语 diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go index d115ccf5e..7afe86047 100644 --- a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go +++ b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(points [][]int, queries [][]int) []int { + ans := make([]int, len(queries)) + for idx, q := range queries { + distance := q[2] * q[2] + for _, p := range points { + a := q[0] - p[0] + b := q[1] - p[1] + if a*a+b*b <= distance { + ans[idx]++ + } + } + } + return ans } diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go index 14ff50eb4..956637562 100644 --- a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go +++ b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + points, queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 3}, {3, 3}, {5, 3}, {2, 2}}, [][]int{{2, 3, 1}, {4, 3, 1}, {1, 1, 2}}, []int{3, 2, 2}}, + {"TestCase2", [][]int{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}}, [][]int{{1, 2, 2}, {2, 2, 2}, {4, 3, 2}, {4, 3, 3}}, []int{2, 3, 2, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.points, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.points, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7ba49f497e12291ba8a23735242312fd45ae0adb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 4 Mar 2025 09:22:58 +0800 Subject: [PATCH 217/450] Add solution and test-cases for problem 1362 --- .../1301-1400/1362.Closest-Divisors/README.md | 29 +++++++++-------- .../1362.Closest-Divisors/Solution.go | 32 +++++++++++++++++-- .../1362.Closest-Divisors/Solution_test.go | 14 ++++---- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1362.Closest-Divisors/README.md b/leetcode/1301-1400/1362.Closest-Divisors/README.md index 202a9dc57..9d78299e4 100644 --- a/leetcode/1301-1400/1362.Closest-Divisors/README.md +++ b/leetcode/1301-1400/1362.Closest-Divisors/README.md @@ -1,28 +1,31 @@ # [1362.Closest Divisors][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 +Given an integer `num`, find the closest two integers in absolute difference whose product equals `num + 1` or `num + 2`. + +Return the two integers in any order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 8 +Output: [3,3] +Explanation: For num + 1 = 9, the closest divisors are 3 & 3, for num + 2 = 10, the closest divisors are 2 & 5, hence 3 & 3 is chosen. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Closest Divisors -```go +``` +Input: num = 123 +Output: [5,25] ``` +**Example 3:** + +``` +Input: num = 999 +Output: [40,25] +``` ## 结语 diff --git a/leetcode/1301-1400/1362.Closest-Divisors/Solution.go b/leetcode/1301-1400/1362.Closest-Divisors/Solution.go index d115ccf5e..e319fd782 100644 --- a/leetcode/1301-1400/1362.Closest-Divisors/Solution.go +++ b/leetcode/1301-1400/1362.Closest-Divisors/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func factor(n int) (int, int) { + sn := int(math.Sqrt(float64(n))) + a, b := 1, n + for i := sn; i >= 1; i-- { + if n%i != 0 { + continue + } + a, b = i, n/i + break + } + return a, b +} + +func Solution(num int) []int { + a1, b1 := factor(num + 1) + a2, b2 := factor(num + 2) + diff1 := b1 - a1 + if diff1 < 0 { + diff1 = -diff1 + } + diff2 := b2 - a2 + if diff2 < 0 { + diff2 = -diff2 + } + if diff1 < diff2 { + return []int{a1, b1} + } + return []int{a2, b2} } diff --git a/leetcode/1301-1400/1362.Closest-Divisors/Solution_test.go b/leetcode/1301-1400/1362.Closest-Divisors/Solution_test.go index 14ff50eb4..bb7736beb 100644 --- a/leetcode/1301-1400/1362.Closest-Divisors/Solution_test.go +++ b/leetcode/1301-1400/1362.Closest-Divisors/Solution_test.go @@ -10,12 +10,12 @@ 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", 8, []int{3, 3}}, + {"TestCase2", 123, []int{5, 25}}, + {"TestCase3", 999, []int{25, 40}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3e17671d6f54ee10f0e351df6c8e54e5eee782c9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 5 Mar 2025 09:17:48 +0800 Subject: [PATCH 218/450] Add solution and test-cases for problem 2579 --- .../1.png | Bin 0 -> 15650 bytes .../README.md | 37 ++++++++++++++++++ .../Solution.go | 11 +++++- .../Solution_test.go | 15 +++---- 4 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/1.png create mode 100644 leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/README.md diff --git a/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/1.png b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/1.png new file mode 100644 index 0000000000000000000000000000000000000000..cdcc3dbd8cb13f66eac21c60175769167d2a335c GIT binary patch literal 15650 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 literal 0 HcmV?d00001 diff --git a/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/README.md b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/README.md new file mode 100644 index 000000000..6b109edb3 --- /dev/null +++ b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/README.md @@ -0,0 +1,37 @@ +# [2579.Count Total Number of Colored Cells][title] + +## Description +There exists an infinitely large two-dimensional grid of uncolored unit cells. You are given a positive integer `n`, indicating that you must do the following routine for `n` minutes: + +- At the first minute, color **any** arbitrary unit cell blue. +- Every minute thereafter, color blue **every** uncolored cell that touches a blue cell. + +Below is a pictorial representation of the state of the grid after minutes 1, 2, and 3. + + +![1](./1.png) + +Return the number of colored cells at the end of n minutes. + +**Example 1:** + +``` +Input: n = 1 +Output: 1 +Explanation: After 1 minute, there is only 1 blue cell, so we return 1. +``` + +**Example 2:** + +``` +Input: n = 2 +Output: 5 +Explanation: After 2 minutes, there are 4 colored cells on the boundary and 1 in the center, so we return 5. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/grid-illumination/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go index d115ccf5e..077bb8a17 100755 --- a/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go +++ b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int64 { + ans := int64(1) + var add int64 + for i := 2; i <= n; i++ { + add = int64(i-1) * 4 + ans += add + } + + return ans } diff --git a/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go index 14ff50eb4..e561b7e20 100755 --- a/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go +++ b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 1}, + {"TestCase2", 2, 5}, + {"TestCase3", 3, 13}, + {"TestCase4", 4, 25}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5f426afa7f4aa850126df18c0b231dc715f4ff68 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 6 Mar 2025 09:16:45 +0800 Subject: [PATCH 219/450] Add solution and test-cases for problem 2965 --- .../README.md | 25 ++++++++----------- .../Solution.go | 20 +++++++++++++-- .../Solution_test.go | 13 +++++----- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/README.md b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/README.md index ef1e2e001..0b1e75170 100755 --- a/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/README.md +++ b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/README.md @@ -1,28 +1,25 @@ # [2965.Find Missing and Repeated Values][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 a **0-indexed** 2D integer matrix `grid` of size `n * n` with values in the range `[1, n^2]`. Each integer appears **exactly once** except `a` which appears **twice** and `b` which is **missing**. The task is to find the repeating and missing numbers `a` and `b`. + +Return a **0-indexed** integer array `ans` of size `2` where `ans[0]` equals to `a` and `ans[1]` equals to `b`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,3],[2,2]] +Output: [2,4] +Explanation: Number 2 is repeated and number 4 is missing so the answer is [2,4]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Missing and Repeated Values -```go ``` - +Input: grid = [[9,1,7],[8,9,2],[3,4,6]] +Output: [9,5] +Explanation: Number 9 is repeated and number 5 is missing so the answer is [9,5]. +``` ## 结语 diff --git a/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution.go b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution.go index d115ccf5e..29d0da8a5 100644 --- a/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution.go +++ b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) []int { + m := len(grid) + base, sum := m*m, 0 + n := make([]int, base) + target := base * (base + 1) / 2 + repeate := 1 + for i := 0; i < m; i++ { + for j := 0; j < m; j++ { + n[grid[i][j]-1]++ + if n[grid[i][j]-1] == 2 { + repeate = grid[i][j] + } + sum += grid[i][j] + } + } + diff := sum - target + ans := []int{repeate, repeate - diff} + return ans } diff --git a/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution_test.go b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution_test.go index 14ff50eb4..d32d63cb4 100644 --- a/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution_test.go +++ b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/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, 3}, {2, 2}}, []int{2, 4}}, + {"TestCase2", [][]int{{9, 1, 7}, {8, 9, 2}, {3, 4, 6}}, []int{9, 5}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1ba7a3de114f0c1e96079703c995e63ea105a46c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 7 Mar 2025 09:29:32 +0800 Subject: [PATCH 220/450] Add solution and test-cases for problem 2523 --- .../README.md | 35 +++++++++++++++ .../Solution.go | 45 ++++++++++++++++++- .../Solution_test.go | 22 ++++----- 3 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/README.md diff --git a/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/README.md b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/README.md new file mode 100644 index 000000000..c81d17eea --- /dev/null +++ b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/README.md @@ -0,0 +1,35 @@ +# [2523.Closest Prime Numbers in Range][title] + +## Description +Given two positive integers `left` and `right`, find the two integers `num1` and `num2` such that: + +- `left <= num1 < num2 <= right`. +- Both `num1` and `num2` are prime numbers. +- `num2 - num1` is the **minimum** amongst all other pairs satisfying the above conditions. + +Return the positive integer array `ans = [num1, num2]`. If there are multiple pairs satisfying these conditions, return the one with the **smallest** `num1` value. If no such numbers exist, return `[-1, -1]`. + +**Example 1:** + +``` +Input: left = 10, right = 19 +Output: [11,13] +Explanation: The prime numbers between 10 and 19 are 11, 13, 17, and 19. +The closest gap between any pair is 2, which can be achieved by [11,13] or [17,19]. +Since 11 is smaller than 17, we return the first pair. +``` + +**Example 2:** + +``` +Input: left = 4, right = 6 +Output: [-1,-1] +Explanation: There exists only one prime number in the given range, so the conditions cannot be satisfied. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/closest-prime-numbers-in-range +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go index d115ccf5e..f26cc825f 100755 --- a/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go +++ b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func calPrime(max int) []int { + isPrime := make([]bool, max+1) + + for i := 2; i <= max; i++ { + isPrime[i] = true + } + + for i := 2; i*i <= max; i++ { + if isPrime[i] { + for j := i * i; j <= max; j += i { + isPrime[j] = false + } + } + } + + var primes []int + for i := 2; i <= max; i++ { + if isPrime[i] { + primes = append(primes, i) + } + } + + return primes +} + +func Solution(left int, right int) []int { + res := []int{-1, -1} + primes := calPrime(right) + start := sort.Search(len(primes), func(i int) bool { + return primes[i] >= left + }) + l := primes[start:] + m := -1 + for i := 1; i < len(l); i++ { + if m == -1 || l[i]-l[i-1] < m { + m = l[i] - l[i-1] + res[0] = l[i-1] + res[1] = l[i] + } + } + return res } diff --git a/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go index 14ff50eb4..35e0e16bf 100755 --- a/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go +++ b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + left, right int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 10, 19, []int{11, 13}}, + {"TestCase2", 4, 6, []int{-1, -1}}, + {"TestCase3", 1, 1000000, []int{2, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.left, c.right) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.left, c.right) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3d765d6a5befc320bff423660e8014d5b4f78bb5 Mon Sep 17 00:00:00 2001 From: Boris Date: Fri, 7 Mar 2025 20:48:26 +0800 Subject: [PATCH 221/450] update go.mod --- go.mod | 22 +++++++++++----------- go.sum | 44 ++++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/go.mod b/go.mod index c445df844..a4ad5f9c2 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module awesome-golang-algorithm go 1.24.0 require ( - github.com/imroc/req/v3 v3.49.1 + github.com/imroc/req/v3 v3.50.0 github.com/stretchr/testify v1.10.0 ) @@ -12,23 +12,23 @@ require ( github.com/cloudflare/circl v1.6.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20250208200701-d0013a598941 // indirect + github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/klauspost/compress v1.18.0 // indirect - github.com/onsi/ginkgo/v2 v2.22.2 // indirect + github.com/onsi/ginkgo/v2 v2.23.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect github.com/quic-go/quic-go v0.50.0 // indirect github.com/refraction-networking/utls v1.6.7 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.33.0 // indirect - golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect - golang.org/x/mod v0.23.0 // indirect - golang.org/x/net v0.35.0 // indirect - golang.org/x/sync v0.11.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/text v0.22.0 // indirect - golang.org/x/tools v0.30.0 // indirect + golang.org/x/crypto v0.36.0 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect + golang.org/x/mod v0.24.0 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + golang.org/x/tools v0.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 9479b6bab..da2244b04 100644 --- a/go.sum +++ b/go.sum @@ -10,19 +10,19 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20250208200701-d0013a598941 h1:43XjGa6toxLpeksjcxs1jIoIyr+vUfOqY2c6HB4bpoc= -github.com/google/pprof v0.0.0-20250208200701-d0013a598941/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7 h1:+J3r2e8+RsmN3vKfo75g0YSY61ms37qzPglu4p0sGro= +github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/imroc/req/v3 v3.49.1 h1:Nvwo02riiPEzh74ozFHeEJrtjakFxnoWNR3YZYuQm9U= -github.com/imroc/req/v3 v3.49.1/go.mod h1:tsOk8K7zI6cU4xu/VWCZVtq9Djw9IWm4MslKzme5woU= +github.com/imroc/req/v3 v3.50.0 h1:n3BVnZiTRpvkN5T1IB79LC/THhFU9iXksNRMH4ZNVaY= +github.com/imroc/req/v3 v3.50.0/go.mod h1:tsOk8K7zI6cU4xu/VWCZVtq9Djw9IWm4MslKzme5woU= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= -github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/ginkgo/v2 v2.23.0 h1:FA1xjp8ieYDzlgS5ABTpdUDB7wtngggONc8a7ku2NqQ= +github.com/onsi/ginkgo/v2 v2.23.0/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -39,24 +39,24 @@ github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= -golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= -golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa h1:t2QcU6V556bFjYgu4L6C+6VrCPyJZ+eyRsABUPs1mz4= -golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk= -golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= -golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= -golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= From ab240d30fbc8cc9ad2c4d69f3101a3e69f764a78 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 8 Mar 2025 20:03:57 +0800 Subject: [PATCH 222/450] Add solution and test-cases for problem 2379 --- .../README.md | 35 +++++++++++-------- .../Solution.go | 29 +++++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 58 insertions(+), 26 deletions(-) diff --git a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md index 9c3ca6447..605dfe8f5 100755 --- a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md +++ b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md @@ -1,28 +1,35 @@ # [2379.Minimum Recolors to Get K Consecutive Black Blocks][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 a **0-indexed** string `blocks` of length `n`, where `blocks[i]` is either `'W'` or `'B'`, representing the color of the `ith` block. The characters `'W'` and `'B'` denote the colors white and black, respectively. + +You are also given an integer `k`, which is the desired number of **consecutive** black blocks. + +In one operation, you can **recolor** a white block such that it becomes a black block. + +Return the **minimum** number of operations needed such that there is at least **one** occurrence of `k` consecutive black blocks. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: blocks = "WBBWWBBWBW", k = 7 +Output: 3 +Explanation: +One way to achieve 7 consecutive black blocks is to recolor the 0th, 3rd, and 4th blocks +so that blocks = "BBBBBBBWBW". +It can be shown that there is no way to achieve 7 consecutive black blocks in less than 3 operations. +Therefore, we return 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Recolors to Get K Consecutive Black Blocks -```go ``` - +Input: blocks = "WBWBBBW", k = 2 +Output: 0 +Explanation: +No changes need to be made, since 2 consecutive black blocks already exist. +Therefore, we return 0. +``` ## 结语 diff --git a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go index d115ccf5e..9bd566b39 100644 --- a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go +++ b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(blocks string, k int) int { + w, b := 0, 0 + for i := 0; i < k; i++ { + if blocks[i] == 'W' { + w++ + continue + } + b++ + } + ans := w + start, end := 0, k + for ; end < len(blocks); end++ { + if blocks[end] == 'W' { + w++ + } else { + b++ + } + if blocks[start] == 'W' { + w-- + } else { + b-- + } + ans = min(ans, w) + start++ + } + return ans + } diff --git a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go index 14ff50eb4..5469036f9 100644 --- a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go +++ b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + blocks string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "WBBWWBBWBW", 7, 3}, + {"TestCase2", "WBWBBBW", 2, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.blocks, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.blocks, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9bae5d73377af1716fef23c32554d658d42a48a5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 9 Mar 2025 16:17:18 +0800 Subject: [PATCH 223/450] Add solution and test-cases for problem 3208 --- .../3208.Alternating-Groups-II/1.png | Bin 0 -> 12721 bytes .../3208.Alternating-Groups-II/2.png | Bin 0 -> 13504 bytes .../3208.Alternating-Groups-II/3.png | Bin 0 -> 15195 bytes .../3208.Alternating-Groups-II/4.png | Bin 0 -> 15166 bytes .../3208.Alternating-Groups-II/5.png | Bin 0 -> 16012 bytes .../3208.Alternating-Groups-II/6.png | Bin 0 -> 15118 bytes .../3208.Alternating-Groups-II/7.png | Bin 0 -> 15501 bytes .../3208.Alternating-Groups-II/8.png | Bin 0 -> 13826 bytes .../3208.Alternating-Groups-II/README.md | 62 ++++++++++++++---- .../3208.Alternating-Groups-II/Solution.go | 30 ++++++++- .../Solution_test.go | 21 +++--- 11 files changed, 88 insertions(+), 25 deletions(-) create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/1.png create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/2.png create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/3.png create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/4.png create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/5.png create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/6.png create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/7.png create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/8.png diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/1.png b/leetcode/3201-3300/3208.Alternating-Groups-II/1.png new file mode 100644 index 0000000000000000000000000000000000000000..f87fb906d88f0f2755bd63e22bd16500e1d0aa19 GIT binary patch literal 12721 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 APyhe` literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/2.png b/leetcode/3201-3300/3208.Alternating-Groups-II/2.png new file mode 100644 index 0000000000000000000000000000000000000000..807d1a0aa77d51d4bf7d608f405659eb5b0f34bc GIT binary patch literal 13504 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 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/3.png b/leetcode/3201-3300/3208.Alternating-Groups-II/3.png new file mode 100644 index 0000000000000000000000000000000000000000..842d336892c46342cb1621e31ddb013366119f78 GIT binary patch literal 15195 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 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/5.png b/leetcode/3201-3300/3208.Alternating-Groups-II/5.png new file mode 100644 index 0000000000000000000000000000000000000000..c4fde88212bd933992d29aa45e2d511772eb7678 GIT binary patch literal 16012 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 Wk(!eY7xT~e;?m*@V!yu`1^*AHkYxD) literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/6.png b/leetcode/3201-3300/3208.Alternating-Groups-II/6.png new file mode 100644 index 0000000000000000000000000000000000000000..e53fb90668d925672e53097cd7a30965ec202d21 GIT binary patch literal 15118 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 literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/7.png b/leetcode/3201-3300/3208.Alternating-Groups-II/7.png new file mode 100644 index 0000000000000000000000000000000000000000..d516080a18b485723e46a2d69fca6d8f72868eaa GIT binary patch literal 15501 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 PelRRAtqiD=G!FhBY()cJ literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/8.png b/leetcode/3201-3300/3208.Alternating-Groups-II/8.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c963823755adeafaa4ae52da465889aea943fb GIT binary patch literal 13826 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 S%)7t;(vp=_lBgFm4*4HMua^S= literal 0 HcmV?d00001 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/README.md b/leetcode/3201-3300/3208.Alternating-Groups-II/README.md index 4d5d850a1..b297755c8 100755 --- a/leetcode/3201-3300/3208.Alternating-Groups-II/README.md +++ b/leetcode/3201-3300/3208.Alternating-Groups-II/README.md @@ -1,28 +1,64 @@ # [3208.Alternating Groups II][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 +There is a circle of red and blue tiles. You are given an array of integers `colors` and an integer `k`. The color of tile i is represented by `colors[i]`: + +- `colors[i] == 0` means that tile `i` is **red**. +- `colors[i] == 1` means that tile `i` is **blue**. + +An **alternating** group is every k contiguous tiles in the circle with **alternating** colors (each tile in the group except the first and last one has a different color from its **left** and **right** tiles). + +Return the number of **alternating** groups. + +**Note** that since `colors` represents a **circle**, the **first** and the **last** tiles are considered to be next to each other. + +**Example 1:** + +![1](./1.png) + + +![2](./2.png) + + +![3](./3.png) + + +![4](./4.png) -**Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: colors = [0,1,0,1,0], k = 3 + +Output: 3 ``` -## 题意 -> ... +**Example 2:** + +![5](./5.png) + + +![6](./6.png) + + +![7](./7.png) -## 题解 -### 思路1 -> ... -Alternating Groups II -```go ``` +Input: colors = [0,1,0,0,1,0,1], k = 6 + +Output: 2 +``` + +**Example 3:** + +![8](./8.png) + +``` +Input: colors = [1,1,0,1], k = 4 + +Output: 0 +``` ## 结语 diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go index d115ccf5e..cf0418fe1 100644 --- a/leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go +++ b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(colors []int, k int) int { + l := len(colors) + dp := make([]int, len(colors)) + dp[0] = 1 + for i := 1; i < l; i++ { + if colors[i] != colors[i-1] { + dp[i] = dp[i-1] + 1 + continue + } + dp[i] = 1 + } + ans := 0 + for start := 0; start <= l-k; start++ { + end := start + k - 1 + if dp[end] >= k { + ans++ + } + } + if colors[0] != colors[l-1] { + for start := l - k + 1; start < l; start++ { + end := (start+k)%l - 1 + if dp[l-1] >= l-start && dp[end] >= end+1 { + ans++ + } + } + } + + return ans } diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go index 14ff50eb4..3a837d368 100644 --- a/leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go +++ b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 0, 1, 0}, 3, 3}, + {"TestCase2", []int{0, 1, 0, 0, 1, 0, 1}, 6, 2}, + {"TestCase3", []int{1, 1, 0, 1}, 4, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 95ff34687a86f11253453d6b04af0a9a9b2a8783 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 11 Mar 2025 09:04:29 +0800 Subject: [PATCH 224/450] Add solution and test-cases for problem 2640 --- .../README.md | 45 +++++++++++++++++++ .../Solution.go | 11 ++++- .../Solution_test.go | 13 +++--- 3 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/README.md diff --git a/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/README.md b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/README.md new file mode 100644 index 000000000..7c2393a0b --- /dev/null +++ b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/README.md @@ -0,0 +1,45 @@ +# [2640.Find the Score of All Prefixes of an Array][title] + +## Description + +We define the **conversion array** `conver` of an array `arr` as follows: + +- `conver[i] = arr[i] + max(arr[0..i])` where `max(arr[0..i])` is the maximum value of `arr[j]` over `0 <= j <= i`. + +We also define the **score** of an array `arr` as the sum of the values of the conversion array of `arr`. + +Given a **0-indexed** integer array `nums` of length n, return an array `ans` of length `n` where `ans[i]` is the score of the prefix `nums[0..i]`. + +**Example 1:** + +``` +Input: nums = [2,3,7,5,10] +Output: [4,10,24,36,56] +Explanation: +For the prefix [2], the conversion array is [4] hence the score is 4 +For the prefix [2, 3], the conversion array is [4, 6] hence the score is 10 +For the prefix [2, 3, 7], the conversion array is [4, 6, 14] hence the score is 24 +For the prefix [2, 3, 7, 5], the conversion array is [4, 6, 14, 12] hence the score is 36 +For the prefix [2, 3, 7, 5, 10], the conversion array is [4, 6, 14, 12, 20] hence the score is 56 +``` + +**EXample 2:** + +``` +Input: nums = [1,1,2,4,8,16] +Output: [2,4,8,16,32,64] +Explanation: +For the prefix [1], the conversion array is [2] hence the score is 2 +For the prefix [1, 1], the conversion array is [2, 2] hence the score is 4 +For the prefix [1, 1, 2], the conversion array is [2, 2, 4] hence the score is 8 +For the prefix [1, 1, 2, 4], the conversion array is [2, 2, 4, 8] hence the score is 16 +For the prefix [1, 1, 2, 4, 8], the conversion array is [2, 2, 4, 8, 16] hence the score is 32 +For the prefix [1, 1, 2, 4, 8, 16], the conversion array is [2, 2, 4, 8, 16, 32] hence the score is 64 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-score-of-all-prefixes-of-an-array +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go index d115ccf5e..0d83d4a80 100755 --- a/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go +++ b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int64 { + ans := make([]int64, len(nums)) + m := int64(nums[0]) + ans[0] = int64(nums[0]) + m + for i := 1; i < len(nums); i++ { + m = max(m, int64(nums[i])) + ans[i] = int64(nums[i]) + m + ans[i-1] + } + return ans } diff --git a/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution_test.go b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution_test.go index 14ff50eb4..0d4a4263c 100755 --- a/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution_test.go +++ b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 3, 7, 5, 10}, []int64{4, 10, 24, 36, 56}}, + {"TestCase2", []int{1, 1, 2, 4, 8, 16}, []int64{2, 4, 8, 16, 32, 64}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ce59d84f9f67fab6dd012315e1ab668c1a7e33e6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 12 Mar 2025 09:17:59 +0800 Subject: [PATCH 225/450] Add solution and test-cases for problem 2529 --- .../README.md | 39 +++++++++++++++++++ .../Solution.go | 15 ++++++- .../Solution_test.go | 14 +++---- 3 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/README.md diff --git a/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/README.md b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/README.md new file mode 100644 index 000000000..cc35a4f1e --- /dev/null +++ b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/README.md @@ -0,0 +1,39 @@ +# [2529.Maximum Count of Positive Integer and Negative Integer][title] + +## Description +Given an array `nums` sorted in **non-decreasing** order, return the maximum between the number of positive integers and the number of negative integers. + +- In other words, if the number of positive integers in `nums` is `pos` and the number of negative integers is `neg`, then return the maximum of `pos` and `neg`. + +**Note** that `0` is neither positive nor negative. + +**Example 1:** + +``` +Input: nums = [-2,-1,-1,1,2,3] +Output: 3 +Explanation: There are 3 positive integers and 3 negative integers. The maximum count among them is 3. +``` + +**Example 2:** + +``` +Input: nums = [-3,-2,-1,0,0,1,2] +Output: 3 +Explanation: There are 2 positive integers and 3 negative integers. The maximum count among them is 3. +``` + +**Example 3:** + +``` +Input: nums = [5,20,66,1314] +Output: 4 +Explanation: There are 4 positive integers and 0 negative integers. The maximum count among them is 4. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-count-of-positive-integer-and-negative-integer +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go index d115ccf5e..1dd989dd3 100755 --- a/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go +++ b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + l := len(nums) + posIndex := sort.Search(l, func(i int) bool { + return nums[i] > 0 + }) + pos := l - posIndex + + negIndex := sort.Search(l, func(i int) bool { + return nums[i] >= 0 + }) + return max(pos, negIndex) } diff --git a/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go index 14ff50eb4..a51517f1d 100755 --- a/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go +++ b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go @@ -10,12 +10,12 @@ 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{-2, -1, -1, 1, 2, 3}, 3}, + {"TestCase2", []int{-3, -2, -1, 0, 0, 1, 2}, 3}, + {"TestCase3", []int{5, 20, 66, 1314}, 4}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2ab530e1604d8d98b2d234a4b666daca68211043 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 14 Mar 2025 09:16:51 +0800 Subject: [PATCH 226/450] Add solution and test-cases for problem 2226 --- .../README.md | 27 +++++++++---------- .../Solution.go | 21 ++++++++++++++- .../Solution_test.go | 22 +++++++-------- 3 files changed, 44 insertions(+), 26 deletions(-) diff --git a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md index ccb82f6c1..00c002d2f 100755 --- a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md +++ b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md @@ -1,28 +1,27 @@ # [2226.Maximum Candies Allocated to K Children][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 a **0-indexed** integer array `candies`. Each element in the array denotes a pile of candies of size `candies[i]`. You can divide each pile into any number of **sub piles**, but you **cannot** merge two piles together. + +You are also given an integer `k`. You should allocate piles of candies to `k` children such that each child gets the **same** number of candies. Each child can be allocated candies from **only one** pile of candies and some piles of candies may go unused. + +Return the **maximum number of candies** each child can get. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: candies = [5,8,6], k = 3 +Output: 5 +Explanation: We can divide candies[1] into 2 piles of size 5 and 3, and candies[2] into 2 piles of size 5 and 1. We now have five piles of candies of sizes 5, 5, 3, 5, and 1. We can allocate the 3 piles of size 5 to 3 children. It can be proven that each child cannot receive more than 5 candies. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Candies Allocated to K Children -```go ``` - +Input: candies = [2,5], k = 11 +Output: 0 +Explanation: There are 11 children but only 7 candies in total, so it is impossible to ensure each child receives at least one candy. Thus, each child gets no candy and the answer is 0. +``` ## 结语 diff --git a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go index d115ccf5e..7b307c645 100644 --- a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go +++ b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { +import ( + "slices" + "sort" +) + +func Solution(candies []int, k int64) int { + m := slices.Max(candies) + var ok func(int) bool + ok = func(n int) bool { + cnt := int64(0) + for _, c := range candies { + cnt += int64(c / n) + } + return cnt >= k + } + // 0, 1, 2, 3, ,4 + // 1, 2, 3, 4, ,5 + x := sort.Search(m+1, func(i int) bool { + return !ok(i + 1) + }) return x } diff --git a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go index 14ff50eb4..88faf8b88 100644 --- a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go +++ b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + candies []int + k int64 + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 8, 6}, 3, 5}, + {"TestCase2", []int{2, 5}, 11, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.candies, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.candies, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c339b5fe8c6fc6d7df672cc9df20c66caace12ae Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 15 Mar 2025 18:36:51 +0800 Subject: [PATCH 227/450] Add solution and test-cases for problem 2560 --- .../2501-2600/2560.House-Robber-IV/README.md | 41 +++++++++++++++++++ .../2560.House-Robber-IV/Solution.go | 36 +++++++++++++++- .../2560.House-Robber-IV/Solution_test.go | 20 ++++----- 3 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2560.House-Robber-IV/README.md diff --git a/leetcode/2501-2600/2560.House-Robber-IV/README.md b/leetcode/2501-2600/2560.House-Robber-IV/README.md new file mode 100644 index 000000000..1700846c1 --- /dev/null +++ b/leetcode/2501-2600/2560.House-Robber-IV/README.md @@ -0,0 +1,41 @@ +# [2560.House Robber IV][title] + +## Description + +There are several consecutive houses along a street, each of which has some money inside. There is also a robber, who wants to steal money from the homes, but he **refuses to steal from adjacent homes**. + +The **capability** of the robber is the maximum amount of money he steals from one house of all the houses he robbed. + +You are given an integer array `nums` representing how much money is stashed in each house. More formally, the `ith` house from the left has `nums[i]` dollars. + +You are also given an integer `k`, representing the **minimum** number of houses the robber will steal from. It is always possible to steal at least k houses. + +Return the **minimum** capability of the robber out of all the possible ways to steal at least k houses. + +**Example 1:** + +``` +Input: nums = [2,3,5,9], k = 2 +Output: 5 +Explanation: +There are three ways to rob at least 2 houses: +- Rob the houses at indices 0 and 2. Capability is max(nums[0], nums[2]) = 5. +- Rob the houses at indices 0 and 3. Capability is max(nums[0], nums[3]) = 9. +- Rob the houses at indices 1 and 3. Capability is max(nums[1], nums[3]) = 9. +Therefore, we return min(5, 9, 9) = 5. +``` + +**Example 2:** + +``` +Input: nums = [2,7,9,3,1], k = 2 +Output: 2 +Explanation: There are 7 ways to rob the houses. The way which leads to minimum capability is to rob the house at index 0 and 4. Return max(nums[0], nums[4]) = 2. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/house-robber-iv +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2560.House-Robber-IV/Solution.go b/leetcode/2501-2600/2560.House-Robber-IV/Solution.go index d115ccf5e..73677b6b9 100755 --- a/leetcode/2501-2600/2560.House-Robber-IV/Solution.go +++ b/leetcode/2501-2600/2560.House-Robber-IV/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +import "slices" + +func Solution(nums []int, k int) int { + l := len(nums) + left, right := 0, slices.Max(nums) + + capFn := func(capability int) bool { + count := 0 + i := 0 + + for i < l { + if nums[i] <= capability { + count++ + i++ + if i < l { + i++ + } + } else { + i++ + } + } + return count >= k + } + + for left < right { + mid := (left + right) / 2 + if capFn(mid) { + right = mid + } else { + left = mid + 1 + } + } + + return left } diff --git a/leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go b/leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go index 14ff50eb4..ce1479f84 100755 --- a/leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go +++ b/leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 3, 5, 9}, 2, 5}, + {"TestCase2", []int{2, 7, 9, 3, 1}, 2, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From dba89629329d1d82cb30d7ec6f0951cd0ba77d79 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 16 Mar 2025 17:10:46 +0800 Subject: [PATCH 228/450] Add solution and test-cases for problem 2594 --- .../README.md | 42 +++++++++++++++++++ .../Solution.go | 30 ++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/README.md diff --git a/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/README.md b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/README.md new file mode 100644 index 000000000..930375999 --- /dev/null +++ b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/README.md @@ -0,0 +1,42 @@ +# [2594.Minimum Time to Repair Cars][title] + +## Description +You are given an integer array `ranks` representing the **ranks** of some mechanics. ranksi is the rank of the `ith` mechanic. A mechanic with a rank `r` can repair n cars in `r * n^2` minutes. + +You are also given an integer `cars` representing the total number of cars waiting in the garage to be repaired. + +Return the **minimum** time taken to repair all the cars. + +**Note**: All the mechanics can repair the cars simultaneously. + +**Example 1:** + +``` +Input: ranks = [4,2,3,1], cars = 10 +Output: 16 +Explanation: +- The first mechanic will repair two cars. The time required is 4 * 2 * 2 = 16 minutes. +- The second mechanic will repair two cars. The time required is 2 * 2 * 2 = 8 minutes. +- The third mechanic will repair two cars. The time required is 3 * 2 * 2 = 12 minutes. +- The fourth mechanic will repair four cars. The time required is 1 * 4 * 4 = 16 minutes. +It can be proved that the cars cannot be repaired in less than 16 minutes. +``` + +**Example 2:** + +``` +Input: ranks = [5,1,8], cars = 6 +Output: 16 +Explanation: +- The first mechanic will repair one car. The time required is 5 * 1 * 1 = 5 minutes. +- The second mechanic will repair four cars. The time required is 1 * 4 * 4 = 16 minutes. +- The third mechanic will repair one car. The time required is 8 * 1 * 1 = 8 minutes. +It can be proved that the cars cannot be repaired in less than 16 minutes. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-repair-cars +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go index d115ccf5e..28a28b6a4 100755 --- a/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go +++ b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "slices" +) + +func Solution(ranks []int, cars int) int64 { + var ok func(int64) bool + ok = func(minutes int64) bool { + c := int64(0) + for _, r := range ranks { + nn := minutes / int64(r) + i := int64(math.Sqrt(float64(nn))) + c += i + } + return c >= int64(cars) + } + + m := slices.Max(ranks) + l, r := int64(0), int64(m)*int64(cars)*int64(cars)+1 + for l < r { + m := (l + r) / 2 + if ok(m) { + r = m + continue + } + l = m + 1 + } + return l } diff --git a/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go index 14ff50eb4..1b9814916 100755 --- a/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go +++ b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + ranks []int + cars int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 3, 2, 1}, 10, 16}, + {"TestCase2", []int{5, 1, 8}, 6, 16}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.ranks, c.cars) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.ranks, c.cars) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3f6aed5558a2e1c9064f97613ac4bb616f72db27 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 17 Mar 2025 09:39:48 +0800 Subject: [PATCH 229/450] Add solution and test-cases for problem 2043 --- .../2043.Simple-Bank-System/README.md | 45 +++++++---- .../2043.Simple-Bank-System/Solution.go | 75 ++++++++++++++++++- .../2043.Simple-Bank-System/Solution_test.go | 27 ++++--- 3 files changed, 118 insertions(+), 29 deletions(-) diff --git a/leetcode/2001-2100/2043.Simple-Bank-System/README.md b/leetcode/2001-2100/2043.Simple-Bank-System/README.md index c44fe7784..2f3fb85fb 100755 --- a/leetcode/2001-2100/2043.Simple-Bank-System/README.md +++ b/leetcode/2001-2100/2043.Simple-Bank-System/README.md @@ -1,28 +1,41 @@ # [2043.Simple Bank System][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 have been tasked with writing a program for a popular bank that will automate all its incoming transactions (transfer, deposit, and withdraw). The bank has `n` accounts numbered from `1` to `n`. The initial balance of each account is stored in a **0-indexed** integer array `balance`, with the `(i + 1)th` account having an initial balance of `balance[i]`. -**Example 1:** +Execute all the **valid** transactions. A transaction is **valid** if: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- The given account number(s) are between `1` and `n`, and +- The amount of money withdrawn or transferred from is **less than or equal** to the balance of the account. -## 题意 -> ... +Implement the `Bank` class: -## 题解 +- `Bank(long[] balance)` Initializes the object with the **0-indexed** integer array `balance`. +- `boolean transfer(int account1, int account2, long money)` Transfers `money` dollars from the account numbered `account1` to the account numbered `account2`. Return `true` if the transaction was successful, `false` otherwise. +- `boolean deposit(int account, long money)` Deposit `money` dollars into the account numbered account. Return `true` if the transaction was successful, `false` otherwise. +- `boolean withdraw(int account, long money)` Withdraw `money` dollars from the account numbered `account`. Return `true` if the transaction was successful, `false` otherwise. -### 思路1 -> ... -Simple Bank System -```go -``` +**Example 1:** +``` +Input +["Bank", "withdraw", "transfer", "deposit", "transfer", "withdraw"] +[[[10, 100, 20, 50, 30]], [3, 10], [5, 1, 20], [5, 20], [3, 4, 15], [10, 50]] +Output +[null, true, true, true, false, false] + +Explanation +Bank bank = new Bank([10, 100, 20, 50, 30]); +bank.withdraw(3, 10); // return true, account 3 has a balance of $20, so it is valid to withdraw $10. + // Account 3 has $20 - $10 = $10. +bank.transfer(5, 1, 20); // return true, account 5 has a balance of $30, so it is valid to transfer $20. + // Account 5 has $30 - $20 = $10, and account 1 has $10 + $20 = $30. +bank.deposit(5, 20); // return true, it is valid to deposit $20 to account 5. + // Account 5 has $10 + $20 = $30. +bank.transfer(3, 4, 15); // return false, the current balance of account 3 is $10, + // so it is invalid to transfer $15 from it. +bank.withdraw(10, 50); // return false, it is invalid because account 10 does not exist. +``` ## 结语 diff --git a/leetcode/2001-2100/2043.Simple-Bank-System/Solution.go b/leetcode/2001-2100/2043.Simple-Bank-System/Solution.go index d115ccf5e..ffe6b73c5 100644 --- a/leetcode/2001-2100/2043.Simple-Bank-System/Solution.go +++ b/leetcode/2001-2100/2043.Simple-Bank-System/Solution.go @@ -1,5 +1,76 @@ package Solution -func Solution(x bool) bool { - return x +type Bank struct { + b []int64 + ok int +} + +func Constructor(balance []int64) Bank { + // 0, 1, 2, 3, 4, 5 + b := make([]int64, len(balance)+1) + for i := 1; i <= len(balance); i++ { + b[i] = balance[i-1] + } + return Bank{b: b, ok: len(balance)} +} + +func (this *Bank) validateAccount(a int) bool { + return a >= 1 && a <= this.ok +} + +func (this *Bank) Transfer(account1 int, account2 int, money int64) bool { + if !this.validateAccount(account1) || !this.validateAccount(account2) { + return false + } + have := this.b[account1] + if have >= money { + this.b[account1] -= money + this.b[account2] += money + return true + } + return false +} + +func (this *Bank) Deposit(account int, money int64) bool { + if !this.validateAccount(account) { + return false + } + this.b[account] += money + return true +} + +func (this *Bank) Withdraw(account int, money int64) bool { + // 0 ,1, 2, 3 + if !this.validateAccount(account) { + return false + } + have := this.b[account] + if have >= money { + this.b[account] -= money + return true + } + return false +} + +type action struct { + a string + from, to int + money int64 +} + +func Solution(balance []int64, actions []action) []bool { + c := Constructor(balance) + ans := make([]bool, len(actions)) + for i, ac := range actions { + if ac.a == "t" { + ans[i] = c.Transfer(ac.from, ac.to, ac.money) + continue + } + if ac.a == "d" { + ans[i] = c.Deposit(ac.from, ac.money) + continue + } + ans[i] = c.Withdraw(ac.from, ac.money) + } + return ans } diff --git a/leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go b/leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go index 14ff50eb4..c97375770 100644 --- a/leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go +++ b/leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go @@ -9,31 +9,36 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + balances []int64 + actions []action + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int64{10, 100, 20, 50, 30}, []action{ + {"w", 3, 0, 10}, + {"t", 5, 1, 20}, + {"d", 5, 0, 20}, + {"t", 3, 4, 15}, + {"w", 10, 0, 50}, + }, []bool{true, true, true, false, false}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.balances, c.actions) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.balances, c.actions) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a4c494137fbcd0ddaf7bd661a344b8996081386c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 18 Mar 2025 22:28:42 +0800 Subject: [PATCH 230/450] Add solution and test-cases for problem 2401 --- .../2401.Longest-Nice-Subarray/README.md | 35 +++++++++++-------- .../2401.Longest-Nice-Subarray/Solution.go | 28 +++++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 53 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md b/leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md index dfcb6ca72..6a5af6a04 100755 --- a/leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md +++ b/leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md @@ -1,28 +1,35 @@ # [2401.Longest Nice Subarray][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 `nums` consisting of **positive** integers. + +We call a subarray of `nums` **nice** if the bitwise **AND** of every pair of elements that are in **different** positions in the subarray is equal to `0`. + +Return the length of the **longest** nice subarray. + +A **subarray** is a **contiguous** part of an array. + +**Note** that subarrays of length `1` are always considered nice. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,8,48,10] +Output: 3 +Explanation: The longest nice subarray is [3,8,48]. This subarray satisfies the conditions: +- 3 AND 8 = 0. +- 3 AND 48 = 0. +- 8 AND 48 = 0. +It can be proven that no longer nice subarray can be obtained, so we return 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Nice Subarray -```go ``` - +Input: nums = [3,1,5,11,13] +Output: 1 +Explanation: The length of the longest nice subarray is 1. Any subarray of length 1 can be chosen. +``` ## 结语 diff --git a/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go b/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go index d115ccf5e..b7083b8ef 100644 --- a/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go +++ b/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + if len(nums) == 1 { + return 1 + } + + cur := 0 + start, end := 0, 0 + ans := 0 + for ; end < len(nums); end++ { + if cur&nums[end] == 0 { + cur |= nums[end] + continue + } + ans = max(ans, end-start) + + for ; start <= end; start++ { + cur ^= nums[start] + if cur&nums[end] == 0 { + start++ + cur |= nums[end] + break + } + } + } + ans = max(ans, end-start) + return ans } diff --git a/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution_test.go b/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution_test.go index 14ff50eb4..9d562886b 100644 --- a/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution_test.go +++ b/leetcode/2401-2500/2401.Longest-Nice-Subarray/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, 3, 8, 48, 10}, 3}, + {"TestCase2", []int{3, 1, 5, 11, 13}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ef22f1ab2c076ff1a9b3599439de733d5b2b8ef5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 19 Mar 2025 09:01:05 +0800 Subject: [PATCH 231/450] Add solution and test-cases for problem 3191 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 19 ++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md index 98341e4f3..491069558 100755 --- a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md +++ b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md @@ -1,28 +1,41 @@ # [3191.Minimum Operations to Make Binary Array Elements Equal to One I][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 a `binary array` `nums`. + +You can do the following operation on the array **any** number of times (possibly zero): + +- Choose **any 3 consecutive** elements from the array and **flip all** of them. + +**Flipping** an element means changing its value from 0 to 1, and from 1 to 0. + +Return the **minimum** number of operations required to make all elements in `nums` equal to 1. If it is impossible, return -1. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [0,1,1,1,0,0] -## 题意 -> ... +Output: 3 -## 题解 +Explanation: +We can do the following operations: -### 思路1 -> ... -Minimum Operations to Make Binary Array Elements Equal to One I -```go +Choose the elements at indices 0, 1 and 2. The resulting array is nums = [1,0,0,1,0,0]. +Choose the elements at indices 1, 2 and 3. The resulting array is nums = [1,1,1,0,0,0]. +Choose the elements at indices 3, 4 and 5. The resulting array is nums = [1,1,1,1,1,1]. ``` +**Example 2:** + +``` +Input: nums = [0,1,1,1] + +Output: -1 + +Explanation: +It is impossible to make all elements equal to 1. +``` ## 结语 diff --git a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go index d115ccf5e..0f4efe410 100644 --- a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go +++ b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + ans := 0 + index := 0 + l := len(nums) + for ; index < l; index++ { + if nums[index] == 1 { + continue + } + if index >= l-2 { + return -1 + } + nums[index] = 1 - nums[index] + nums[index+1] = 1 - nums[index+1] + nums[index+2] = 1 - nums[index+2] + ans++ + } + return ans } diff --git a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution_test.go b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution_test.go index 14ff50eb4..c2fc912cc 100644 --- a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution_test.go +++ b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/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{0, 1, 1, 1, 0, 0}, 3}, + {"TestCase2", []int{0, 1, 1, 1}, -1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4d1d124705dfd751c912565843712184a95b9e01 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 20 Mar 2025 09:32:18 +0800 Subject: [PATCH 232/450] Add solution and test-cases for problem 3108 --- .../1.png | Bin 0 -> 7869 bytes .../2.png | Bin 0 -> 8478 bytes .../README.md | 46 +++++++++++----- .../Solution.go | 49 +++++++++++++++++- .../Solution_test.go | 21 ++++---- 5 files changed, 91 insertions(+), 25 deletions(-) create mode 100644 leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/1.png create mode 100644 leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/2.png diff --git a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/1.png b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/1.png new file mode 100644 index 0000000000000000000000000000000000000000..b4f525e6a9436cc43e7dfee68f6da0ffbd1ebbf4 GIT binary patch literal 7869 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 [!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 +There is an undirected weighted graph with `n` vertices labeled from `0` to `n - 1`. + +You are given the integer `n` and an array `edges`, where `edges[i] = [ui, vi, wi]` indicates that there is an edge between vertices `ui` and `vi` with a weight of `wi`. + +A walk on a graph is a sequence of vertices and edges. The walk starts and ends with a vertex, and each edge connects the vertex that comes before it and the vertex that comes after it. It's important to note that a walk may visit the same edge or vertex more than once. + +The **cost** of a walk starting at node `u` and ending at node `v` is defined as the bitwise `AND` of the weights of the edges traversed during the walk. In other words, if the sequence of edge weights encountered during the walk is `w0, w1, w2, ..., wk`, then the cost is calculated as `w0 & w1 & w2 & ... & wk`, where `&` denotes the bitwise `AND` operator. + +You are also given a 2D array `query`, where `query[i] = [si, ti]`. For each query, you need to find the minimum cost of the walk starting at vertex `si` and ending at vertex `ti`. If there exists no such walk, the answer is `-1`. + +Return the array `answer`, where `answer[i]` denotes the **minimum** cost of a walk for query `i`. + +**Example 1:** + +![1](./1.png) -**Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5, edges = [[0,1,7],[1,3,7],[1,2,1]], query = [[0,3],[3,4]] + +Output: [1,-1] + +Explanation: + +To achieve the cost of 1 in the first query, we need to move on the following edges: 0->1 (weight 7), 1->2 (weight 1), 2->1 (weight 1), 1->3 (weight 7). + +In the second query, there is no walk between nodes 3 and 4, so the answer is -1. ``` -## 题意 -> ... +**Example 2:** + +![2](./2.png) -## 题解 -### 思路1 -> ... -Minimum Cost Walk in Weighted Graph -```go ``` +Input: n = 3, edges = [[0,2,7],[0,1,15],[1,2,6],[1,2,1]], query = [[1,2]] + +Output: [0] +Explanation: +To achieve the cost of 0 in the first query, we need to move on the following edges: 1->2 (weight 1), 2->1 (weight 6), 1->2 (weight 1). +``` ## 结语 diff --git a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go index d115ccf5e..e6b071695 100644 --- a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go +++ b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +type unionFind3108 struct { + father []int + weight []int +} + +func (u *unionFind3108) find(x int) int { + if u.father[x] != x { + u.father[x] = u.find(u.father[x]) + } + return u.father[x] +} + +func (u *unionFind3108) union(x, y, w int) { + fx := u.find(x) + fy := u.find(y) + if fx < fy { + u.father[fy] = fx + u.weight[fx] = u.weight[fx] & u.weight[fy] & w + } else { + u.father[fx] = fy + u.weight[fy] = u.weight[fx] & u.weight[fy] & w + } +} + +func Solution(n int, edges [][]int, query [][]int) []int { + u := &unionFind3108{father: make([]int, n), weight: make([]int, n)} + for i := range n { + u.father[i] = i + u.weight[i] = 0xffffffff + } + + for _, e := range edges { + f, t, w := e[0], e[1], e[2] + u.union(f, t, w) + } + ans := make([]int, len(query)) + for i, q := range query { + f, t := q[0], q[1] + ff := u.find(f) + tf := u.find(t) + if ff != tf { + ans[i] = -1 + continue + } + ans[i] = u.weight[ff] + } + return ans } diff --git a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go index 14ff50eb4..82f7733f1 100644 --- a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go +++ b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + edges [][]int + query [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, [][]int{{0, 1, 7}, {1, 3, 7}, {1, 2, 1}}, [][]int{{0, 3}, {3, 4}}, []int{1, -1}}, + {"TestCase2", 3, [][]int{{0, 2, 7}, {0, 1, 15}, {1, 2, 6}, {1, 2, 1}}, [][]int{{1, 2}}, []int{0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.edges, c.query) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.edges, c.query) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7ffa49d11a74feb92f8adbb58a5bd0b309a4de07 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 22 Mar 2025 20:42:35 +0800 Subject: [PATCH 233/450] Add solution and test-cases for problem 789 --- .../701-800/0789.Escape-The-Ghosts/README.md | 35 ++++++++++++------- .../0789.Escape-The-Ghosts/Solution.go | 23 ++++++++++-- .../0789.Escape-The-Ghosts/Solution_test.go | 19 +++++----- 3 files changed, 53 insertions(+), 24 deletions(-) diff --git a/leetcode/701-800/0789.Escape-The-Ghosts/README.md b/leetcode/701-800/0789.Escape-The-Ghosts/README.md index f2b2b826f..7055fa2e7 100644 --- a/leetcode/701-800/0789.Escape-The-Ghosts/README.md +++ b/leetcode/701-800/0789.Escape-The-Ghosts/README.md @@ -1,28 +1,37 @@ # [789.Escape The Ghosts][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 playing a simplified PAC-MAN game on an infinite 2-D grid. You start at the point `[0, 0]`, and you are given a destination point `target = [xtarget, ytarget]` that you are trying to get to. There are several ghosts on the map with their starting positions given as a 2D array ghosts, where `ghosts[i] = [xi, yi]` represents the starting position of the `ith` ghost. All inputs are **integral coordinates**. + +Each turn, you and all the ghosts may independently choose to either **move 1 unit** in any of the four cardinal directions: north, east, south, or west, or **stay still**. All actions happen **simultaneously**. + +You escape if and only if you can reach the target **before** any ghost reaches you. If you reach any square (including the target) at the **same time** as a ghost, it **does not** count as an escape. + +Return `true` if it is possible to escape regardless of how the ghosts move, otherwise return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: ghosts = [[1,0],[0,3]], target = [0,1] +Output: true +Explanation: You can reach the destination (0, 1) after 1 turn, while the ghosts located at (1, 0) and (0, 3) cannot catch up with you. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Escape The Ghosts -```go ``` +Input: ghosts = [[1,0]], target = [2,0] +Output: false +Explanation: You need to reach the destination (2, 0), but the ghost at (1, 0) lies between you and the destination. +``` + +**Example 3:** +``` +Input: ghosts = [[2,0]], target = [1,0] +Output: false +Explanation: The ghost can reach the target at the same time as you. +``` ## 结语 diff --git a/leetcode/701-800/0789.Escape-The-Ghosts/Solution.go b/leetcode/701-800/0789.Escape-The-Ghosts/Solution.go index d115ccf5e..d40cb89f1 100644 --- a/leetcode/701-800/0789.Escape-The-Ghosts/Solution.go +++ b/leetcode/701-800/0789.Escape-The-Ghosts/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func distance(a, b int) int { + if a < 0 { + a = -a + } + if b < 0 { + b = -b + } + return a + b +} + +func Solution(ghosts [][]int, target []int) bool { + a, b := target[0], target[1] + cmp := distance(a, b) + for _, g := range ghosts { + a, b = target[0]-g[0], target[1]-g[1] + tmp := distance(a, b) + if tmp <= cmp { + return false + } + } + return true } diff --git a/leetcode/701-800/0789.Escape-The-Ghosts/Solution_test.go b/leetcode/701-800/0789.Escape-The-Ghosts/Solution_test.go index 14ff50eb4..12ab92d4a 100644 --- a/leetcode/701-800/0789.Escape-The-Ghosts/Solution_test.go +++ b/leetcode/701-800/0789.Escape-The-Ghosts/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + ghosts [][]int + target []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 0}, {0, 3}}, []int{0, 1}, true}, + {"TestCase2", [][]int{{1, 0}}, []int{2, 0}, false}, + {"TestCase3", [][]int{{2, 0}}, []int{1, 0}, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.ghosts, c.target) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.ghosts, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7a8073c9df21fcfedb76de0d4888f55ca72dc58e Mon Sep 17 00:00:00 2001 From: Boris Date: Sun, 23 Mar 2025 23:23:53 +0800 Subject: [PATCH 234/450] update go.mod --- go.mod | 6 +++--- go.sum | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a4ad5f9c2..13eac0093 100644 --- a/go.mod +++ b/go.mod @@ -12,14 +12,14 @@ require ( github.com/cloudflare/circl v1.6.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7 // indirect + github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/klauspost/compress v1.18.0 // indirect - github.com/onsi/ginkgo/v2 v2.23.0 // indirect + github.com/onsi/ginkgo/v2 v2.23.3 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.50.0 // indirect + github.com/quic-go/quic-go v0.50.1 // indirect github.com/refraction-networking/utls v1.6.7 // indirect go.uber.org/mock v0.5.0 // indirect golang.org/x/crypto v0.36.0 // indirect diff --git a/go.sum b/go.sum index da2244b04..663d570ce 100644 --- a/go.sum +++ b/go.sum @@ -6,12 +6,15 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7 h1:+J3r2e8+RsmN3vKfo75g0YSY61ms37qzPglu4p0sGro= github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -23,6 +26,8 @@ github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zt github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/onsi/ginkgo/v2 v2.23.0 h1:FA1xjp8ieYDzlgS5ABTpdUDB7wtngggONc8a7ku2NqQ= github.com/onsi/ginkgo/v2 v2.23.0/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= +github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= +github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -31,6 +36,8 @@ github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= github.com/quic-go/quic-go v0.50.0 h1:3H/ld1pa3CYhkcc20TPIyG1bNsdhn9qZBGN3b9/UyUo= github.com/quic-go/quic-go v0.50.0/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= +github.com/quic-go/quic-go v0.50.1 h1:unsgjFIUqW8a2oopkY7YNONpV1gYND6Nt9hnt1PN94Q= +github.com/quic-go/quic-go v0.50.1/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= From 23960d1f9618f9fcd88a68f2f70b2c06c7780980 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 24 Mar 2025 09:13:02 +0800 Subject: [PATCH 235/450] Add solution and test-cases for problem 3169 --- .../README.md | 43 +++++++++++++------ .../Solution.go | 22 +++++++++- .../Solution_test.go | 23 +++++----- 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md index 234b2b69d..bc2f05761 100755 --- a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md +++ b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md @@ -1,28 +1,47 @@ # [3169.Count Days Without Meetings][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 a positive integer `days` representing the total number of days an employee is available for work (starting from day 1). You are also given a 2D array `meetings` of size `n` where, `meetings[i] = [start_i, end_i]` represents the starting and ending days of meeting `i` (inclusive). + +Return the count of days when the employee is available for work but no meetings are scheduled. + +**Note**: The meetings may overlap. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: days = 10, meetings = [[5,7],[1,3],[9,10]] + +Output: 2 + +Explanation: + +There is no meeting scheduled on the 4th and 8th days. ``` -## 题意 -> ... +**Example 2:** + +``` +Input: days = 5, meetings = [[2,4],[1,3]] -## 题解 +Output: 1 + +Explanation: + +There is no meeting scheduled on the 5th day. +``` + +**Example 3:** -### 思路1 -> ... -Count Days Without Meetings -```go ``` +Input: days = 6, meetings = [[1,6]] +Output: 0 + +Explanation: + +Meetings are scheduled for all working days. +``` ## 结语 diff --git a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go index d115ccf5e..7b4cf91b3 100644 --- a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go +++ b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(days int, meetings [][]int) int { + ans := 0 + sort.Slice(meetings, func(i, j int) bool { + a, b := meetings[i], meetings[j] + if a[0] == b[0] { + return a[1] < b[1] + } + return a[0] < b[0] + }) + end := 0 + for i := 0; i < len(meetings); i++ { + if meetings[i][0] > end { + ans += meetings[i][0] - end - 1 + } + end = max(end, meetings[i][1]) + } + ans += days - end + return ans } diff --git a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go index 14ff50eb4..ec80a03cf 100644 --- a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go +++ b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + days int + meetings [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 10, [][]int{{5, 7}, {1, 3}, {9, 10}}, 2}, + {"TestCase2", 5, [][]int{{2, 4}, {1, 3}}, 1}, + {"TestCase3", 6, [][]int{{1, 6}}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.days, c.meetings) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.days, c.meetings) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 46ad1ab582258519cb59e2e5da1fe078037a561f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 26 Mar 2025 09:25:08 +0800 Subject: [PATCH 236/450] Add solution and test-cases for problem 2033 --- .../1.png | Bin 0 -> 5050 bytes .../2.png | Bin 0 -> 4775 bytes .../3.png | Bin 0 -> 4538 bytes .../README.md | 43 ++++++++++++------ .../Solution.go | 26 ++++++++++- .../Solution_test.go | 21 +++++---- 6 files changed, 65 insertions(+), 25 deletions(-) create mode 100644 leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/1.png create mode 100644 leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/2.png create mode 100644 leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/3.png diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/1.png b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d39df42ad1c5bcf4f0d7b6163129e04a996b6c9 GIT binary patch literal 5050 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 KH>yOsU;YpJt`4~X literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/2.png b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/2.png new file mode 100644 index 0000000000000000000000000000000000000000..4a23797c8025659c54b96d37dbadbea1c9b74774 GIT binary patch literal 4775 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 Cc-}$) literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md index 92d48a887..0dc9bdea8 100755 --- a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md +++ b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md @@ -1,28 +1,45 @@ # [2033.Minimum Operations to Make a Uni-Value Grid][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 a 2D integer `grid` of size `m x n` and an integer `x`. In one operation, you can **add** `x` to or **subtract** `x` from any element in the `grid`. + +A **uni-value** grid is a grid where all the elements of it are equal. + +Return the **minimum** number of operations to make the grid **uni-value**. If it is not possible, return `-1`. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[2,4],[6,8]], x = 2 +Output: 4 +Explanation: We can make every element equal to 4 by doing the following: +- Add x to 2 once. +- Subtract x from 6 once. +- Subtract x from 8 twice. +A total of 4 operations were used. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Minimum Operations to Make a Uni-Value Grid -```go +``` +Input: grid = [[1,5],[2,3]], x = 1 +Output: 5 +Explanation: We can make every element equal to 3. ``` +**Example 3:** + +![3](./3.png) + +``` +Input: grid = [[1,2],[3,4]], x = 2 +Output: -1 +Explanation: It is impossible to make every element equal. +``` ## 结语 diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go index d115ccf5e..529984641 100644 --- a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go +++ b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(grid [][]int, x int) int { + list := []int{} + rows, cols := len(grid), len(grid[0]) + for i := range rows { + for j := range cols { + list = append(list, grid[i][j]) + } + } + sort.Ints(list) + mid := list[len(list)/2] + ans := 0 + for _, n := range list { + if n%x != mid%x { + return -1 + } + diff := n - mid + if diff < 0 { + diff = -diff + } + ans += diff / x + } + return ans } diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution_test.go b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution_test.go index 14ff50eb4..11ec392b2 100644 --- a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution_test.go +++ b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + grid [][]int + x int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{2, 4}, {6, 8}}, 2, 4}, + {"TestCase2", [][]int{{1, 5}, {2, 3}}, 1, 5}, + {"TestCase3", [][]int{{1, 2}, {3, 4}}, 2, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.grid, c.x) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.grid, c.x) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 344fe92294ba0e02a647c1de2a24f3ea44be173b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 27 Mar 2025 09:42:29 +0800 Subject: [PATCH 237/450] Add solution and test-cases for problem 2780 --- .../README.md | 54 ++++++++++++++++++ .../Solution.go | 56 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 115 insertions(+), 9 deletions(-) create mode 100644 leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/README.md diff --git a/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/README.md b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/README.md new file mode 100644 index 000000000..5c4d57e55 --- /dev/null +++ b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/README.md @@ -0,0 +1,54 @@ +# [2780.Minimum Index of a Valid Split][title] + +## Description +An element `x` of an integer array `arr` of length `m` is **dominant** if **more than half** the elements of `arr` have a value of `x`. + +You are given a **0-indexed** integer array `nums` of length `n` with one **dominant** element. + +You can split `nums` at an index `i` into two arrays `nums[0, ..., i]` and `nums[i + 1, ..., n - 1]`, but the split is only **valid** if: + +- `0 <= i < n - 1` +- `nums[0, ..., i]`, and `nums[i + 1, ..., n - 1]` have the same dominant element. + +Here, `nums[i, ..., j]` denotes the subarray of `nums` starting at index `i` and ending at index `j`, both ends being inclusive. Particularly, if `j < i` then `nums[i, ..., j]` denotes an empty subarray. + +Return the **minimum** index of a *8valid split**. If no valid split exists, return `-1`. + +**Example 1:** + +``` +Input: nums = [1,2,2,2] +Output: 2 +Explanation: We can split the array at index 2 to obtain arrays [1,2,2] and [2]. +In array [1,2,2], element 2 is dominant since it occurs twice in the array and 2 * 2 > 3. +In array [2], element 2 is dominant since it occurs once in the array and 1 * 2 > 1. +Both [1,2,2] and [2] have the same dominant element as nums, so this is a valid split. +It can be shown that index 2 is the minimum index of a valid split. +``` + +**Example 2:** + +``` +Input: nums = [2,1,3,1,1,1,7,1,2,1] +Output: 4 +Explanation: We can split the array at index 4 to obtain arrays [2,1,3,1,1] and [1,7,1,2,1]. +In array [2,1,3,1,1], element 1 is dominant since it occurs thrice in the array and 3 * 2 > 5. +In array [1,7,1,2,1], element 1 is dominant since it occurs thrice in the array and 3 * 2 > 5. +Both [2,1,3,1,1] and [1,7,1,2,1] have the same dominant element as nums, so this is a valid split. +It can be shown that index 4 is the minimum index of a valid split. +``` + +**Example 3:** + +``` +Input: nums = [3,3,3,3,7,2,2] +Output: -1 +Explanation: It can be shown that there is no valid split. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-index-of-a-valid-split +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go index d115ccf5e..6d6b4c4aa 100755 --- a/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go +++ b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go @@ -1,5 +1,57 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + l := len(nums) + leftCnt := make(map[int]int) + left := make([]int, l) + m := -1 + for i, n := range nums { + left[i] = -1 + leftCnt[n]++ + if m == -1 { + m = n + left[i] = m + continue + } + selected := m + if leftCnt[n] > leftCnt[m] { + selected = n + } + + if leftCnt[selected] > (i+1)/2 { + left[i] = selected + } + m = selected + } + + rightCnt := make(map[int]int) + right := make([]int, l) + m = -1 + for i := l - 1; i >= 0; i-- { + n := nums[i] + right[i] = -1 + rightCnt[n]++ + if m == -1 { + m = n + right[i] = m + continue + } + selected := m + if rightCnt[n] > rightCnt[m] { + selected = n + } + if rightCnt[selected] > (l-i)/2 { + right[i] = selected + } + m = selected + } + for i := 0; i < l-1; i++ { + if left[i] == -1 || right[i] == -1 { + continue + } + if left[i] == right[i+1] { + return i + } + } + return -1 } diff --git a/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go index 14ff50eb4..e05eb0faa 100755 --- a/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go +++ b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go @@ -10,12 +10,12 @@ 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, 2}, 2}, + {"TestCase2", []int{2, 1, 3, 1, 1, 1, 7, 1, 2, 1}, 4}, + {"TestCase3", []int{3, 3, 3, 3, 7, 2, 2}, -1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c22bb6b265f2d3c658c1590e8c56c256f2e58224 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 28 Mar 2025 09:39:22 +0800 Subject: [PATCH 238/450] Add solution and test-cases for problem 2503 --- .../1.png | Bin 0 -> 22720 bytes .../2.png | Bin 0 -> 3226 bytes .../README.md | 41 ++++++++++++ .../Solution.go | 61 +++++++++++++++++- .../Solution_test.go | 22 +++---- 5 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/1.png create mode 100644 leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/2.png create mode 100644 leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/README.md diff --git a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/1.png b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c1443894bbc098080636bcdc0753735064ea05d4 GIT binary patch literal 22720 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�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 literal 0 HcmV?d00001 diff --git a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/2.png b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/2.png new file mode 100644 index 0000000000000000000000000000000000000000..3643db5178e2e39dcf6d6dfc931806de76808bc7 GIT binary patch literal 3226 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 literal 0 HcmV?d00001 diff --git a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/README.md b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/README.md new file mode 100644 index 000000000..798e36a63 --- /dev/null +++ b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/README.md @@ -0,0 +1,41 @@ +# [2503.Maximum Number of Points From Grid Queries][title] + +## Description + +You are given an `m x n` integer matrix `grid` and an array `queries` of size `k`. + +Find an array `answer` of size k such that for each integer `queries[i]` you start in the **top left** cell of the matrix and repeat the following process: + +- If `queries[i]` is **strictly** greater than the value of the current cell that you are in, then you get one point if it is your first time visiting this cell, and you can move to any **adjacent** cell in all `4` directions: up, down, left, and right. +- Otherwise, you do not get any points, and you end this process. + +After the process, `answer[i]` is the **maximum** number of points you can get. **Note** that for each query you are allowed to visit the same cell **multiple** times. + +Return the resulting array `answer`. + +**Example 1:** + +![1](./1.png) + +``` +Input: grid = [[1,2,3],[2,5,7],[3,5,1]], queries = [5,6,2] +Output: [5,8,1] +Explanation: The diagrams above show which cells we visit to get points for each query. +``` + +**EXample 2:** + +![2](./2.png) + +``` +Input: grid = [[5,2,1],[1,1,2]], queries = [3] +Output: [0] +Explanation: We can not get any points because the value of the top left cell is already greater than or equal to 3. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-points-from-grid-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go index d115ccf5e..8ea38fe2e 100755 --- a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go +++ b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(grid [][]int, queries []int) []int { + var dirs = [][2]int{ + {0, 1}, {1, 0}, {0, -1}, {-1, 0}, + } + rows, cols := len(grid), len(grid[0]) + visited := make([][]bool, rows) + for i := range rows { + visited[i] = make([]bool, cols) + } + indies := make([]int, len(queries)) + for i := range queries { + indies[i] = i + } + sort.Slice(indies, func(i, j int) bool { + ai, bi := indies[i], indies[j] + return queries[ai] < queries[bi] + }) + + ans := make([]int, len(queries)) + queue := [][2]int{{0, 0}} + visited[0][0] = true + cal := make(map[int]int) + cnt := 0 + for _, index := range indies { + target := queries[index] + if v, ok := cal[target]; ok { + ans[index] = v + continue + } + for { + nq := make([][2]int, 0) + all := true + for _, cur := range queue { + if grid[cur[0]][cur[1]] >= target { + nq = append(nq, [2]int{cur[0], cur[1]}) + continue + } + all = false + cnt++ + for _, d := range dirs { + nx, ny := cur[0]+d[0], cur[1]+d[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols || visited[nx][ny] { + continue + } + nq = append(nq, [2]int{nx, ny}) + visited[nx][ny] = true + } + } + queue = nq + if all { + break + } + } + cal[target] = cnt + ans[index] = cnt + } + return ans } diff --git a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution_test.go b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution_test.go index 14ff50eb4..ba452cf59 100755 --- a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution_test.go +++ b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + grid [][]int + queries []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2, 3}, {2, 5, 7}, {3, 5, 1}}, []int{5, 6, 2}, []int{5, 8, 1}}, + {"TestCase2", [][]int{{5, 2, 1}, {1, 1, 2}}, []int{3}, []int{0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.grid, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.grid, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ed5c176d42875951e1b01fad3959310efc8483f6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 29 Mar 2025 21:25:37 +0800 Subject: [PATCH 239/450] Add solution and test-cases for problem 2818 --- .../README.md | 49 +++++++ .../Solution.go | 138 +++++++++++++++++- .../Solution_test.go | 20 +-- 3 files changed, 196 insertions(+), 11 deletions(-) create mode 100644 leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/README.md diff --git a/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/README.md b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/README.md new file mode 100644 index 000000000..f6358c04f --- /dev/null +++ b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/README.md @@ -0,0 +1,49 @@ +# [2818.Apply Operations to Maximize Score][title] + +## Description + +You are given an array `nums` of `n` positive integers and an integer `k`. + +Initially, you start with a score of `1`. You have to maximize your score by applying the following operation at most `k` times: + +- Choose any **non-empty** subarray `nums[l, ..., r]` that you haven't chosen previously. +- Choose an element `x` of `nums[l, ..., r]` with the highest **prime score**. If multiple such elements exist, choose the one with the smallest index. +- Multiply your score by `x`. + +Here, `nums[l, ..., r]` denotes the subarray of `nums` starting at index `l` and ending at the index `r`, both ends being inclusive. + +The **prime score** of an integer `x` is equal to the number of distinct prime factors of x. For example, the prime score of `300` is `3` since `300 = 2 * 2 * 3 * 5 * 5`. + +Return the **maximum possible score** after applying at most `k` operations. + +Since the answer may be large, return it modulo `10^9 + 7`. + +**Example 1:** + +``` +Input: nums = [8,3,9,3,8], k = 2 +Output: 81 +Explanation: To get a score of 81, we can apply the following operations: +- Choose subarray nums[2, ..., 2]. nums[2] is the only element in this subarray. Hence, we multiply the score by nums[2]. The score becomes 1 * 9 = 9. +- Choose subarray nums[2, ..., 3]. Both nums[2] and nums[3] have a prime score of 1, but nums[2] has the smaller index. Hence, we multiply the score by nums[2]. The score becomes 9 * 9 = 81. +It can be proven that 81 is the highest score one can obtain. +``` + +**Example 2:** + +``` +Input: nums = [19,12,14,6,10,18], k = 3 +Output: 4788 +Explanation: To get a score of 4788, we can apply the following operations: +- Choose subarray nums[0, ..., 0]. nums[0] is the only element in this subarray. Hence, we multiply the score by nums[0]. The score becomes 1 * 19 = 19. +- Choose subarray nums[5, ..., 5]. nums[5] is the only element in this subarray. Hence, we multiply the score by nums[5]. The score becomes 19 * 18 = 342. +- Choose subarray nums[2, ..., 3]. Both nums[2] and nums[3] have a prime score of 2, but nums[2] has the smaller index. Hence, we multipy the score by nums[2]. The score becomes 342 * 14 = 4788. +It can be proven that 4788 is the highest score one can obtain. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/apply-operations-to-maximize-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go index d115ccf5e..e7b7148e5 100755 --- a/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go +++ b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go @@ -1,5 +1,141 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +const mod2818 = 1_000_000_007 + +type Pair2818 struct { + value int + index int +} + +// PriorityQueue implements a priority queue for pairs based on value +type PriorityQueue []Pair2818 + +func (pq PriorityQueue) Len() int { + return len(pq) +} + +func (pq PriorityQueue) Less(i, j int) bool { + return pq[i].value > pq[j].value // Max-heap based on value +} + +func (pq PriorityQueue) Swap(i, j int) { + pq[i], pq[j] = pq[j], pq[i] +} + +func (pq *PriorityQueue) Push(x interface{}) { + *pq = append(*pq, x.(Pair2818)) +} + +func (pq *PriorityQueue) Pop() interface{} { + old := *pq + n := len(old) + x := old[n-1] + *pq = old[0 : n-1] return x } + +// Helper function to compute the number of distinct prime factors +func distinctPrimeFactors(x int) int { + count := 0 + for i := 2; i*i <= x; i++ { + if x%i == 0 { + count++ + for x%i == 0 { + x /= i + } + } + } + if x > 1 { + count++ // If x is a prime number larger than sqrt(original x) + } + return count +} + +func Solution(nums []int, k int) int { + n := len(nums) + primeScores := make([]int, n) + + for i := 0; i < n; i++ { + primeScores[i] = distinctPrimeFactors(nums[i]) + } + + nextDominant := make([]int, n) + prevDominant := make([]int, n) + for i := 0; i < n; i++ { + nextDominant[i] = n + prevDominant[i] = -1 + } + + stack := []int{} + + for i := 0; i < n; i++ { + for len(stack) > 0 && primeScores[stack[len(stack)-1]] < primeScores[i] { + topIndex := stack[len(stack)-1] + stack = stack[:len(stack)-1] + nextDominant[topIndex] = i + } + + if len(stack) > 0 { + prevDominant[i] = stack[len(stack)-1] + } + + stack = append(stack, i) + } + + numOfSubarrays := make([]int64, n) + for i := 0; i < n; i++ { + numOfSubarrays[i] = int64(nextDominant[i]-i) * int64(i-prevDominant[i]) + } + + pq := &PriorityQueue{} + heap.Init(pq) + + // Push each number and its index onto the priority queue + for i := 0; i < n; i++ { + heap.Push(pq, Pair2818{value: nums[i], index: i}) + } + + score := int64(1) + + // Process elements while there are operations left + for k > 0 { + // Get the element with the maximum value from the queue + top := heap.Pop(pq).(Pair2818) + num := top.value + index := top.index + + // Calculate operations to apply on the current element + operations := int64(k) + if operations > numOfSubarrays[index] { + operations = numOfSubarrays[index] + } + + // Update the score + score = (score * power(num, operations)) % mod2818 + + // Reduce the remaining operations count + k -= int(operations) + } + + return int(score) +} + +// Helper function to compute the power of a number modulo mod2818 +func power(base int, exponent int64) int64 { + res := int64(1) + + // Calculate the exponentiation using binary exponentiation + for exponent > 0 { + if exponent%2 == 1 { + res = (res * int64(base)) % mod2818 + } + base = (base * base) % mod2818 + exponent /= 2 + } + + return res +} diff --git a/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution_test.go b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution_test.go index 14ff50eb4..fe1e36b28 100755 --- a/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution_test.go +++ b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{8, 3, 9, 3, 8}, 2, 81}, + {"TestCase2", []int{19, 12, 14, 6, 10, 18}, 3, 4788}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7588b34303f35b6365c96d79fad7c13d7050fa4d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 30 Mar 2025 18:50:33 +0800 Subject: [PATCH 240/450] Add solution and test-cases for problem 3227 --- .../3227.Vowels-Game-in-a-String/README.md | 44 +++++++++++++------ .../3227.Vowels-Game-in-a-String/Solution.go | 9 +++- .../Solution_test.go | 11 +++-- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md index 0e1001c83..9cba51376 100755 --- a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md +++ b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md @@ -1,28 +1,46 @@ # [3227.Vowels Game in a String][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 +Alice and Bob are playing a game on a string. + +You are given a string `s`, Alice and Bob will take turns playing the following game where Alice starts **first**: + +- On Alice's turn, she has to remove any **non-empty** substring from `s` that contains an **odd** number of vowels. +- On Bob's turn, he has to remove any **non-empty** substring from `s` that contains an **even** number of vowels. + +The first player who cannot make a move on their turn loses the game. We assume that both Alice and Bob play **optimally**. + +Return `true` if Alice wins the game, and `false` otherwise. + +The English vowels are: `a`, `e`, `i`, `o`, and `u`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "leetcoder" + +Output: true + +Explanation: +Alice can win the game as follows: -## 题意 -> ... +Alice plays first, she can delete the underlined substring in s = "leetcoder" which contains 3 vowels. The resulting string is s = "der". +Bob plays second, he can delete the underlined substring in s = "der" which contains 0 vowels. The resulting string is s = "er". +Alice plays third, she can delete the whole string s = "er" which contains 1 vowel. +Bob plays fourth, since the string is empty, there is no valid play for Bob. So Alice wins the game. +``` -## 题解 +**Example 2:** -### 思路1 -> ... -Vowels Game in a String -```go ``` +Input: s = "bbcd" + +Output: false +Explanation: +There is no valid play for Alice in her first turn, so Alice loses the game. +``` ## 结语 diff --git a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go index d115ccf5e..c140ecfb5 100644 --- a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go +++ b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go @@ -1,5 +1,10 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) bool { + for _, e := range s { + if e == 'a' || e == 'e' || e == 'i' || e == 'o' || e == 'u' { + return true + } + } + return false } diff --git a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go index 14ff50eb4..ab49d64b8 100644 --- a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go +++ b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "leetcode", true}, + {"TestCase2", "bbcd", false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 826f64b15c5a1a5b9b3abd8be2018fe8c047bb4c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 1 Apr 2025 09:24:23 +0800 Subject: [PATCH 241/450] Add solution and test-cases for problem 69 --- leetcode/1-100/0069.Sqrt-x/Solution.go | 12 +++++++++++ leetcode/1-100/0069.Sqrt-x/Solution_test.go | 23 +++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/leetcode/1-100/0069.Sqrt-x/Solution.go b/leetcode/1-100/0069.Sqrt-x/Solution.go index 760c706f7..db3608581 100644 --- a/leetcode/1-100/0069.Sqrt-x/Solution.go +++ b/leetcode/1-100/0069.Sqrt-x/Solution.go @@ -1,5 +1,7 @@ package Solution +import "sort" + func mySqrt(x int) int { r := x for r*r > x { @@ -7,3 +9,13 @@ func mySqrt(x int) int { } return r } + +func mySqrt1(x int) int { + idx := sort.Search(x, func(i int) bool { + return i*i >= x + }) + if idx*idx == x { + return idx + } + return idx - 1 +} diff --git a/leetcode/1-100/0069.Sqrt-x/Solution_test.go b/leetcode/1-100/0069.Sqrt-x/Solution_test.go index 81190b2c0..e2b89328e 100644 --- a/leetcode/1-100/0069.Sqrt-x/Solution_test.go +++ b/leetcode/1-100/0069.Sqrt-x/Solution_test.go @@ -27,3 +27,26 @@ func TestSolution(t *testing.T) { }) } } + +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs int + expect int + }{ + {"1 test 1", 4, 2}, + {"2 test 2", 8, 2}, + } + + // 开始测试 + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + ret := mySqrt1(c.inputs) + if !reflect.DeepEqual(ret, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, ret, c.inputs) + } + }) + } +} From f06b00ea3cdcb1c5f8d75926d18f64d60439f4df Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 2 Apr 2025 09:29:16 +0800 Subject: [PATCH 242/450] Add solution and test-cases for problem 2873 --- .../README.md | 41 +++++++++++++++++++ .../Solution.go | 17 ++++++++ .../Solution_test.go | 39 ++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/README.md create mode 100644 leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution.go create mode 100644 leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution_test.go diff --git a/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/README.md b/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/README.md new file mode 100644 index 000000000..e27dbe607 --- /dev/null +++ b/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/README.md @@ -0,0 +1,41 @@ +# [2873.Maximum Value of an Ordered Triplet I][title] + +## Description +You are given a **0-indexed** integer array `nums`. + +Return **the maximum value over all triplets of indices** `(i, j, k)` such that `i < j < k`. If all such triplets have a negative value, return `0`. + +The **value of a triplet of indices** `(i, j, k)` is equal to `(nums[i] - nums[j]) * nums[k]`. + +**Example 1:** + +``` +Input: nums = [12,6,1,2,7] +Output: 77 +Explanation: The value of the triplet (0, 2, 4) is (nums[0] - nums[2]) * nums[4] = 77. +It can be shown that there are no ordered triplets of indices with a value greater than 77. +``` + +**Example 2:** + +``` +Input: nums = [1,10,3,4,19] +Output: 133 +Explanation: The value of the triplet (1, 2, 4) is (nums[1] - nums[2]) * nums[4] = 133. +It can be shown that there are no ordered triplets of indices with a value greater than 133. +``` + +**Example 3:** + +``` +Input: nums = [1,2,3] +Output: 0 +Explanation: The only ordered triplet of indices (0, 1, 2) has a negative value of (nums[0] - nums[1]) * nums[2] = -3. Hence, the answer would be 0. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-of-an-ordered-triplet-i +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution.go b/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution.go new file mode 100644 index 000000000..e63298bf1 --- /dev/null +++ b/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution.go @@ -0,0 +1,17 @@ +package Solution + +func Solution(nums []int) int64 { + var ans int64 + cut := make([]int, len(nums)) + _max := nums[0] + for i := 1; i < len(nums); i++ { + cut[i] = _max - nums[i] + _max = max(_max, nums[i]) + } + _max = cut[1] + for i := 2; i < len(nums); i++ { + ans = max(ans, int64(nums[i])*int64(_max)) + _max = max(_max, cut[i]) + } + return ans +} diff --git a/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution_test.go b/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution_test.go new file mode 100644 index 000000000..96f1704d1 --- /dev/null +++ b/leetcode/2801-2900/2873.Maximum-Value-of-an-Ordered-Triplet-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + expect int64 + }{ + {"TestCase1", []int{12, 6, 1, 2, 7}, 77}, + {"TestCase2", []int{1, 10, 3, 4, 19}, 133}, + {"TestCase3", []int{1, 2, 3}, 0}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 051ae854b32cba9ee9a735d62005fa95ac611d51 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 2 Apr 2025 09:34:29 +0800 Subject: [PATCH 243/450] Add solution and test-cases for problem 2874 --- .../README.md | 41 +++++++++++++++++++ .../Solution.go | 17 ++++++++ .../Solution_test.go | 39 ++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/README.md create mode 100644 leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution.go create mode 100644 leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution_test.go diff --git a/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/README.md b/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/README.md new file mode 100644 index 000000000..1c7d3d92d --- /dev/null +++ b/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/README.md @@ -0,0 +1,41 @@ +# [2874.Maximum Value of an Ordered Triplet II][title] + +## Description +You are given a **0-indexed** integer array `nums`. + +Return **the maximum value over all triplets of indices** `(i, j, k)` such that `i < j < k`. If all such triplets have a negative value, return `0`. + +The **value of a triplet of indices** `(i, j, k)` is equal to `(nums[i] - nums[j]) * nums[k]`. + +**Example 1:** + +``` +Input: nums = [12,6,1,2,7] +Output: 77 +Explanation: The value of the triplet (0, 2, 4) is (nums[0] - nums[2]) * nums[4] = 77. +It can be shown that there are no ordered triplets of indices with a value greater than 77. +``` + +**Example 2:** + +``` +Input: nums = [1,10,3,4,19] +Output: 133 +Explanation: The value of the triplet (1, 2, 4) is (nums[1] - nums[2]) * nums[4] = 133. +It can be shown that there are no ordered triplets of indices with a value greater than 133. +``` + +**Example 3:** + +``` +Input: nums = [1,2,3] +Output: 0 +Explanation: The only ordered triplet of indices (0, 1, 2) has a negative value of (nums[0] - nums[1]) * nums[2] = -3. Hence, the answer would be 0. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-of-an-ordered-triplet-ii +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution.go b/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution.go new file mode 100644 index 000000000..e63298bf1 --- /dev/null +++ b/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution.go @@ -0,0 +1,17 @@ +package Solution + +func Solution(nums []int) int64 { + var ans int64 + cut := make([]int, len(nums)) + _max := nums[0] + for i := 1; i < len(nums); i++ { + cut[i] = _max - nums[i] + _max = max(_max, nums[i]) + } + _max = cut[1] + for i := 2; i < len(nums); i++ { + ans = max(ans, int64(nums[i])*int64(_max)) + _max = max(_max, cut[i]) + } + return ans +} diff --git a/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution_test.go b/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution_test.go new file mode 100644 index 000000000..96f1704d1 --- /dev/null +++ b/leetcode/2801-2900/2874.Maximum-Value-of-an-Ordered-Triplet-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + expect int64 + }{ + {"TestCase1", []int{12, 6, 1, 2, 7}, 77}, + {"TestCase2", []int{1, 10, 3, 4, 19}, 133}, + {"TestCase3", []int{1, 2, 3}, 0}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From e1092756cc69d3ca8a2b1b6b9ec88712d03d9c8e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 4 Apr 2025 19:35:11 +0800 Subject: [PATCH 244/450] Add solution and test-cases for problem 434 --- .../README.md | 24 ++++++++----------- .../Solution.go | 23 ++++++++++++++++-- .../Solution_test.go | 13 +++++----- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0434.Number-of-Segments-in-a-String/README.md b/leetcode/401-500/0434.Number-of-Segments-in-a-String/README.md index c752443b7..37eaea0b8 100644 --- a/leetcode/401-500/0434.Number-of-Segments-in-a-String/README.md +++ b/leetcode/401-500/0434.Number-of-Segments-in-a-String/README.md @@ -1,28 +1,24 @@ # [434.Number of Segments in a String][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 +Given a string `s`, return the number of segments in the string. + +A **segment** is defined to be a contiguous sequence of **non-space characters**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "Hello, my name is John" +Output: 5 +Explanation: The five segments are ["Hello,", "my", "name", "is", "John"] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Segments in a String -```go ``` - +Input: s = "Hello" +Output: 1 +``` ## 结语 diff --git a/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution.go b/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution.go index d115ccf5e..f94716d3d 100644 --- a/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution.go +++ b/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + cnt := 0 + start := -1 + end := 0 + for ; end < len(s); end++ { + if s[end] == ' ' { + if start == -1 { + continue + } + cnt++ + start = -1 + continue + } + if start == -1 { + start = end + } + } + if start != -1 { + cnt++ + } + return cnt } diff --git a/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution_test.go b/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution_test.go index 14ff50eb4..28d10a2c6 100644 --- a/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution_test.go +++ b/leetcode/401-500/0434.Number-of-Segments-in-a-String/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "Hello, my name is John", 5}, + {"TestCase2", "Hello", 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6121a2c0901a23e6efa839328b3f5994b4616180 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 5 Apr 2025 22:19:16 +0800 Subject: [PATCH 245/450] Add solution and test-cases for problem 775 --- .../README.md | 35 ++++++++------ .../Solution.go | 47 ++++++++++++++++++- .../Solution_test.go | 11 ++--- 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/leetcode/701-800/0775.Global-and-Local-Inversions/README.md b/leetcode/701-800/0775.Global-and-Local-Inversions/README.md index 473da0157..2acff5a76 100644 --- a/leetcode/701-800/0775.Global-and-Local-Inversions/README.md +++ b/leetcode/701-800/0775.Global-and-Local-Inversions/README.md @@ -1,28 +1,35 @@ # [775.Global and Local Inversions][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 integer array `nums` of length `n` which represents a permutation of all the integers in the range `[0, n - 1]`. + +The number of **global inversions** is the number of the different pairs `(i, j)` where: + +- `0 <= i < j < n` +- `nums[i] > nums[j]` + +The number of **local inversions** is the number of indices `i` where: + +- `0 <= i < n - 1` +- `nums[i] > nums[i + 1]` + +Return `true` if the number of **global inversions** is equal to the number of **local inversions**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,0,2] +Output: true +Explanation: There is 1 global inversion and 1 local inversion. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Global and Local Inversions -```go ``` - +Input: nums = [1,2,0] +Output: false +Explanation: There are 2 global inversions and 1 local inversion. +``` ## 结语 diff --git a/leetcode/701-800/0775.Global-and-Local-Inversions/Solution.go b/leetcode/701-800/0775.Global-and-Local-Inversions/Solution.go index d115ccf5e..462422092 100644 --- a/leetcode/701-800/0775.Global-and-Local-Inversions/Solution.go +++ b/leetcode/701-800/0775.Global-and-Local-Inversions/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { - return x +func merge(nums []int, left, right int) int { + mid := (right-left)/2 + left + i, j := left, mid+1 + temp := make([]int, right-left+1) + k := 0 + reverseOrderPairs := 0 + for ; i <= mid && j <= right; k++ { + if nums[i] > nums[j] { + reverseOrderPairs += mid - i + 1 + temp[k] = nums[j] + j++ + continue + } + temp[k] = nums[i] + i++ + } + for ; i <= mid; i, k = i+1, k+1 { + temp[k] = nums[i] + + } + for ; j <= right; j, k = j+1, k+1 { + temp[k] = nums[j] + } + for ; k > 0; k-- { + nums[left+k-1] = temp[k-1] + } + return reverseOrderPairs +} +func mergeSort(nums []int, left, right int) int { + if left < right { + mid := (right-left)/2 + left + return mergeSort(nums, left, mid) + mergeSort(nums, mid+1, right) + merge(nums, left, right) + } + return 0 +} + +func Solution(nums []int) bool { + local := 0 + for i := 0; i < len(nums)-1; i++ { + if nums[i] > nums[i+1] { + local++ + } + } + global := mergeSort(nums, 0, len(nums)-1) + return local == global } diff --git a/leetcode/701-800/0775.Global-and-Local-Inversions/Solution_test.go b/leetcode/701-800/0775.Global-and-Local-Inversions/Solution_test.go index 14ff50eb4..8ea36efcf 100644 --- a/leetcode/701-800/0775.Global-and-Local-Inversions/Solution_test.go +++ b/leetcode/701-800/0775.Global-and-Local-Inversions/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 0, 2}, true}, + {"TestCase2", []int{1, 2, 0}, false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 21132515974157b3600f407ff1340b04e562afdd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 6 Apr 2025 19:16:07 +0800 Subject: [PATCH 246/450] Add solution and test-cases for problem 845 --- .../0845.Longest-Mountain-in-Array/README.md | 31 ++++++++++--------- .../Solution.go | 26 ++++++++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/leetcode/801-900/0845.Longest-Mountain-in-Array/README.md b/leetcode/801-900/0845.Longest-Mountain-in-Array/README.md index f660ee585..0febd07f0 100644 --- a/leetcode/801-900/0845.Longest-Mountain-in-Array/README.md +++ b/leetcode/801-900/0845.Longest-Mountain-in-Array/README.md @@ -1,28 +1,31 @@ # [845.Longest Mountain in Array][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 may recall that an array `arr` is a **mountain array** if and only if: + +- `arr.length >= 3` +- There exists some index `i` **(0-indexed)** with `0 < i < arr.length - 1` such that: + + - `arr[0] < arr[1] < ... < arr[i - 1] < arr[i]` + - `arr[i] > arr[i + 1] > ... > arr[arr.length - 1]` + +Given an integer array `arr`, return the length of the longest subarray, which is a mountain. Return `0` if there is no mountain subarray. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [2,1,4,7,3,2,5] +Output: 5 +Explanation: The largest mountain is [1,4,7,3,2] which has length 5. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Longest Mountain in Array -```go ``` - +Input: arr = [2,2,2] +Output: 0 +Explanation: There is no mountain. +``` ## 结语 diff --git a/leetcode/801-900/0845.Longest-Mountain-in-Array/Solution.go b/leetcode/801-900/0845.Longest-Mountain-in-Array/Solution.go index d115ccf5e..9d50bbcd1 100644 --- a/leetcode/801-900/0845.Longest-Mountain-in-Array/Solution.go +++ b/leetcode/801-900/0845.Longest-Mountain-in-Array/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int) int { + left := make([]int, len(arr)) + left[0] = 0 + for i := 1; i < len(arr); i++ { + if arr[i] > arr[i-1] { + left[i] = left[i-1] + 1 + } + } + ans := 0 + cnt := 0 + for i := len(arr) - 2; i > 0; i-- { + if arr[i] > arr[i+1] { + cnt++ + } else { + cnt = 0 + } + if left[i] != 0 && cnt != 0 { + ans = max(ans, left[i]+cnt) + } + } + if ans > 0 { + ans++ + } + return ans } diff --git a/leetcode/801-900/0845.Longest-Mountain-in-Array/Solution_test.go b/leetcode/801-900/0845.Longest-Mountain-in-Array/Solution_test.go index 14ff50eb4..13ad401f9 100644 --- a/leetcode/801-900/0845.Longest-Mountain-in-Array/Solution_test.go +++ b/leetcode/801-900/0845.Longest-Mountain-in-Array/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{2, 1, 4, 7, 3, 2, 5}, 5}, + {"TestCase2", []int{2, 2, 2}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c9bc31cbb2ee5503f6190b005a107fd3772e33c9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 7 Apr 2025 09:29:40 +0800 Subject: [PATCH 247/450] Add solution and test-cases for problem 1209 --- .../README.md | 35 +++++++++++------- .../Solution.go | 36 +++++++++++++++++-- .../Solution_test.go | 21 +++++------ 3 files changed, 67 insertions(+), 25 deletions(-) diff --git a/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/README.md b/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/README.md index 5e5851f4e..1cc94b7db 100644 --- a/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/README.md +++ b/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/README.md @@ -1,28 +1,37 @@ # [1209.Remove All Adjacent Duplicates in String II][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 a string `s` and an integer `k`, a `k` **duplicate removal** consists of choosing `k` adjacent and equal letters from `s` and removing them, causing the left and the right side of the deleted substring to concatenate together. + +We repeatedly make `k` **duplicate removals** on `s` until we no longer can. + +Return the final string after all such duplicate removals have been made. It is guaranteed that the answer is **unique**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abcd", k = 2 +Output: "abcd" +Explanation: There's nothing to delete. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Remove All Adjacent Duplicates in String II -```go ``` +Input: s = "deeedbbcccbdaa", k = 3 +Output: "aa" +Explanation: +First delete "eee" and "ccc", get "ddbbbdaa" +Then delete "bbb", get "dddaa" +Finally delete "ddd", get "aa" +``` + +**Example 3:** +``` +Input: s = "pbbcggttciiippooaais", k = 2 +Output: "ps" +``` ## 结语 diff --git a/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution.go b/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution.go index d115ccf5e..76aa7e7e4 100644 --- a/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution.go +++ b/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +type item1209 struct { + b byte + c int +} + +func Solution(s string, k int) string { + stack := make([]item1209, len(s)) + index := -1 + for i := 0; i < len(s); i++ { + if index == -1 { + index++ + stack[index] = item1209{b: s[i], c: 1} + continue + } + if s[i] == stack[index].b { + stack[index].c++ + if stack[index].c == k { + index-- + } + continue + } + index++ + stack[index] = item1209{b: s[i], c: 1} + } + buf := strings.Builder{} + for i := 0; i <= index; i++ { + for ; stack[i].c > 0; stack[i].c-- { + buf.WriteByte(stack[i].b) + } + } + + return buf.String() } diff --git a/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution_test.go b/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution_test.go index 14ff50eb4..5b39de035 100644 --- a/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution_test.go +++ b/leetcode/1201-1300/1209.Remove-All-Adjacent-Duplicates-in-String-II/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcd", 2, "abcd"}, + {"TestCase2", "deeedbbcccbdaa", 3, "aa"}, + {"TestCase3", "pbbcggttciiippooaais", 2, "ps"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a2061af207bbdcdab771a07eef50ce9f10a824e1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 8 Apr 2025 09:16:45 +0800 Subject: [PATCH 248/450] add 3301-3400 problems --- cmd/main.go | 1 + .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3312.Sorted-GCD-Pair-Queries/README.md | 32 +++++++++++++++ .../3312.Sorted-GCD-Pair-Queries/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3340.Check-Balanced-String/README.md | 32 +++++++++++++++ .../3340.Check-Balanced-String/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3351.Sum-of-Good-Subsequences/README.md | 32 +++++++++++++++ .../3351.Sum-of-Good-Subsequences/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3360.Stone-Removal-Game/README.md | 32 +++++++++++++++ .../3360.Stone-Removal-Game/Solution.go | 5 +++ .../3360.Stone-Removal-Game/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3366.Minimum-Array-Sum/README.md | 32 +++++++++++++++ .../3366.Minimum-Array-Sum/Solution.go | 5 +++ .../3366.Minimum-Array-Sum/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3379.Transformed-Array/README.md | 32 +++++++++++++++ .../3379.Transformed-Array/Solution.go | 5 +++ .../3379.Transformed-Array/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ 238 files changed, 6005 insertions(+) create mode 100755 leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/README.md create mode 100644 leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution.go create mode 100644 leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution_test.go create mode 100755 leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/README.md create mode 100644 leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution.go create mode 100644 leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution_test.go create mode 100755 leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/README.md create mode 100644 leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution.go create mode 100644 leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution_test.go create mode 100755 leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md create mode 100644 leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go create mode 100644 leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go create mode 100755 leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/README.md create mode 100644 leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution.go create mode 100644 leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution_test.go create mode 100755 leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/README.md create mode 100644 leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution.go create mode 100644 leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution_test.go create mode 100755 leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md create mode 100644 leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go create mode 100644 leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go create mode 100755 leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/README.md create mode 100644 leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution.go create mode 100644 leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution_test.go create mode 100755 leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go create mode 100755 leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/README.md create mode 100644 leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution.go create mode 100644 leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution_test.go create mode 100755 leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/README.md create mode 100644 leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution.go create mode 100644 leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution_test.go create mode 100755 leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/README.md create mode 100644 leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution.go create mode 100644 leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution_test.go create mode 100755 leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/README.md create mode 100644 leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution.go create mode 100644 leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution_test.go create mode 100755 leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/README.md create mode 100644 leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution.go create mode 100644 leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution_test.go create mode 100755 leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/README.md create mode 100644 leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution.go create mode 100644 leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution_test.go create mode 100755 leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md create mode 100644 leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go create mode 100644 leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go create mode 100755 leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/README.md create mode 100644 leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go create mode 100644 leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go create mode 100755 leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/README.md create mode 100644 leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution.go create mode 100644 leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution_test.go create mode 100755 leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/README.md create mode 100644 leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution.go create mode 100644 leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution_test.go create mode 100755 leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/README.md create mode 100644 leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution.go create mode 100644 leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution_test.go create mode 100755 leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/README.md create mode 100644 leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution.go create mode 100644 leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution_test.go create mode 100755 leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/README.md create mode 100644 leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution.go create mode 100644 leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution_test.go create mode 100755 leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/README.md create mode 100644 leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution.go create mode 100644 leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution_test.go create mode 100755 leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md create mode 100644 leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go create mode 100644 leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go create mode 100755 leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/README.md create mode 100644 leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution.go create mode 100644 leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution_test.go create mode 100755 leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/README.md create mode 100644 leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution.go create mode 100644 leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution_test.go create mode 100755 leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md create mode 100644 leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go create mode 100644 leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go create mode 100755 leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/README.md create mode 100644 leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution.go create mode 100644 leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution_test.go create mode 100755 leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md create mode 100644 leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go create mode 100644 leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go create mode 100755 leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/README.md create mode 100644 leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution.go create mode 100644 leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution_test.go create mode 100755 leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md create mode 100644 leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go create mode 100644 leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go create mode 100755 leetcode/3301-3400/3340.Check-Balanced-String/README.md create mode 100644 leetcode/3301-3400/3340.Check-Balanced-String/Solution.go create mode 100644 leetcode/3301-3400/3340.Check-Balanced-String/Solution_test.go create mode 100755 leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md create mode 100644 leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go create mode 100644 leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go create mode 100755 leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md create mode 100644 leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go create mode 100644 leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go create mode 100755 leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md create mode 100644 leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go create mode 100644 leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go create mode 100755 leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/README.md create mode 100644 leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution.go create mode 100644 leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution_test.go create mode 100755 leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md create mode 100644 leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go create mode 100644 leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go create mode 100755 leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md create mode 100644 leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go create mode 100644 leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go create mode 100755 leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/README.md create mode 100644 leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution.go create mode 100644 leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution_test.go create mode 100755 leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md create mode 100644 leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go create mode 100644 leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go create mode 100755 leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md create mode 100644 leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go create mode 100644 leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution_test.go create mode 100755 leetcode/3301-3400/3351.Sum-of-Good-Subsequences/README.md create mode 100644 leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution.go create mode 100644 leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution_test.go create mode 100755 leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/README.md create mode 100644 leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution.go create mode 100644 leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution_test.go create mode 100755 leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md create mode 100644 leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go create mode 100644 leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution_test.go create mode 100755 leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md create mode 100644 leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go create mode 100644 leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go create mode 100755 leetcode/3301-3400/3356.Zero-Array-Transformation-II/README.md create mode 100644 leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution.go create mode 100644 leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution_test.go create mode 100755 leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/README.md create mode 100644 leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution.go create mode 100644 leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution_test.go create mode 100755 leetcode/3301-3400/3360.Stone-Removal-Game/README.md create mode 100644 leetcode/3301-3400/3360.Stone-Removal-Game/Solution.go create mode 100644 leetcode/3301-3400/3360.Stone-Removal-Game/Solution_test.go create mode 100755 leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/README.md create mode 100644 leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution.go create mode 100644 leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution_test.go create mode 100755 leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md create mode 100644 leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go create mode 100644 leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go create mode 100755 leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/README.md create mode 100644 leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution.go create mode 100644 leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution_test.go create mode 100755 leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/README.md create mode 100644 leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution.go create mode 100644 leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution_test.go create mode 100755 leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/README.md create mode 100644 leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution.go create mode 100644 leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution_test.go create mode 100755 leetcode/3301-3400/3366.Minimum-Array-Sum/README.md create mode 100644 leetcode/3301-3400/3366.Minimum-Array-Sum/Solution.go create mode 100644 leetcode/3301-3400/3366.Minimum-Array-Sum/Solution_test.go create mode 100755 leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/README.md create mode 100644 leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution.go create mode 100644 leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution_test.go create mode 100755 leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md create mode 100644 leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go create mode 100644 leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go create mode 100755 leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/README.md create mode 100644 leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution.go create mode 100644 leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution_test.go create mode 100755 leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md create mode 100644 leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go create mode 100644 leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go create mode 100755 leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/README.md create mode 100644 leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution.go create mode 100644 leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution_test.go create mode 100755 leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/README.md create mode 100644 leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution.go create mode 100644 leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution_test.go create mode 100755 leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/README.md create mode 100644 leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution.go create mode 100644 leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution_test.go create mode 100755 leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/README.md create mode 100644 leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution.go create mode 100644 leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution_test.go create mode 100755 leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/README.md create mode 100644 leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution.go create mode 100644 leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution_test.go create mode 100755 leetcode/3301-3400/3379.Transformed-Array/README.md create mode 100644 leetcode/3301-3400/3379.Transformed-Array/Solution.go create mode 100644 leetcode/3301-3400/3379.Transformed-Array/Solution_test.go create mode 100755 leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/README.md create mode 100644 leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution.go create mode 100644 leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution_test.go create mode 100755 leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/README.md create mode 100644 leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution.go create mode 100644 leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution_test.go create mode 100755 leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/README.md create mode 100644 leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution.go create mode 100644 leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution_test.go create mode 100755 leetcode/3301-3400/3386.Button-with-Longest-Push-Time/README.md create mode 100644 leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution.go create mode 100644 leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution_test.go create mode 100755 leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/README.md create mode 100644 leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution.go create mode 100644 leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution_test.go create mode 100755 leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/README.md create mode 100644 leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution.go create mode 100644 leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution_test.go create mode 100755 leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/README.md create mode 100644 leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution.go create mode 100644 leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution_test.go create mode 100755 leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md create mode 100644 leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go create mode 100644 leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution_test.go create mode 100755 leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/README.md create mode 100644 leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution.go create mode 100644 leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution_test.go create mode 100755 leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/README.md create mode 100644 leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution.go create mode 100644 leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution_test.go create mode 100755 leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/README.md create mode 100644 leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution.go create mode 100644 leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution_test.go create mode 100755 leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/README.md create mode 100644 leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution.go create mode 100644 leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution_test.go create mode 100755 leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md create mode 100644 leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go create mode 100644 leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go create mode 100755 leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/README.md create mode 100644 leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution.go create mode 100644 leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution_test.go create mode 100755 leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/README.md create mode 100644 leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution.go create mode 100644 leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution_test.go diff --git a/cmd/main.go b/cmd/main.go index 4fbb86a96..7d5835f66 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -35,6 +35,7 @@ func main() { //leetcode.MakeDirFromTo(problems, 2901, 3000) //leetcode.MakeDirFromTo(problems, 3101, 3200) //leetcode.MakeDirFromTo(problems, 3201, 3300) + leetcode.MakeDirFromTo(problems, 3301, 3400) // leetcode.MakeDir(problems) diff --git a/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/README.md b/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/README.md new file mode 100755 index 000000000..08d28339b --- /dev/null +++ b/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/README.md @@ -0,0 +1,32 @@ +# [3301.Maximize the Total Height of Unique Towers][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize the Total Height of Unique Towers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-total-height-of-unique-towers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution.go b/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution_test.go b/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3301.Maximize-the-Total-Height-of-Unique-Towers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/README.md b/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/README.md new file mode 100755 index 000000000..f6e0cc32e --- /dev/null +++ b/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/README.md @@ -0,0 +1,32 @@ +# [3302.Find the Lexicographically Smallest Valid Sequence][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Lexicographically Smallest Valid Sequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-lexicographically-smallest-valid-sequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution.go b/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution_test.go b/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3302.Find-the-Lexicographically-Smallest-Valid-Sequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/README.md b/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/README.md new file mode 100755 index 000000000..b2835a0a2 --- /dev/null +++ b/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/README.md @@ -0,0 +1,32 @@ +# [3303.Find the Occurrence of First Almost Equal Substring][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Occurrence of First Almost Equal Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-occurrence-of-first-almost-equal-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution.go b/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution_test.go b/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3303.Find-the-Occurrence-of-First-Almost-Equal-Substring/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md new file mode 100755 index 000000000..be2a86e6e --- /dev/null +++ b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/README.md @@ -0,0 +1,32 @@ +# [3304.Find the K-th Character in String Game I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the K-th Character in String Game I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-k-th-character-in-string-game-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3304.Find-the-K-th-Character-in-String-Game-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/README.md b/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/README.md new file mode 100755 index 000000000..fb822fa47 --- /dev/null +++ b/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/README.md @@ -0,0 +1,32 @@ +# [3305.Count of Substrings Containing Every Vowel and K Consonants I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count of Substrings Containing Every Vowel and K Consonants I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-of-substrings-containing-every-vowel-and-k-consonants-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution.go b/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution_test.go b/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3305.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/README.md b/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/README.md new file mode 100755 index 000000000..c7cf130b0 --- /dev/null +++ b/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/README.md @@ -0,0 +1,32 @@ +# [3306.Count of Substrings Containing Every Vowel and K Consonants II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count of Substrings Containing Every Vowel and K Consonants II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-of-substrings-containing-every-vowel-and-k-consonants-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution.go b/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution_test.go b/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3306.Count-of-Substrings-Containing-Every-Vowel-and-K-Consonants-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md new file mode 100755 index 000000000..338708360 --- /dev/null +++ b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/README.md @@ -0,0 +1,32 @@ +# [3307.Find the K-th Character in String Game II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the K-th Character in String Game II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-k-th-character-in-string-game-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3307.Find-the-K-th-Character-in-String-Game-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/README.md b/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/README.md new file mode 100755 index 000000000..6ebc10daa --- /dev/null +++ b/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/README.md @@ -0,0 +1,32 @@ +# [3309.Maximum Possible Number by Binary Concatenation][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Possible Number by Binary Concatenation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-possible-number-by-binary-concatenation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution.go b/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution_test.go b/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3309.Maximum-Possible-Number-by-Binary-Concatenation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md b/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md new file mode 100755 index 000000000..4ae8edce8 --- /dev/null +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md @@ -0,0 +1,32 @@ +# [3310.Remove Methods From Project][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Remove Methods From Project +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-methods-from-project/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/README.md b/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/README.md new file mode 100755 index 000000000..4030a6d0f --- /dev/null +++ b/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/README.md @@ -0,0 +1,32 @@ +# [3311.Construct 2D Grid Matching Graph Layout][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Construct 2D Grid Matching Graph Layout +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-2d-grid-matching-graph-layout/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution.go b/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution_test.go b/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3311.Construct-2D-Grid-Matching-Graph-Layout/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/README.md b/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/README.md new file mode 100755 index 000000000..3770b97e7 --- /dev/null +++ b/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/README.md @@ -0,0 +1,32 @@ +# [3312.Sorted GCD Pair Queries][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sorted GCD Pair Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sorted-gcd-pair-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution.go b/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution_test.go b/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3312.Sorted-GCD-Pair-Queries/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/README.md b/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/README.md new file mode 100755 index 000000000..44f685f66 --- /dev/null +++ b/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/README.md @@ -0,0 +1,32 @@ +# [3314.Construct the Minimum Bitwise Array I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Construct the Minimum Bitwise Array I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-the-minimum-bitwise-array-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution.go b/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution_test.go b/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3314.Construct-the-Minimum-Bitwise-Array-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/README.md b/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/README.md new file mode 100755 index 000000000..3f9ee8f17 --- /dev/null +++ b/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/README.md @@ -0,0 +1,32 @@ +# [3315.Construct the Minimum Bitwise Array II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Construct the Minimum Bitwise Array II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-the-minimum-bitwise-array-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution.go b/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution_test.go b/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3315.Construct-the-Minimum-Bitwise-Array-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/README.md b/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/README.md new file mode 100755 index 000000000..a948aad71 --- /dev/null +++ b/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/README.md @@ -0,0 +1,32 @@ +# [3316.Find Maximum Removals From Source String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Maximum Removals From Source String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-maximum-removals-from-source-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution.go b/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution_test.go b/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3316.Find-Maximum-Removals-From-Source-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/README.md b/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/README.md new file mode 100755 index 000000000..4f07766e0 --- /dev/null +++ b/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/README.md @@ -0,0 +1,32 @@ +# [3317.Find the Number of Possible Ways for an Event][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Possible Ways for an Event +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-possible-ways-for-an-event/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution.go b/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution_test.go b/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3317.Find-the-Number-of-Possible-Ways-for-an-Event/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md new file mode 100755 index 000000000..4e5204fb8 --- /dev/null +++ b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/README.md @@ -0,0 +1,32 @@ +# [3318.Find X-Sum of All K-Long Subarrays I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find X-Sum of All K-Long Subarrays I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-x-sum-of-all-k-long-subarrays-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3318.Find-X-Sum-of-All-K-Long-Subarrays-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/README.md b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/README.md new file mode 100755 index 000000000..9bbdbc933 --- /dev/null +++ b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/README.md @@ -0,0 +1,32 @@ +# [3319.K-th Largest Perfect Subtree Size in Binary Tree][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +K-th Largest Perfect Subtree Size in Binary Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/k-th-largest-perfect-subtree-size-in-binary-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3319.K-th-Largest-Perfect-Subtree-Size-in-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/README.md b/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/README.md new file mode 100755 index 000000000..11daa4b29 --- /dev/null +++ b/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/README.md @@ -0,0 +1,32 @@ +# [3320.Count The Number of Winning Sequences][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count The Number of Winning Sequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-winning-sequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution.go b/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution_test.go b/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3320.Count-The-Number-of-Winning-Sequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/README.md b/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/README.md new file mode 100755 index 000000000..a0d20fb01 --- /dev/null +++ b/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/README.md @@ -0,0 +1,32 @@ +# [3321.Find X-Sum of All K-Long Subarrays II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find X-Sum of All K-Long Subarrays II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-x-sum-of-all-k-long-subarrays-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution.go b/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution_test.go b/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3321.Find-X-Sum-of-All-K-Long-Subarrays-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/README.md b/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/README.md new file mode 100755 index 000000000..1bd165161 --- /dev/null +++ b/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/README.md @@ -0,0 +1,32 @@ +# [3324.Find the Sequence of Strings Appeared on the Screen][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Sequence of Strings Appeared on the Screen +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-sequence-of-strings-appeared-on-the-screen/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution.go b/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution_test.go b/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3324.Find-the-Sequence-of-Strings-Appeared-on-the-Screen/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/README.md b/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/README.md new file mode 100755 index 000000000..0493cb391 --- /dev/null +++ b/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/README.md @@ -0,0 +1,32 @@ +# [3325.Count Substrings With K-Frequency Characters I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Substrings With K-Frequency Characters I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-substrings-with-k-frequency-characters-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution.go b/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution_test.go b/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3325.Count-Substrings-With-K-Frequency-Characters-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/README.md b/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/README.md new file mode 100755 index 000000000..b6e3115d8 --- /dev/null +++ b/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/README.md @@ -0,0 +1,32 @@ +# [3326.Minimum Division Operations to Make Array Non Decreasing][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Division Operations to Make Array Non Decreasing +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-division-operations-to-make-array-non-decreasing/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution.go b/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution_test.go b/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3326.Minimum-Division-Operations-to-Make-Array-Non-Decreasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/README.md b/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/README.md new file mode 100755 index 000000000..e243b1df9 --- /dev/null +++ b/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/README.md @@ -0,0 +1,32 @@ +# [3327.Check if DFS Strings Are Palindromes][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if DFS Strings Are Palindromes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-dfs-strings-are-palindromes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution.go b/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution_test.go b/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3327.Check-if-DFS-Strings-Are-Palindromes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md new file mode 100755 index 000000000..21f9634dc --- /dev/null +++ b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/README.md @@ -0,0 +1,32 @@ +# [3330.Find the Original Typed String I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Original Typed String I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-original-typed-string-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3330.Find-the-Original-Typed-String-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/README.md b/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/README.md new file mode 100755 index 000000000..34151aa22 --- /dev/null +++ b/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/README.md @@ -0,0 +1,32 @@ +# [3331.Find Subtree Sizes After Changes][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Subtree Sizes After Changes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-subtree-sizes-after-changes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution.go b/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution_test.go b/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3331.Find-Subtree-Sizes-After-Changes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/README.md b/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/README.md new file mode 100755 index 000000000..d9d4bec31 --- /dev/null +++ b/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/README.md @@ -0,0 +1,32 @@ +# [3332.Maximum Points Tourist Can Earn][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Points Tourist Can Earn +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-points-tourist-can-earn/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution.go b/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution_test.go b/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3332.Maximum-Points-Tourist-Can-Earn/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md new file mode 100755 index 000000000..bf77b439d --- /dev/null +++ b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/README.md @@ -0,0 +1,32 @@ +# [3333.Find the Original Typed String II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Original Typed String II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-original-typed-string-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3333.Find-the-Original-Typed-String-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/README.md b/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/README.md new file mode 100755 index 000000000..07d053129 --- /dev/null +++ b/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/README.md @@ -0,0 +1,32 @@ +# [3334.Find the Maximum Factor Score of Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Maximum Factor Score of Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-maximum-factor-score-of-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution.go b/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution_test.go b/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3334.Find-the-Maximum-Factor-Score-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md new file mode 100755 index 000000000..9f43350bb --- /dev/null +++ b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md @@ -0,0 +1,32 @@ +# [3335.Total Characters in String After Transformations I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Total Characters in String After Transformations I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/total-characters-in-string-after-transformations-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/README.md b/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/README.md new file mode 100755 index 000000000..e66525e6b --- /dev/null +++ b/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/README.md @@ -0,0 +1,32 @@ +# [3336.Find the Number of Subsequences With Equal GCD][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Subsequences With Equal GCD +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-subsequences-with-equal-gcd/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution.go b/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution_test.go b/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3336.Find-the-Number-of-Subsequences-With-Equal-GCD/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md new file mode 100755 index 000000000..56158ae48 --- /dev/null +++ b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md @@ -0,0 +1,32 @@ +# [3337.Total Characters in String After Transformations II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Total Characters in String After Transformations II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/total-characters-in-string-after-transformations-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3340.Check-Balanced-String/README.md b/leetcode/3301-3400/3340.Check-Balanced-String/README.md new file mode 100755 index 000000000..f4245fa69 --- /dev/null +++ b/leetcode/3301-3400/3340.Check-Balanced-String/README.md @@ -0,0 +1,32 @@ +# [3340.Check Balanced String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check Balanced String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-balanced-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3340.Check-Balanced-String/Solution.go b/leetcode/3301-3400/3340.Check-Balanced-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3340.Check-Balanced-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3340.Check-Balanced-String/Solution_test.go b/leetcode/3301-3400/3340.Check-Balanced-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3340.Check-Balanced-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md new file mode 100755 index 000000000..29935036c --- /dev/null +++ b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md @@ -0,0 +1,32 @@ +# [3341.Find Minimum Time to Reach Last Room I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Minimum Time to Reach Last Room I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-minimum-time-to-reach-last-room-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md new file mode 100755 index 000000000..c2bf27985 --- /dev/null +++ b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md @@ -0,0 +1,32 @@ +# [3342.Find Minimum Time to Reach Last Room II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Minimum Time to Reach Last Room II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-minimum-time-to-reach-last-room-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md new file mode 100755 index 000000000..5758e85b3 --- /dev/null +++ b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md @@ -0,0 +1,32 @@ +# [3343.Count Number of Balanced Permutations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Balanced Permutations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-balanced-permutations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/README.md b/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/README.md new file mode 100755 index 000000000..0e0efdf49 --- /dev/null +++ b/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/README.md @@ -0,0 +1,32 @@ +# [3345.Smallest Divisible Digit Product I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Divisible Digit Product I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-divisible-digit-product-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution.go b/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution_test.go b/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3345.Smallest-Divisible-Digit-Product-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md new file mode 100755 index 000000000..7ac632cae --- /dev/null +++ b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/README.md @@ -0,0 +1,32 @@ +# [3346.Maximum Frequency of an Element After Performing Operations I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Frequency of an Element After Performing Operations I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-frequency-of-an-element-after-performing-operations-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3346.Maximum-Frequency-of-an-Element-After-Performing-Operations-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md new file mode 100755 index 000000000..b5e3be604 --- /dev/null +++ b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/README.md @@ -0,0 +1,32 @@ +# [3347.Maximum Frequency of an Element After Performing Operations II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Frequency of an Element After Performing Operations II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-frequency-of-an-element-after-performing-operations-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3347.Maximum-Frequency-of-an-Element-After-Performing-Operations-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/README.md b/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/README.md new file mode 100755 index 000000000..a53812126 --- /dev/null +++ b/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/README.md @@ -0,0 +1,32 @@ +# [3348.Smallest Divisible Digit Product II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Divisible Digit Product II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-divisible-digit-product-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution.go b/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution_test.go b/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3348.Smallest-Divisible-Digit-Product-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md new file mode 100755 index 000000000..28390af4c --- /dev/null +++ b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/README.md @@ -0,0 +1,32 @@ +# [3349.Adjacent Increasing Subarrays Detection I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Adjacent Increasing Subarrays Detection I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/adjacent-increasing-subarrays-detection-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3349.Adjacent-Increasing-Subarrays-Detection-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md new file mode 100755 index 000000000..8c92bb31e --- /dev/null +++ b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/README.md @@ -0,0 +1,32 @@ +# [3350.Adjacent Increasing Subarrays Detection II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Adjacent Increasing Subarrays Detection II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/adjacent-increasing-subarrays-detection-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution_test.go b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3350.Adjacent-Increasing-Subarrays-Detection-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/README.md b/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/README.md new file mode 100755 index 000000000..f634995b9 --- /dev/null +++ b/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/README.md @@ -0,0 +1,32 @@ +# [3351.Sum of Good Subsequences][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Good Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-good-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution.go b/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution_test.go b/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3351.Sum-of-Good-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/README.md b/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/README.md new file mode 100755 index 000000000..601abbe60 --- /dev/null +++ b/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/README.md @@ -0,0 +1,32 @@ +# [3352.Count K-Reducible Numbers Less Than N][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count K-Reducible Numbers Less Than N +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-k-reducible-numbers-less-than-n/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution.go b/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution_test.go b/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3352.Count-K-Reducible-Numbers-Less-Than-N/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md new file mode 100755 index 000000000..c47f9d4f9 --- /dev/null +++ b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/README.md @@ -0,0 +1,32 @@ +# [3354.Make Array Elements Equal to Zero][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Make Array Elements Equal to Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-array-elements-equal-to-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution_test.go b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3354.Make-Array-Elements-Equal-to-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md new file mode 100755 index 000000000..ed9347afb --- /dev/null +++ b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md @@ -0,0 +1,32 @@ +# [3355.Zero Array Transformation I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Zero Array Transformation I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/zero-array-transformation-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3356.Zero-Array-Transformation-II/README.md b/leetcode/3301-3400/3356.Zero-Array-Transformation-II/README.md new file mode 100755 index 000000000..9f60d7b59 --- /dev/null +++ b/leetcode/3301-3400/3356.Zero-Array-Transformation-II/README.md @@ -0,0 +1,32 @@ +# [3356.Zero Array Transformation II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Zero Array Transformation II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/zero-array-transformation-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution.go b/leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution_test.go b/leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3356.Zero-Array-Transformation-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/README.md b/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/README.md new file mode 100755 index 000000000..e0dadf435 --- /dev/null +++ b/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/README.md @@ -0,0 +1,32 @@ +# [3357.Minimize the Maximum Adjacent Element Difference][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize the Maximum Adjacent Element Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-the-maximum-adjacent-element-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution.go b/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution_test.go b/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3357.Minimize-the-Maximum-Adjacent-Element-Difference/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3360.Stone-Removal-Game/README.md b/leetcode/3301-3400/3360.Stone-Removal-Game/README.md new file mode 100755 index 000000000..4fd99960d --- /dev/null +++ b/leetcode/3301-3400/3360.Stone-Removal-Game/README.md @@ -0,0 +1,32 @@ +# [3360.Stone Removal Game][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stone Removal Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stone-removal-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3360.Stone-Removal-Game/Solution.go b/leetcode/3301-3400/3360.Stone-Removal-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3360.Stone-Removal-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3360.Stone-Removal-Game/Solution_test.go b/leetcode/3301-3400/3360.Stone-Removal-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3360.Stone-Removal-Game/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/README.md b/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/README.md new file mode 100755 index 000000000..ceb97f376 --- /dev/null +++ b/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/README.md @@ -0,0 +1,32 @@ +# [3361.Shift Distance Between Two Strings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Shift Distance Between Two Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shift-distance-between-two-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution.go b/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution_test.go b/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3361.Shift-Distance-Between-Two-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md new file mode 100755 index 000000000..fb5595409 --- /dev/null +++ b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md @@ -0,0 +1,32 @@ +# [3362.Zero Array Transformation III][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Zero Array Transformation III +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/zero-array-transformation-iii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/README.md b/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/README.md new file mode 100755 index 000000000..ecf357498 --- /dev/null +++ b/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/README.md @@ -0,0 +1,32 @@ +# [3363.Find the Maximum Number of Fruits Collected][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Maximum Number of Fruits Collected +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-maximum-number-of-fruits-collected/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution.go b/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution_test.go b/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3363.Find-the-Maximum-Number-of-Fruits-Collected/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/README.md b/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/README.md new file mode 100755 index 000000000..e999a834f --- /dev/null +++ b/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/README.md @@ -0,0 +1,32 @@ +# [3364.Minimum Positive Sum Subarray ][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Positive Sum Subarray +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-positive-sum-subarray/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution.go b/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution_test.go b/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3364.Minimum-Positive-Sum-Subarray-/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/README.md b/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/README.md new file mode 100755 index 000000000..a42008c38 --- /dev/null +++ b/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/README.md @@ -0,0 +1,32 @@ +# [3365.Rearrange K Substrings to Form Target String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Rearrange K Substrings to Form Target String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rearrange-k-substrings-to-form-target-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution.go b/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution_test.go b/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3365.Rearrange-K-Substrings-to-Form-Target-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3366.Minimum-Array-Sum/README.md b/leetcode/3301-3400/3366.Minimum-Array-Sum/README.md new file mode 100755 index 000000000..eb086fea5 --- /dev/null +++ b/leetcode/3301-3400/3366.Minimum-Array-Sum/README.md @@ -0,0 +1,32 @@ +# [3366.Minimum Array Sum][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Array Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-array-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3366.Minimum-Array-Sum/Solution.go b/leetcode/3301-3400/3366.Minimum-Array-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3366.Minimum-Array-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3366.Minimum-Array-Sum/Solution_test.go b/leetcode/3301-3400/3366.Minimum-Array-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3366.Minimum-Array-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/README.md b/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/README.md new file mode 100755 index 000000000..bf1248f1f --- /dev/null +++ b/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/README.md @@ -0,0 +1,32 @@ +# [3367.Maximize Sum of Weights after Edge Removals][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Sum of Weights after Edge Removals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-sum-of-weights-after-edge-removals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution.go b/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution_test.go b/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3367.Maximize-Sum-of-Weights-after-Edge-Removals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md new file mode 100755 index 000000000..5035313d8 --- /dev/null +++ b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/README.md @@ -0,0 +1,32 @@ +# [3370.Smallest Number With All Set Bits][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Number With All Set Bits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-number-with-all-set-bits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3370.Smallest-Number-With-All-Set-Bits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/README.md b/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/README.md new file mode 100755 index 000000000..c4712022a --- /dev/null +++ b/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [3371.Identify the Largest Outlier in an Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Identify the Largest Outlier in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/identify-the-largest-outlier-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution.go b/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution_test.go b/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3371.Identify-the-Largest-Outlier-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md new file mode 100755 index 000000000..ec9b58f67 --- /dev/null +++ b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/README.md @@ -0,0 +1,32 @@ +# [3372.Maximize the Number of Target Nodes After Connecting Trees I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize the Number of Target Nodes After Connecting Trees I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-number-of-target-nodes-after-connecting-trees-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/README.md b/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/README.md new file mode 100755 index 000000000..0a59acd4c --- /dev/null +++ b/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/README.md @@ -0,0 +1,32 @@ +# [3373.Maximize the Number of Target Nodes After Connecting Trees II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize the Number of Target Nodes After Connecting Trees II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-number-of-target-nodes-after-connecting-trees-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution.go b/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution_test.go b/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3373.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/README.md b/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/README.md new file mode 100755 index 000000000..4e08aefda --- /dev/null +++ b/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/README.md @@ -0,0 +1,32 @@ +# [3375.Minimum Operations to Make Array Values Equal to K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Array Values Equal to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-array-values-equal-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution.go b/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution_test.go b/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3375.Minimum-Operations-to-Make-Array-Values-Equal-to-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/README.md b/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/README.md new file mode 100755 index 000000000..8ebae9b00 --- /dev/null +++ b/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/README.md @@ -0,0 +1,32 @@ +# [3376.Minimum Time to Break Locks I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Break Locks I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-break-locks-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution.go b/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution_test.go b/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3376.Minimum-Time-to-Break-Locks-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/README.md b/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/README.md new file mode 100755 index 000000000..28c017d8d --- /dev/null +++ b/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/README.md @@ -0,0 +1,32 @@ +# [3377.Digit Operations to Make Two Integers Equal][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Digit Operations to Make Two Integers Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/digit-operations-to-make-two-integers-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution.go b/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution_test.go b/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3377.Digit-Operations-to-Make-Two-Integers-Equal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/README.md b/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/README.md new file mode 100755 index 000000000..90b43eb73 --- /dev/null +++ b/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/README.md @@ -0,0 +1,32 @@ +# [3378.Count Connected Components in LCM Graph][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Connected Components in LCM Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-connected-components-in-lcm-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution.go b/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution_test.go b/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3378.Count-Connected-Components-in-LCM-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3379.Transformed-Array/README.md b/leetcode/3301-3400/3379.Transformed-Array/README.md new file mode 100755 index 000000000..11095a992 --- /dev/null +++ b/leetcode/3301-3400/3379.Transformed-Array/README.md @@ -0,0 +1,32 @@ +# [3379.Transformed Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Transformed Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/transformed-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3379.Transformed-Array/Solution.go b/leetcode/3301-3400/3379.Transformed-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3379.Transformed-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3379.Transformed-Array/Solution_test.go b/leetcode/3301-3400/3379.Transformed-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3379.Transformed-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/README.md b/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/README.md new file mode 100755 index 000000000..6fc6b26e2 --- /dev/null +++ b/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/README.md @@ -0,0 +1,32 @@ +# [3380.Maximum Area Rectangle With Point Constraints I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Area Rectangle With Point Constraints I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-area-rectangle-with-point-constraints-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution.go b/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution_test.go b/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3380.Maximum-Area-Rectangle-With-Point-Constraints-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/README.md b/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/README.md new file mode 100755 index 000000000..65f0edc1e --- /dev/null +++ b/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/README.md @@ -0,0 +1,32 @@ +# [3381.Maximum Subarray Sum With Length Divisible by K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Subarray Sum With Length Divisible by K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-subarray-sum-with-length-divisible-by-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution.go b/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution_test.go b/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3381.Maximum-Subarray-Sum-With-Length-Divisible-by-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/README.md b/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/README.md new file mode 100755 index 000000000..da4eae100 --- /dev/null +++ b/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/README.md @@ -0,0 +1,32 @@ +# [3382.Maximum Area Rectangle With Point Constraints II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Area Rectangle With Point Constraints II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-area-rectangle-with-point-constraints-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution.go b/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution_test.go b/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3382.Maximum-Area-Rectangle-With-Point-Constraints-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/README.md b/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/README.md new file mode 100755 index 000000000..0a4a748a3 --- /dev/null +++ b/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/README.md @@ -0,0 +1,32 @@ +# [3386.Button with Longest Push Time][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Button with Longest Push Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/button-with-longest-push-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution.go b/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution_test.go b/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3386.Button-with-Longest-Push-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/README.md b/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/README.md new file mode 100755 index 000000000..536cb7d77 --- /dev/null +++ b/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/README.md @@ -0,0 +1,32 @@ +# [3387.Maximize Amount After Two Days of Conversions][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Amount After Two Days of Conversions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-amount-after-two-days-of-conversions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution.go b/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution_test.go b/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3387.Maximize-Amount-After-Two-Days-of-Conversions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/README.md b/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/README.md new file mode 100755 index 000000000..b6d3b8508 --- /dev/null +++ b/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [3388.Count Beautiful Splits in an Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Beautiful Splits in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-beautiful-splits-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution.go b/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution_test.go b/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3388.Count-Beautiful-Splits-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/README.md b/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/README.md new file mode 100755 index 000000000..8817d6601 --- /dev/null +++ b/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/README.md @@ -0,0 +1,32 @@ +# [3389.Minimum Operations to Make Character Frequencies Equal][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Character Frequencies Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-character-frequencies-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution.go b/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution_test.go b/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3389.Minimum-Operations-to-Make-Character-Frequencies-Equal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md new file mode 100755 index 000000000..c4ee87319 --- /dev/null +++ b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md @@ -0,0 +1,32 @@ +# [3392.Count Subarrays of Length Three With a Condition][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Subarrays of Length Three With a Condition +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-subarrays-of-length-three-with-a-condition/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution_test.go b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/README.md b/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/README.md new file mode 100755 index 000000000..ee6e0e6c2 --- /dev/null +++ b/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/README.md @@ -0,0 +1,32 @@ +# [3393.Count Paths With the Given XOR Value][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Paths With the Given XOR Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-paths-with-the-given-xor-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution.go b/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution_test.go b/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3393.Count-Paths-With-the-Given-XOR-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/README.md b/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/README.md new file mode 100755 index 000000000..4e2deeff2 --- /dev/null +++ b/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/README.md @@ -0,0 +1,32 @@ +# [3394.Check if Grid can be Cut into Sections][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Grid can be Cut into Sections +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-grid-can-be-cut-into-sections/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution.go b/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution_test.go b/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3394.Check-if-Grid-can-be-Cut-into-Sections/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/README.md b/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/README.md new file mode 100755 index 000000000..5b7a9ee14 --- /dev/null +++ b/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/README.md @@ -0,0 +1,32 @@ +# [3395.Subsequences with a Unique Middle Mode I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Subsequences with a Unique Middle Mode I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/subsequences-with-a-unique-middle-mode-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution.go b/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution_test.go b/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3395.Subsequences-with-a-Unique-Middle-Mode-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/README.md b/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/README.md new file mode 100755 index 000000000..9a137df67 --- /dev/null +++ b/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/README.md @@ -0,0 +1,32 @@ +# [3396.Minimum Number of Operations to Make Elements in Array Distinct][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Operations to Make Elements in Array Distinct +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-elements-in-array-distinct/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution.go b/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution_test.go b/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3396.Minimum-Number-of-Operations-to-Make-Elements-in-Array-Distinct/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md new file mode 100755 index 000000000..2f32e8de5 --- /dev/null +++ b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/README.md @@ -0,0 +1,32 @@ +# [3397.Maximum Number of Distinct Elements After Operations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Distinct Elements After Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-distinct-elements-after-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3397.Maximum-Number-of-Distinct-Elements-After-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/README.md b/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/README.md new file mode 100755 index 000000000..d0c06b2dd --- /dev/null +++ b/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/README.md @@ -0,0 +1,32 @@ +# [3398.Smallest Substring With Identical Characters I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Substring With Identical Characters I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-substring-with-identical-characters-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution.go b/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution_test.go b/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3398.Smallest-Substring-With-Identical-Characters-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/README.md b/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/README.md new file mode 100755 index 000000000..28bcae4f7 --- /dev/null +++ b/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/README.md @@ -0,0 +1,32 @@ +# [3399.Smallest Substring With Identical Characters II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Substring With Identical Characters II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-substring-with-identical-characters-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution.go b/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution_test.go b/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3301-3400/3399.Smallest-Substring-With-Identical-Characters-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From e51d3816f4952ef7021aa12908085ab01ae3c8c5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 10 Apr 2025 22:43:22 +0800 Subject: [PATCH 249/450] Add solution and test-cases for problem 2999 --- .../README.md | 37 ++++++++----- .../Solution.go | 54 ++++++++++++++++++- .../Solution_test.go | 24 +++++---- 3 files changed, 89 insertions(+), 26 deletions(-) diff --git a/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md index d3f7f55d0..5e06981df 100755 --- a/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md +++ b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md @@ -1,28 +1,39 @@ # [2999.Count the Number of Powerful Integers][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 three integers `start`, `finish`, and `limit`. You are also given a **0-indexed** string `s` representing a **positive** integer. + +A **positive** integer `x` is called **powerful** if it ends with `s` (in other words, `s` is a **suffix** of `x`) and each digit in `x` is at most `limit`. + +Return the **total** number of powerful integers in the range `[start..finish]`. + +A string `x` is a suffix of a string `y` if and only if `x` is a substring of `y` that starts from some index (**including** `0`) in `y` and extends to the index `y.length - 1`. For example, `25` is a suffix of `5125` whereas `512` is not. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: start = 1, finish = 6000, limit = 4, s = "124" +Output: 5 +Explanation: The powerful integers in the range [1..6000] are 124, 1124, 2124, 3124, and, 4124. All these integers have each digit <= 4, and "124" as a suffix. Note that 5124 is not a powerful integer because the first digit is 5 which is greater than 4. +It can be shown that there are only 5 powerful integers in this range. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count the Number of Powerful Integers -```go ``` +Input: start = 15, finish = 215, limit = 6, s = "10" +Output: 2 +Explanation: The powerful integers in the range [15..215] are 110 and 210. All these integers have each digit <= 6, and "10" as a suffix. +It can be shown that there are only 2 powerful integers in this range. +``` + +**Example 3:** +``` +Input: start = 1000, finish = 2000, limit = 4, s = "3000" +Output: 0 +Explanation: All integers in the range [1000..2000] are smaller than 3000, hence "3000" cannot be a suffix of any integer in this range. +``` ## 结语 diff --git a/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution.go b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution.go index d115ccf5e..89ef79084 100644 --- a/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution.go +++ b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution.go @@ -1,5 +1,55 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "strings" +) + +func Solution(start int64, finish int64, limit int, s string) int64 { + low := fmt.Sprintf("%d", start) + high := fmt.Sprintf("%d", finish) + n := len(high) + low = strings.Repeat("0", n-len(low)) + low // align digits + pre_len := n - len(s) // prefix length + memo := make([]int64, n) + for i := range memo { + memo[i] = -1 + } + + var dfs func(int, bool, bool) int64 + dfs = func(i int, limit_low, limit_high bool) int64 { + // recursive boundary + if i == n { + return 1 + } + if !limit_low && !limit_high && memo[i] != -1 { + return memo[i] + } + lo := 0 + if limit_low { + lo = int(low[i] - '0') + } + hi := 9 + if limit_high { + hi = int(high[i] - '0') + } + + var res int64 = 0 + if i < pre_len { + for digit := lo; digit <= min(hi, limit); digit++ { + res += dfs(i+1, limit_low && digit == lo, limit_high && digit == hi) + } + } else { + x := int(s[i-pre_len] - '0') + if lo <= x && x <= min(hi, limit) { + res = dfs(i+1, limit_low && x == lo, limit_high && x == hi) + } + } + + if !limit_low && !limit_high { + memo[i] = res + } + return res + } + return dfs(0, true, true) } diff --git a/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution_test.go b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution_test.go index 14ff50eb4..4c1a9aa93 100644 --- a/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution_test.go +++ b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + start, finish int64 + limit int + s string + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 6000, 4, "124", 5}, + {"TestCase2", 15, 215, 6, "10", 2}, + {"TestCase3", 1000, 2000, 4, "3000", 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.start, c.finish, c.limit, c.s) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.start, c.finish, c.limit, c.s) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 74f98b8b80421ba9eb88c27616e1082534763cbb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 11 Apr 2025 09:09:59 +0800 Subject: [PATCH 250/450] Add solution and test-cases for problem 2843 --- .../2843.Count-Symmetric-Integers/README.md | 31 +++++++++++++++ .../2843.Count-Symmetric-Integers/Solution.go | 28 ++++++++++++++ .../Solution_test.go | 38 +++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 leetcode/2801-2900/2843.Count-Symmetric-Integers/README.md create mode 100755 leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution.go create mode 100755 leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution_test.go diff --git a/leetcode/2801-2900/2843.Count-Symmetric-Integers/README.md b/leetcode/2801-2900/2843.Count-Symmetric-Integers/README.md new file mode 100644 index 000000000..9e78277fb --- /dev/null +++ b/leetcode/2801-2900/2843.Count-Symmetric-Integers/README.md @@ -0,0 +1,31 @@ +# [2843.Count Symmetric Integers][title] + +## Description +You are given two positive integers `low` and `high`. + +An integer `x` consisting of `2 * n` digits is **symmetric** if the sum of the first `n` digits of `x` is equal to the sum of the last `n` digits of `x`. Numbers with an odd number of digits are never symmetric. + +Return the **number of symmetric** integers in the range `[low, high]`. + +**Example 1:** + +``` +Input: low = 1, high = 100 +Output: 9 +Explanation: There are 9 symmetric integers between 1 and 100: 11, 22, 33, 44, 55, 66, 77, 88, and 99. +``` + +**Example 2:** + +``` +Input: low = 1200, high = 1230 +Output: 4 +Explanation: There are 4 symmetric integers between 1200 and 1230: 1203, 1212, 1221, and 1230. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-symmetric-integers +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution.go b/leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution.go new file mode 100755 index 000000000..90e77f01c --- /dev/null +++ b/leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution.go @@ -0,0 +1,28 @@ +package Solution + +import "fmt" + +func Solution(low int, high int) int { + var ok func(int) bool + ok = func(n int) bool { + s := fmt.Sprintf("%d", n) + l := len(s) + if l&1 == 1 { + return false + } + // 1 2, 3, 4 + left, right := 0, 0 + for start, end := 0, l-1; start < end; start, end = start+1, end-1 { + left += int(s[start] - '0') + right += int(s[end] - '0') + } + return left == right + } + cnt := 0 + for i := low; i <= high; i++ { + if ok(i) { + cnt++ + } + } + return cnt +} diff --git a/leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution_test.go b/leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution_test.go new file mode 100755 index 000000000..d5b13173c --- /dev/null +++ b/leetcode/2801-2900/2843.Count-Symmetric-Integers/Solution_test.go @@ -0,0 +1,38 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + low, high int + expect int + }{ + {"TestCase1", 1, 100, 9}, + {"TestCase2", 1200, 1230, 4}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.low, c.high) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.low, c.high) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 0808ba475f38e327c692609604d95a6cc03a5912 Mon Sep 17 00:00:00 2001 From: Boris Date: Fri, 11 Apr 2025 17:11:01 +0800 Subject: [PATCH 251/450] update go.mod --- go.mod | 25 ++++++++++---------- go.sum | 74 ++++++++++++++++++++++++++++++---------------------------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/go.mod b/go.mod index 13eac0093..4c57435d4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module awesome-golang-algorithm -go 1.24.0 +go 1.24 require ( github.com/imroc/req/v3 v3.50.0 @@ -9,26 +9,27 @@ require ( require ( github.com/andybalholm/brotli v1.1.1 // indirect - github.com/cloudflare/circl v1.6.0 // indirect + github.com/cloudflare/circl v1.6.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e // indirect + github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/klauspost/compress v1.18.0 // indirect - github.com/onsi/ginkgo/v2 v2.23.3 // indirect + github.com/onsi/ginkgo/v2 v2.23.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect github.com/quic-go/quic-go v0.50.1 // indirect github.com/refraction-networking/utls v1.6.7 // indirect - go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect + go.uber.org/mock v0.5.1 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect golang.org/x/mod v0.24.0 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/tools v0.31.0 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/text v0.24.0 // indirect + golang.org/x/tools v0.32.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 663d570ce..0ce8fd2f0 100644 --- a/go.sum +++ b/go.sum @@ -1,20 +1,17 @@ github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= -github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk= -github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= +github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7 h1:+J3r2e8+RsmN3vKfo75g0YSY61ms37qzPglu4p0sGro= -github.com/google/pprof v0.0.0-20250302191652-9094ed2288e7/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -24,18 +21,20 @@ github.com/imroc/req/v3 v3.50.0 h1:n3BVnZiTRpvkN5T1IB79LC/THhFU9iXksNRMH4ZNVaY= github.com/imroc/req/v3 v3.50.0/go.mod h1:tsOk8K7zI6cU4xu/VWCZVtq9Djw9IWm4MslKzme5woU= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/onsi/ginkgo/v2 v2.23.0 h1:FA1xjp8ieYDzlgS5ABTpdUDB7wtngggONc8a7ku2NqQ= -github.com/onsi/ginkgo/v2 v2.23.0/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= -github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= -github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= -github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= -github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= +github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= +github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= +github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.50.0 h1:3H/ld1pa3CYhkcc20TPIyG1bNsdhn9qZBGN3b9/UyUo= -github.com/quic-go/quic-go v0.50.0/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= github.com/quic-go/quic-go v0.50.1 h1:unsgjFIUqW8a2oopkY7YNONpV1gYND6Nt9hnt1PN94Q= github.com/quic-go/quic-go v0.50.1/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= @@ -44,29 +43,32 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= -go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +go.uber.org/mock v0.5.1 h1:ASgazW/qBmR+A32MYFDB6E2POoTgOwT509VP0CT/fjs= +go.uber.org/mock v0.5.1/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= -google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= -google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= +golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 4545269aba06fa2355f3f604b0090a9a955c986f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 13 Apr 2025 20:00:10 +0800 Subject: [PATCH 252/450] Add solution and test-cases for problem 3341 --- .../README.md | 47 +++++++++++---- .../Solution.go | 60 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 101 insertions(+), 20 deletions(-) diff --git a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md index 29935036c..9ece24468 100755 --- a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md +++ b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/README.md @@ -1,28 +1,51 @@ # [3341.Find Minimum Time to Reach Last Room I][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 +There is a dungeon with `n x m` rooms arranged as a grid. + +You are given a 2D array `moveTime` of size `n x m`, where `moveTime[i][j]` represents the **minimum** time in seconds when you can **start moving** to that room. You start from the room `(0, 0)` at time `t = 0` and can move to an **adjacent** room. Moving between adjacent rooms takes exactly one second. + +Return the **minimum** time to reach the room `(n - 1, m - 1)`. + +Two rooms are **adjacent** if they share a common wall, either horizontally or vertically. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: moveTime = [[0,4],[4,4]] + +Output: 6 + +Explanation: + +The minimum time required is 6 seconds. + +At time t == 4, move from room (0, 0) to room (1, 0) in one second. +At time t == 5, move from room (1, 0) to room (1, 1) in one second. +``` + +**Example 2:** + ``` +Input: moveTime = [[0,4],[4,4]] + +Output: 6 -## 题意 -> ... +Explanation: -## 题解 +The minimum time required is 6 seconds. -### 思路1 -> ... -Find Minimum Time to Reach Last Room I -```go +At time t == 4, move from room (0, 0) to room (1, 0) in one second. +At time t == 5, move from room (1, 0) to room (1, 1) in one second. ``` +**Example 3:** + +``` +Input: moveTime = [[0,1],[1,2]] + +Output: 3 +``` ## 结语 diff --git a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go index d115ccf5e..fe61d0413 100644 --- a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go +++ b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap3341 [][3]int + +func (h *heap3341) Len() int { + return len(*h) +} + +func (h *heap3341) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap3341) Less(i, j int) bool { + return (*h)[i][2] < (*h)[j][2] +} + +func (h *heap3341) Push(x any) { + *h = append(*h, x.([3]int)) +} + +func (h *heap3341) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +var dirs3341 = [][2]int{ + {0, 1}, {0, -1}, {-1, 0}, {1, 0}, +} + +func Solution(moveTime [][]int) int { + m, n := len(moveTime), len(moveTime[0]) + h := heap3341{{0, 0, 0}} + visited := map[[2]int]struct{}{ + [2]int{0, 0}: {}, + } + for h.Len() > 0 { + top := heap.Pop(&h).([3]int) + if top[0] == m-1 && top[1] == n-1 { + return top[2] + } + for _, dir := range dirs3341 { + nx, ny := top[0]+dir[0], top[1]+dir[1] + if nx >= 0 && nx < m && ny >= 0 && ny < n { + if _, ok := visited[[2]int{nx, ny}]; !ok { + visited[[2]int{nx, ny}] = struct{}{} + cost := moveTime[nx][ny] + if cost <= top[2] { + cost = top[2] + 1 + } else { + cost++ + } + heap.Push(&h, [3]int{nx, ny, cost}) + } + } + } + } + return -1 +} diff --git a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go index 14ff50eb4..2168aab5c 100644 --- a/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go +++ b/leetcode/3301-3400/3341.Find-Minimum-Time-to-Reach-Last-Room-I/Solution_test.go @@ -10,12 +10,12 @@ 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{{0, 4}, {4, 4}}, 6}, + {"TestCase2", [][]int{{0, 0, 0}, {0, 0, 0}}, 3}, + {"TestCase3", [][]int{{0, 1}, {1, 2}}, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2992926ed3bd0bef19ec737f28b2d3d3c2222ea9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 14 Apr 2025 22:47:31 +0800 Subject: [PATCH 253/450] Add solution and test-cases for problem 954 --- .../0954.Array-of-Doubled-Pairs/README.md | 27 ++++----- .../0954.Array-of-Doubled-Pairs/Solution.go | 56 ++++++++++++++++++- .../Solution_test.go | 12 ++-- 3 files changed, 74 insertions(+), 21 deletions(-) diff --git a/leetcode/901-1000/0954.Array-of-Doubled-Pairs/README.md b/leetcode/901-1000/0954.Array-of-Doubled-Pairs/README.md index e00614b81..20beb7592 100644 --- a/leetcode/901-1000/0954.Array-of-Doubled-Pairs/README.md +++ b/leetcode/901-1000/0954.Array-of-Doubled-Pairs/README.md @@ -1,28 +1,29 @@ # [954.Array of Doubled Pairs][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 +Given an integer array of even length `arr`, return `true` if it is possible to reorder arr such that `arr[2 * i + 1] = 2 * arr[2 * i]` for every `0 <= i < len(arr) / 2`, or `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [3,1,3,6] +Output: false ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Array of Doubled Pairs -```go +``` +Input: arr = [2,1,2,6] +Output: false ``` +**Example 3:** + +``` +Input: arr = [4,-2,2,-4] +Output: true +Explanation: We can take two groups, [-2,-4] and [2,4] to form [-2,-4,2,4] or [2,4,-2,-4]. +``` ## 结语 diff --git a/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution.go b/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution.go index d115ccf5e..cf12e5066 100644 --- a/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution.go +++ b/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution.go @@ -1,5 +1,57 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type index954 struct { + idx int + indies []int +} + +func Solution(arr []int) bool { + sort.Slice(arr, func(i, j int) bool { + a := arr[i] + b := arr[j] + if a < 0 { + a = -a + } + if b < 0 { + b = -b + } + return a < b + }) + + cnt := make(map[int]index954) + for i, n := range arr { + if _, ok := cnt[n]; !ok { + cnt[n] = index954{idx: 0, indies: []int{}} + } + ic := cnt[n] + ic.indies = append(ic.indies, i) + cnt[n] = ic + } + + skip := make([]bool, len(arr)) + index := 0 + for ; index < len(arr) && arr[index] == 0; index++ { + } + if index&1 == 1 { + return false + } + for ; index < len(arr); index++ { + if skip[index] { + continue + } + target := arr[index] * 2 + v, ok := cnt[target] + if !ok { + return false + } + if v.idx == len(v.indies) { + return false + } + skip[v.indies[v.idx]] = true + v.idx++ + cnt[target] = v + } + return true } diff --git a/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution_test.go b/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution_test.go index 14ff50eb4..5c10d2d37 100644 --- a/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution_test.go +++ b/leetcode/901-1000/0954.Array-of-Doubled-Pairs/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 1, 3, 6}, false}, + {"TestCase2", []int{2, 1, 2, 6}, false}, + {"TestCase3", []int{4, -2, 2, -4}, true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3a5ba351b5fcce487f57ecbc0d694b884b27dc67 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 16 Apr 2025 09:34:15 +0800 Subject: [PATCH 254/450] Add solution and test-cases for problem 2537 --- .../README.md | 35 +++++++++++++++++++ .../Solution.go | 23 ++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/README.md diff --git a/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/README.md b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/README.md new file mode 100644 index 000000000..fc4b8221d --- /dev/null +++ b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/README.md @@ -0,0 +1,35 @@ +# [2537.Count the Number of Good Subarrays][title] + +## Description +Given an integer array `nums` and an integer `k`, return the number of **good** subarrays of `nums`. + +A subarray `arr` is **good** if there are **at least** `k` pairs of indices `(i, j)` such that `i < j` and `arr[i] == arr[j]`. + +A **subarray** is a contiguous **non-empty** sequence of elements within an array. + +**Example 1:** + +``` +Input: nums = [1,1,1,1,1], k = 10 +Output: 1 +Explanation: The only good subarray is the array nums itself. +``` + +**Example 2:** + +``` +Input: nums = [3,1,4,3,2,2,4], k = 2 +Output: 4 +Explanation: There are 4 different good subarrays: +- [3,1,4,3,2,2] that has 2 pairs. +- [3,1,4,3,2,2,4] that has 3 pairs. +- [1,4,3,2,2,4] that has 2 pairs. +- [4,3,2,2,4] that has 2 pairs. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-good-subarrays +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go index d115ccf5e..adb6c8c1d 100755 --- a/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go +++ b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) int64 { + l := len(nums) + count := make(map[int]int64) + start, end := 0, 0 + + var ( + ans, pairs int64 + ) + + i64k := int64(k) + for ; end < l; end++ { + pairs += count[nums[end]] + count[nums[end]]++ + + for ; start < end && pairs >= i64k; start++ { + ans += int64(l - end) + count[nums[start]]-- + pairs -= count[nums[start]] + } + } + return ans } diff --git a/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go index 14ff50eb4..69720b102 100755 --- a/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go +++ b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 1, 1, 1}, 10, 1}, + {"TestCase2", []int{3, 1, 4, 3, 2, 2, 4}, 2, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0f11f1ddf1f2f056350f325f4e999e071d7a5fb2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 17 Apr 2025 09:33:28 +0800 Subject: [PATCH 255/450] Add solution and test-cases for problem 2176 --- .../README.md | 28 +++++++++---------- .../Solution.go | 19 +++++++++++-- .../Solution_test.go | 20 ++++++------- 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md index 915bbc7cf..4b77affcd 100755 --- a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md +++ b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md @@ -1,28 +1,28 @@ # [2176.Count Equal and Divisible Pairs in an Array][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 +Given a **0-indexed** integer array `nums` of length n and an integer `k`, return the **number of pairs** `(i, j)` where `0 <= i < j < n`, such that `nums[i] == nums[j]` and `(i * j)` is divisible by `k`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,1,2,2,2,1,3], k = 2 +Output: 4 +Explanation: +There are 4 pairs that meet all the requirements: +- nums[0] == nums[6], and 0 * 6 == 0, which is divisible by 2. +- nums[2] == nums[3], and 2 * 3 == 6, which is divisible by 2. +- nums[2] == nums[4], and 2 * 4 == 8, which is divisible by 2. +- nums[3] == nums[4], and 3 * 4 == 12, which is divisible by 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Equal and Divisible Pairs in an Array -```go ``` - +Input: nums = [1,2,3,4], k = 1 +Output: 0 +Explanation: Since no value in nums is repeated, there are no pairs (i,j) that meet all the requirements. +``` ## 结语 diff --git a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go index d115ccf5e..518d35ad0 100644 --- a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go +++ b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) int { + count := make(map[int][]int) + for i, n := range nums { + count[n] = append(count[n], i) + } + ans := 0 + for _, list := range count { + l := len(list) + for i := 0; i < l-1; i++ { + for j := i + 1; j < l; j++ { + if (list[i]*list[j])%k == 0 { + ans++ + } + } + } + } + return ans } diff --git a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go index 14ff50eb4..1d2a0f81e 100644 --- a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go +++ b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 1, 2, 2, 2, 1, 3}, 2, 4}, + {"TestCase2", []int{1, 2, 3, 4}, 1, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f781a8703f9e7a0dfdd430ce138dc73138d2d327 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 18 Apr 2025 09:44:08 +0800 Subject: [PATCH 256/450] Add solution and test-cases for problem 1093 --- .../README.md | 45 +++++++++----- .../Solution.go | 61 ++++++++++++++++++- .../Solution_test.go | 30 ++++++--- 3 files changed, 111 insertions(+), 25 deletions(-) diff --git a/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/README.md b/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/README.md index b5dcd035a..ee4386054 100644 --- a/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/README.md +++ b/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/README.md @@ -1,28 +1,45 @@ # [1093.Statistics from a Large Sample][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 a large sample of integers in the range `[0, 255]`. Since the sample is so large, it is represented by an array `count` where `count[k]` is the **number of times** that `k` appears in the sample. + +Calculate the following statistics: + +- `minimum`: The minimum element in the sample. +- `maximum`: The maximum element in the sample. +- `mean`: The average of the sample, calculated as the total sum of all elements divided by the total number of elements. +- `median`: + + - If the sample has an odd number of elements, then the `median` is the middle element once the sample is sorted. + - If the sample has an even number of elements, then the `median` is the average of the two middle elements once the sample is sorted. + +- `mode`: The number that appears the most in the sample. It is guaranteed to be **unique**. + +Return the statistics of the sample as an array of floating-point numbers `[minimum, maximum, mean, median, mode]`. Answers within `10^-5` of the actual answer will be accepted. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: count = [0,1,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] +Output: [1.00000,3.00000,2.37500,2.50000,3.00000] +Explanation: The sample represented by count is [1,2,2,2,3,3,3,3]. +The minimum and maximum are 1 and 3 respectively. +The mean is (1+2+2+2+3+3+3+3) / 8 = 19 / 8 = 2.375. +Since the size of the sample is even, the median is the average of the two middle elements 2 and 3, which is 2.5. +The mode is 3 as it appears the most in the sample. ``` -## 题意 -> ... - -## 题解 +**Example 3:** -### 思路1 -> ... -Statistics from a Large Sample -```go ``` - +Input: count = [0,4,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] +Output: [1.00000,4.00000,2.18182,2.00000,1.00000] +Explanation: The sample represented by count is [1,1,1,1,2,2,2,3,3,4,4]. +The minimum and maximum are 1 and 4 respectively. +The mean is (1+1+1+1+2+2+2+3+3+4+4) / 11 = 24 / 11 = 2.18181818... (for display purposes, the output shows the rounded number 2.18182). +Since the size of the sample is odd, the median is the middle element 2. +The mode is 1 as it appears the most in the sample. +``` ## 结语 diff --git a/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution.go b/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution.go index d115ccf5e..56815aa2e 100644 --- a/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution.go +++ b/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(count []int) []float64 { + var _max, _min, _mode, _modeCount int + _min = -1 + total := int64(0) + sum := int64(0) + + for i, c := range count { + if c == 0 { + continue + } + sum += int64(i) * int64(c) + total += int64(c) + + _max = max(_max, i) + if _min == -1 || _min > i { + _min = i + } + if c > _modeCount { + _modeCount = c + _mode = i + } + } + _avg := float64(sum) / float64(total) + var a float64 + start := total / 2 + if total&1 == 0 { + start-- + } + used := int64(0) + justSelected := false + for i, c := range count { + if c == 0 { + continue + } + if justSelected { + a += float64(i) + a /= 2 + break + } + next := used + int64(c) + if next-1 < start { + used = next + continue + } + + diff := next - start + a += float64(i) + if total&1 == 1 { + break + } + if diff >= 2 { + a += a + a /= 2 + break + } + justSelected = true + } + + return []float64{float64(_min), float64(_max), _avg, a, float64(_mode)} } diff --git a/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution_test.go b/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution_test.go index 14ff50eb4..f1200c5e7 100644 --- a/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution_test.go +++ b/leetcode/1001-1100/1093.Statistics-from-a-Large-Sample/Solution_test.go @@ -1,28 +1,40 @@ package Solution import ( - "reflect" + "math" "strconv" "testing" ) +const ( + epsilon = 1e-5 +) + +func checkDiff(a, b []float64) bool { + for i := range a { + if !(math.Abs(a[i]-b[i]) < epsilon) { + return false + } + } + return true +} + func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, []float64{1.00000, 3.00000, 2.37500, 2.50000, 3.00000}}, + {"TestCase2", []int{0, 4, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, []float64{1.00000, 4.00000, 2.18182, 2.00000, 1.00000}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { + if !checkDiff(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } @@ -30,10 +42,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7ff16bb8760427e20277060a83f4b42a52527351 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 19 Apr 2025 20:21:52 +0800 Subject: [PATCH 257/450] Add solution and test-cases for problem 1276 --- .../README.md | 35 ++++++++++++------- .../Solution.go | 15 ++++++-- .../Solution_test.go | 22 ++++++------ 3 files changed, 46 insertions(+), 26 deletions(-) diff --git a/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/README.md b/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/README.md index 3b7526141..d13d0c5a3 100644 --- a/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/README.md +++ b/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/README.md @@ -1,28 +1,37 @@ # [1276.Number of Burgers with No Waste of Ingredients][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 +Given two integers `tomatoSlices` and `cheeseSlices`. The ingredients of different burgers are as follows: + +- **Jumbo Burger**: `4` tomato slices and `1` cheese slice. +- **Small Burger**: `2` Tomato slices and `1` cheese slice. + +Return `[total_jumbo, total_small]` so that the number of remaining `tomatoslices` equal to `0` and the number of remaining `cheeseSlices` equal to `0`. If it is not possible to make the remaining `tomatoSlices` and `cheeseSlices` equal to `0` return `[]`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: tomatoSlices = 16, cheeseSlices = 7 +Output: [1,6] +Explantion: To make one jumbo burger and 6 small burgers we need 4*1 + 2*6 = 16 tomato and 1 + 6 = 7 cheese. +There will be no remaining ingredients. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Burgers with No Waste of Ingredients -```go ``` +Input: tomatoSlices = 17, cheeseSlices = 4 +Output: [] +Explantion: There will be no way to use all ingredients to make small and jumbo burgers. +``` + +**Example 3:** +``` +Input: tomatoSlices = 4, cheeseSlices = 17 +Output: [] +Explantion: Making 1 jumbo burger there will be 16 cheese remaining and making 2 small burgers there will be 15 cheese remaining. +``` ## 结语 diff --git a/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution.go b/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution.go index d115ccf5e..434cd0891 100644 --- a/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution.go +++ b/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(tomatoSlices int, cheeseSlices int) []int { + // 4x + 2y = tomatoSlices + // 2x + 2y = 2*cheeseSlices + jumbo := tomatoSlices - 2*cheeseSlices + if jumbo < 0 || jumbo&1 == 1 { + return []int{} + } + a := jumbo / 2 + b := cheeseSlices - a + if b < 0 { + return []int{} + } + return []int{a, b} } diff --git a/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution_test.go b/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution_test.go index 14ff50eb4..7372844b3 100644 --- a/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution_test.go +++ b/leetcode/1201-1300/1276.Number-of-Burgers-with-No-Waste-of-Ingredients/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + tomatoSlices, cheeseSlices int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 16, 7, []int{1, 6}}, + {"TestCase2", 17, 4, []int{}}, + {"TestCase3", 4, 17, []int{}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.tomatoSlices, c.cheeseSlices) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.tomatoSlices, c.cheeseSlices) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7cc6c2b5591207b9d9c797f8e2e82000e5163582 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Apr 2025 17:02:55 +0800 Subject: [PATCH 258/450] Add solution and test-cases for problem 1797 --- .../1797.Design-Authentication-Manager/1.png | Bin 0 -> 26083 bytes .../README.md | 42 ++++++++----- .../Solution.go | 58 +++++++++++++++++- .../Solution_test.go | 27 +++++--- 4 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 leetcode/1701-1800/1797.Design-Authentication-Manager/1.png diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/1.png b/leetcode/1701-1800/1797.Design-Authentication-Manager/1.png new file mode 100644 index 0000000000000000000000000000000000000000..864ba1394db3ad8108fc4f9e9937e107a0d5ae09 GIT binary patch literal 26083 zcmcFq^;=Zm*98gbknRs4AqWiJAVVlh3er8&1CoPuhe)V&Gax11B`t&G3?U3HQbS9~ zfYf{a{txdjJP$l~n0wCIXYaMwTKk=z&Qo#{W)d769CFQPYAg@%>WqY$kz6cIv>h#O$&mXSM(3QWZL|MJ5q=SVdeuHh6^sE<;HA4Q)Kb4JB6DM#pp?ZOw~ z@`a=D9+g${O&V~V-Alq{a!Z^%iagw9qF|h0qF1V}kH>|gsJNua!b?@w3nx(~7=Qlz z@Z;)`SHY4kC2)9)ROsMXLtL59z)!P7d-m!6$Dk%>fxzU zBuRG#^~fSDJPXC;RQod*c$~4%y-Fk@PfM*E0!`43F)qrNJjl^&(Yv1GKYK@I_rqpi zM+3!(dqXA15OB|I6`irb3yB>6w-Zb(EUsdm1Vdzp*Y^yGZwN=27yH|-JgkT~;|V%v zIV7Z#K(V(_Cb=O;D)T468oqs)E5t?U$OJGf@c1OXSo9229*QR6RHNOeWIOuI=DLse z0^U?~1BCI$tfC%ov)azdI}VU?sy+JYk#C%kFApZ7b|qw5yqOR_|NVHH9l<=Ut?CTy zses3|OrYtkm#)ljf1jQl{wS&vd$+mZ#Xs%;v3^T?7^P#0In#wM1?R1+2!w%8LSfX0s zr>uVY6m0*NjtgDBMx#-@U?TnJHL+rSw;b?{gv4!G`~|ArH~VDRG)p&aARzd{mQ4)` zE0=+TrxxXV(nHGDSQfq4EIu;@brL??M*06+uPvn$vCpS}0i^I74Fkcm&is_{mSX1AJ-i}5or--ecxU4 zZ_l_^JeahF;luQ(>B50Ta!{?XKj*jI-nV^}EaNr|;5fA@0%o%6HQ>wR;(op^k}k|i zFq4j^;?l1(cl}xqsRLd!74$)2&ZWS8zn{*!^=s+B=&Iw87=IjyIda)2(MZ5ngq?!p z%GbQId=W_^1&;d*2gP{WQP~;xbYLI3FD~QRieeR(0%Du7rQ(~CJJ}7zf|aA#1FObO zLU*f=j4`Tr#OIVCsVd?jJ4Ls6h0(J|5GiL#2Ww0wJwyy;o0520k)uoW@!3T~AifX0 z9&xIG;dk28W9L+J_rWt{dLH`C1ka4Nl%)~&UQ~Vqx|!lA zP(wa_DVT}egY%#ux=aT2x4BeYMy#&;AP!hFDd(q&^XA379v|P!OO;Vf&(bNE{#j(c zG!I!BKIE@=CX!*EOKvz*dl}eH9ZFS!F49-{L;DUrgaOoYr5`kjK0Xl;x4*G{l5tk9 zbFh<7Qy*TviU+?%Adblz+w1AR3F`!GXh}G5XCfWpvHe1y!Eq*a#q~(~hP3*|C63q$ zF<8ULtH%$(58wG{yGW2>47u^Bo?hfBIq%CLTjA}fccpHH+s&$1mD;H05C<4ffBAn$ zv){3r??vx-0$Y@qod`!3cET@FbOzYBQm+ zf;%B6TP$Vbn;b@l88>~3d~%ApmP&Ykljci z@A3$3hCJp8-tDQ({aunqY6&tkD73Al2$yD_!3<@m6$)i&Mel|305ODnB0RR>F2|`B zWXs5N-W|m!Pr@lD5BgyIS=?TCKVQ?$O5gIlcqDtKi>&_4SEw*e($Wud!6R+y<8n*Z z^#=N^6yO;ly4U7!`QeS4R7AQ7r<&#(sNhzQ z=8O+WcDZY2()vV`?U(dq8&B!7gahdwz?j>H{XR-niWy8ae-&zWASW!a4tV@)Oa--v zGDjfJ5}+0$W9ua-!RZLoQRzcf%qIO%i9ClVOwB#9CWL z^pJq)Y4gNO!Kt3!%dUYPAXdPQri@!@Vz56=B8hp>CeshXQE@C}%t+6IwWj!RdwJ2^ zmz!Y?N8ZlkKBfDLtasA6Prs4CN*dErV#Jry#z%gdIdL{=@&`AE?<|RRMi6U&3Z;K8 z?R`l1rQ_;`;x4)0t3%`a(@8zs`^sH#j-azxriCiK3E3rIZapnSdofyuW?6jO}r ze`Fz@8|r-bW4uK$+7u9vZ$EF1bz3UUi1kVSsvM~pX9bn72Dv)6qWpD29`BxX0i{Nc z!U9p#D}_>nsOEY+=zWTkL_jLb_}M{OIeo9$;}4Py^d=3$ITeLKB`-W~_m5!@;;8hG zEg{B&3j#9iIF=myjoa#qY(O1?v_x5X()5YIX$n`{`P3AE&8-|1cKiFNrFA$gp6D_Q zC|N{-#w((uW{Ov;fBL%rRfUG``ejQAIM_qM$sR=>8Xl+<$JIBh9b@!GY}Se1?rCG? z4bOCow8p<08f%Fu%Wi>GFk0;tz#;waqHh`(qpcZD!z_O@;|XwW&|)Bv*mJ1M{#1uW z&rP=nFHltT3b^5Za3&P43iCKnx;assysH;!l%QHo4N<#zQRRpV*4~;wnu5o6;X%^< zVM*T8(I({RA||WsEX#ck#?By-0$CBTC3yQEY{944+J4SuA#lox;fL@sdLnjypfnLl zmopEGGpV%1%yElt)jEasY4ba%V zlA#J%Kx?WKv^}3c1r8@aGdLmdnm>x4zWisp>#OqWYD+x2^$=9C%pF0?_J)_NuXlX; z8eTp`fk`dDGWHtutZZ$cvI{qjz&S7fe1x4ifcrZaroN-2qdz!~4O9>s)0Zo+gqg~P zj%`7YH>70lSXe_Rr)D1#)pyisC4yQUHv^nVAqC2;hXan}j_uRAUf+{>nTYjW^e)*3 zo>LK?g&wxQMBQW_y1tr8J*p4nO{+~%gTgPJBrn_fww_~rop75%`E`fQ6`3%scNI;^ zJnZ^gA@L1ZfwQsiAGsm(C;cUww!*8(1$#2`Bk^;FdV;18_px^&tOcF>24LF6Jor;M zGJ(9}>~nnzb54RJTrq(S`zVTEvK;@8wJFT2dhyeziO;vBn}zCWlAA*v+v?DtYDLEm z^D>W_$Hn2u@#kY9NfFM7s*L7!O4)Od-5GnKdYtiBSIE*mwr$=B7C7nhw;!CY8PMy6S+WgN(vJJtSvM(({Ifr13{cyRt|O`n zn)ljz(weKsXDrHFbByD-JS2Q-ffRG=kWOB$$#hjTuPj3kro}U~TWmZTNEd%+%)G%7 zkF196QJRa`D%9G%;Fb7M^_t`)VV$^gpB;<8!voW0D1= z-D%AyJMj`mWqeXnmG|ANE~iXUW{u#|8aCbYh+laRJPl|0&E?11(x_LnyA&k+{fczs zro6qq-2nL;p}52t!0Re_1zT&=T{>dpWoleB?95K18r&koXk!#0)zQA_uDmJ@JJHtbzI0dsy4%Zaq z@ns&@)WE3e_BH)ywefRfdx?{HlD}}OaXCSu3Y2M!2TM=YTbXq|*gs5m#e^sJ@-azm1MN-nY+aZ+0;dV6t zJ$Yspq_;U=-d>CN#;36|Dt(+te+dC;oeh)cmX?;3pS7LpERRzFluVa2YG&Cn2W=0} z;kBd8NZ4SUNT^SF?*tyo-t1iEjztV<3lj9bE^dwVIwz1I5BM+le(9OY=NtK4dIp=v zcQ|-*V!2Y2nQp&>mp(REPff$;=efu{skm$?F*%Awg%czLm#0|4aZ};( zM@QusO40eKFB(PPK}Ot>G7KTcRkT0VPaW0e5UUNukiY0lV2^4z zmor!Nr?@g#Aw3pri@a)Y8-P=pF4EmC;Io`-#Qligj7MgM%I;hTPeO%7VY!!32p_F5 z+bw4lKWF*Hx!rp*fkDe@EtueZ^VYvjFXlZl`!iZ>mq>K8EhxfhsSB{yrweo_Z zu@+3;|9wqq%h~!tl=NTKr$Fzk@NL+gfsy5>e@T%@6$#nez(sz-qn-RybtEzNtN{MOe8FJpmxp=7Wk+2WhBHYVi~Xht;2X*0*c#|nRt@VZc0+fgnhfVaoO zL3?*RUMs#ayJzG>+}mDZkr=5g{DZArZ(AtxS=cd@2toIm7qr|- z1KkRSFqq7Zfz{iSP{+ptr^`km+KdLAnmMw25^O7_%>V7Ys{D~MciyAWxJvp>b8w}> z+~MEa@%E~$I6hY0KO{aC^?SUHc0Uugp7Eyl8nWj%uLax=3=4vCo&tLmu%?isf^;|- zGX{9BpI@AXa~N6N)<`iFkRdqG+mVdh+iTDBEUhZ0EPUlk$!^^%^r`{%(N89$1=M9a>m^#%PK05_tQ&%_f~*KR9d@3sQ3JT%RWqjKW-doXd@G+hN2`|3JPQOORR- zQA-1f)>Xje<>iyu!l>nRs&YJlV7wZ4eV`PEkGEJqw@VMwHt$`+b3%3h{kU2oxs6geIPs)om=hA4JV`%uT7kc%n>7-S zZ3d$pLD{6}W(v#Chkw-is5BVB7EM28AagK2R=?pADW+}7Pluoy&Iw@{Ba*K!77&wggLvIzUHV1o{8a#@Bs9$>OROP38HS%OHddZ}>>R(f{%&c{RX|#pqF5q(h^m zp&;uZdyCXpTuGM2j^T>{?u8A0E>Koz7IaMHUvRhfdE}eQAa0dVqo~RcR$) zs*%AIw`D}uGK^O5XgEeaSz)^ZH4tt9_wsr34r;KiP|3IOB>tcRyZEbz? z#p;SXCQc$GhWl4eg6zwJMYCC zZw0P$jZC`&$5|_v!R@w>Z+s(_`d8c0ZElnfq9uTSR?jiIm+9yuh;560>tv=kY$AMK z_F)jabL*3`=;`OUBUVVg`5d1guZ($IKCyMjPDiFYyErFUbH?LaV|1ipF;|R@P$CLz z*k%8zv{Uha+5plnz^_wC4>JsJ5T|st&DEvmz%zT zzE9cP?U!o%HkDX1$dDB|`IHGK=+NqR@Zs~e8hNdWG*m{ekHm1MW&JA4-#Qc5c4=wp zP?k+6)Cl9SezC?4j(;u1$g1OhxW}oFlt*%C*p)xH#%+HV*5_AeFiY{Sjr&3;WP6L+ zPV#5l2{EGEWaSOib$gB=lL1^MQ2yQB#+5{%(Y#J5D*eLj1J>U#O5J+4P7xp!8SvK? zDx}X@zdl-*kAK@AcD#50>RNHd1{z1>LOsJL!$3Ta2$ByXD>lGY%xdo2Wav9%rB>>Z zD;#5^ZF=2JQtk7dcSDh;ple0@2>R11ADKQzZ}?Ye6mc3NbTM{tvH!@ugQ}89l}{AP zG6Z{|F?Zothy3ln3ADRKj5D*dHKI^--5+#(1c@7k#NhZed*4N4)(3eOkLL2RRLYq4 zT#827aEScCc7S2ox!PZNAen$8nH05dQW!n6tC;N19vqI_S9+%W)#bg{`}xf&@6gp( za%V>s@SlHVLix#%lWWK-ipQ!;zX)m=MkZflUhLm}AD?6Y9?0oak+YIz(;E`=r9W6v zs%^D#h~<<`+B)#{!RtEiB_B?skHK2qaoe`FBU+7PaSe0oB648b_i)wNn(^n92ytt8 z6059N@cx^lEmz7QcT1zNeJLMgwE%DvZg;dUV?hNBr2rtkU!99B5w{H8-=eFJg4ArW z$PZlW^8Tv%<3Y-YwRLjnM_EKOV?g_JDg`PcYi?EM7>GKa#_5ApI4?g(OGQP6bIDxk zkYiFb3^pxK)7FahgbI;uXG_3ktaf_t`y+E2pk#Gam82OXH#6w^yo62DIIlj<#G@Q8 z@CiJd3mpuOWkq^Hknbhs4}O_&?B0Qahy`1a+Gr8xJGhw@l?jr@*JGqx9K_( z`(;r4yzbuHaqWZ%&2mF0DY#Pj@e;{j308^xQW|Fiv(x$aq=BpelS4AH@_7HQZ=A+a zW|jug$m43B#kYP@2B6~SWUBnZ&ihs8Y>9c8XWV~#0OCQ7+GdnT3&UBCQ)YW5jt#1K z<~TwTJ{&ZNHgU1&yvdKxp6Rt|(4S?VPG!G$9KF2Dib2-#?#XV)PlzLeC`(Vo7z+kb z;wTQdE}Dd4BBS|ODWjMFfJ#S%9@<5QFnh`@TU0z{XZ$gMWOeWspckIw6i6zLHKa|W z*H0o$r4YG|D>MwVT5;cSApRa5ylKhn=;G2*U0W$fhI`++yV@H%uImn)b7~jQ4Y)LZ z4{n=6I4**Q`G@gB8$^}EkK2`9`DlbnnY>Q_3sy2*D<$QWlQah(Fn@R4dzdO&^RpRuHz#Gh6uaZoN$KetL!d!&?tBUgM^0$jO?NHnOG6m_x_QS)__m z%TbqcYzMWCR?fj4k36&Hb~_x=iJ}JkFbhk=+E-}L0=EI~Tjzh(4wO>8vn!TVJM35A zX*l~iocQ#3plisFbmBsp`aL z%a?GQ;mI3FC{C-XP#K>ZE0bfBSvpn7Pe5_-^?e24S;4xpXc0Y;NMW~K>v6ZRn-AA{?I_X(P8p;cv~UnORJ%_ff#&(Q~Huj)Q5(+HSrA*_1WL-0PH%lrW~2b;(WsuuR-O^vm~D-FY`X7h~yyI7PoFtxWQW z-6|Uv*_7Xh1H|gNI}`)nq6tVL_k55{k7c0c*`N*3F|Iz%3Y6myluhjltQ*freAs)$ z^_Dm@qgj0AQp}@Ne(gmZkxdrBVAj~2$u&7HPJ`pV7Y?i0V}*S<1^TP&yClkqR%0kc z@Oy=Mfjb=oG;RLs+L!-L*!dyffAb8l@7ri^_^w}CJ-IHHtsY1{vS7Mb@MOMFq$(*z(NdSkr@3!m~fzu?UL z`s}epdTdP6Jc(y>y-L0#vph{RMhoP?#+XYpQ0-AdxLK(@vXZhyIkH&E|E7n0LQ?#Y zZ-Qg#+#ru-<;@Zn4k)oC64Y`Nc{eV^=5@z;{2zNn3U+ z$Co{iz6y<6***z%?|v1&*KhMv1<%0Wf(^IrL?F&fkHHp#gfe+amrU1_9CO&wHm zKt_ixaR*85#!zvQ$V|e!ySu6BmP{BYq#!mPODXFLaPEPf$`>7_*CIPw zyLtUDv$!Tbq#p6nPul2-Fv;)mH>4{uW>=t|NO#S6K>0?j$bIBT(C@~_$6r7)e!XQ$ z9e(e5m@6~k!w1STUk_|!%AWAd17*F6_BKeoe;DPI=cSK*fccXpDJqgJ%`Fgr(e$U^6o z6(Sh+48b@sb2h%fbjZ@S{hWAY@tG6unMovhe^p80J7iB z#^pXX_ZitDBHwyr=(+Pxmw_a+$aicP+2)2(ZW)&ua|iUSSu;#^S;dt>-;yCME&h` z&GzE#kidHaJ$s8=NrXCb&*whJ^o9xd!*E+5Q$H$jLB+A#uTtb#h6a|A?{vudW-Wew z_N-IpW0~}skZQRS^s@00Xn^f=LbP;Zn3(Uadp|s<9BNT+NrWbPE4Ox#F^Roqi@)M` z#lpw_Y%7iaXRhcBUJT(<`kC*JW0?w|Wox3<)t^@vajM+?1=K~)Jj5U}*@$$MAZiCL z@z1^?pg|6#o;rZm7uZKeJ%4%0fDx_RqX%U>_66xgDbEL)2{+9sDONcH&>%qv|E1Arljcio0hB-2=B0q%B?bnKYJA2GlGj#fz}rYKd0J zRV>B;dB|w-i)NZ~D!Yl%+7`{buoUOEj_)yui2%peD`J45;8Kp1B4?|m2gzPJ9=uh} z&ZR7DY=FJOOY^S>!jc`v&b*SA5s4KSZKY^hy}mJntJMkQiwK#<4LBf<~La2v3* zjCq1=RqAT&GqSZ9S`E}&nt)|AaU$!Aia~%Oe==23CVtX} z=J$=6yP-LlCqI4rt0ucx)>lI-MTGGFucZ;5tbeXkeC%`T2YYKhurB3^OjciTMV}Ye zDRa3RXWO-Qn#rlBg4};oz}JtMI|HbTp+Pu`?h1dRh^Pazv$I=l-oF5fK{pj4r=^qH z5s4ON83jAsjvuUv9BGZ3zy1s=?keio$6@XH8hmhm`O5NbRm}x@z#T@I$^n>DRE@K~ zio6Tqq0VNrz}!0&@0C3_w|SDhCTcw0=ULlQz%R^iuB&pXN#6I1;z-iO>6v4Hl-IjS zbXZ^@)3`$=o9@t+b%t-cAQ|GV7u0Ps{gAGRjZrgV;H^c6%ABe-Ba3;uC1BRDiy(2Q zO68b)5apd^<#hZlq@_>itxU~9S^SW@WQBDvwEO+?8v;Sr@n>_XM?>D1Oh;KWS9Fmh zo$?$s#}3{Q)yL}W$OnYm>=?Df0je9kD+7{srTS0>Wb2LEF{7y6w^@Gc7r%dH)GpP9 zazb_puO4TJsQ5MA7;Za!5`DBZ?Fwf-#17~wo@cx_!^H~_nBwrAj^^iLeSZGV)DzPp zfN_QdT0Lh!HI6fh963l%OiU!(&9iP~8$w1+EF+uj+utMEBS(7fM_xYivFMQVeQvKE ze>{6)=rHmZK(HwTm+E#lqpFQLCQuuXi72aIueqVCF|vPorspLS)|o&mADb1VBqh_} z36>K#|9Z^C8-j$!QOG_AX+42VdYx}d^_T=4RW&^Esp6TuaLyfbR9xy+p*Xxi^*%T< zG4a%t@kC{sY4KeMI2C`w!Ed_1*NH+S8jFu*a;3UD@@!X@wyxKlOSQLA>WNaS{q8gW z-nm7+>3ZNF3A%jECH1@0;o`q;n_S0*8mj@1=gHAY+_n*-t7XGcO0M;z+nb4e=d}|t zW-7)EhzVbA%_tSwE9w#Rq?D_O^-2C@hW1N2!J77mtXot~Qr@5RyK~sgNU@>gy_sTP z)2Rld96qg&&M(ILjbEd6l7t)?uCyS0Ol<9dkI?RqlZ(p&e%hh}=4FhpCz8hSZD8X) zvIukC2;Qg7+0W&s)83@KxI6eqAdYPZIfO!!J;8Jdt<>r4J9Fs7u6jpW$kt=%Uo^&$YxBqlIj=|YSp z?B=d&;0i#<>Khx+C05c%qUqjSMKdiAkE?#zCdw^{ILPDHNWkpoix37YIu8Y;*E8u zKhcC6!ScN>DV`z*O3npaTAxV3!)Btb_wk07Zb4~j2=d$CrNX{%S=w41Rq!ia2c4`(=gLL`#=OevrdMvd!BiO5U$Q3G0f>LHc1QE%Y-5 zgsF}5&fsIajDnp!e2-e`fv#J5Y@}y%BIr`t_cS^SC539G(jPF=g>~*lKLxJ$$k8n! zi&O=%faWzgv*k8f`oNb**5de<>dS9<)+cZYe9hXL$uBNy{QyFgwb$jjUJS{ z=omTw1HCeBXKtBMOojfMDS>{c`ZzGfR*s2PSs%Y~UN(2_ye!d_S;0E)!NBUu0ScP( zCZSbCjq^e*w_qQ@j}L(Ec9Ax1l?rgZ*kXeop%ojC{{n~L&pJB%Tk}Bs;jU=gsD=!7 zN(WEc*-z_B999Simuc37tl;DiQ zTPOYt4JN+#y@#VIVvEt}(b7HUOoJK$&QG`u^fo3b$$(Z~tMXCJ_-B=GX2E0gpM`#K ze~Ik*|2~uO^`ri4MsF&-*RcVgeq{ah-Qc2z@9Ehx$+6@$0=+`l&rW~HK%ZP50V6vH zsAhb`2@}8ae36(zx1T-lAJ!xWKxeM48B3M)u%=10BUj!2N}>pblB(e{_qvxpvrSyU zYu47y9F;Egb&m1~Qkm5W^JkK~A0X^HP)o%5i(t-0VROd9lN+nZ0f%BZj$Uq z!futNTWslB(s@5lHA!x>m9;g;PD3sm6XVrt)4~r(6ov={6P|Nbo<)~4%j55Ks=mqO z(s8HdIxak6xliZ&D~764MH$kGCWXF%l70hYz>uLZ#J$u`W$y$>Ls2hzIZ%P)z}V_W zDe2lr?m`{};U~w`#2%HSCoaE%s$F;@PZdCEHm7Lp0@UlL08uwBliygxn}()`;~U`S zky;+)gJAn~LpDOvxaEur_G7%&h$S5HGZJAh+2mz~K?ii5?H+t77@y{^Jl5htZ`TTw z*|$0)fO%5r7aj6beV<@CkGc3~m95nF_CCE+CAiRlK-NQ-yh{K9;MOs7BKlG^PqO0b z0E%t6537FUIGPbBvS!p%oM5RQwS364mqac!eL?2)=#0Gy$Dt{}?3<+jarSpQ-%%zJM~aZu(+waIq$fxreby31t|0IwM18 zCZDTGL`_|Ojd()J96^`#T=O3k0t`%F4$`fQ+lzR8dFEV^x)LL)%BeM)LSbzaHE|5k z14zcK1%?Nc4EOG2S{$Dk`6)5o65Ujeud;dHn}cEL!IihI+USRFzH{YbGcK~nY-GV} zUM<@IOU@_U&2xAf>Y2=-5(`)?^x*Uv5jBAd_9_v@fcpN= zVbtkgbPv(UN6v>86tf)hxYmc4&|LY_{n+I5QpC0tJP@_xh8P28!t=mFu$HkA$d8l z&W@RC^wHWDbIFgMs5dE|MEj4H5L6tH zne5M>|LgcEQ)|-;_q(D`U^Fd`4cC(B{CAGAlpNh9fHEC+b<4MOlm(!O7pUfE@`_GO zT}&=NMxNS9+876{l_b%STo#S03(E8z2S#fFR%RvuG+~|jpC+-+JA9B7X!o_1qU>v7 zUp%HgKSG=rm9IZAdfoB)G$qkxB-ZHl%Wa#x>1FXpQw_s>Rj_wLsq2Eqm4zR!D{4Vj>d*g zx~fMPnb6c4VR`ng6Q%62!!n;`sA<5i#OKgY1wMv(e_b!cx#&SjeB+yXjlbw)7ZWT8 z6d#l_PLn%qF*D|}z?B)MB1H>m8ewjJ*#*yH0{;mVlQyRJ^0Gg>!y>MFY;6RTBPe{3 zq|~^ZC`O36yllnC6c%DWd9Nw%VyFUSf3zNGo&Gfxd4K=@wIzprWin2CM4a|xGj`IZ zRNTH5A}?>b+`Lh3(J!dTNl}}L_eXNHRYrl3ZR;~#w9U==HoT%*Y6h9-p8qnu0Xs)1 zKY6qTz`-rYMLvQMO3+2wuUioW)}y;)M*ZE-sj-XstYpp@#xY$VN!X^?xsMvVttt^U z3ScjA1bY2ZKgfBAWUR9ub#hzgG56jaxV9P_n~AMq^TX+%AemX7<W+e6)9YeJl9VIlyI6NwOC`#DAC2 z!lE%&@leKRm7>Zq!+}4EzaErDYFw%qGZEPj7NZf|cvnC#`Kiub_ ziuxMBws`0s0{8}D6$P&&7{*~XhG~3-^@qfqYHA7WiUF#IFyxck;*(CwMM~yCh0J83*4%D1W??5NzFH1Io5HnUI#+v9731TPfiZ>3A%QGNtJja zt*s}9?vzium{1-6>}luLs&bwGwXOJ&3|Tbr;gbGc;nFIl!Om3wsF2u zuAv~iI|kO+gAgf-pDRbJb{V3IK^>y5|Mb#*N4WRf5U~&%p;;ophcqiK<<1vqB$K}6 zX6opZ_%s*b8$?wGTklKIn-O(U*he(^=~Jgy4Td)^w!2W1VKV;NE9|xBJT6G7mCAi>8(Nc6kNIAwuJ|F zaUc5PwQ#65!oA^n@Etu4=^iR|2SE%yhBQuaYclF~0i8Y>ta=$mr7!9-Q_fL1Rq0;0 z99$rYKEx&$v+wOREEdkx&}E$vU!wE>84vEKRy#qH0As=+l@dldoIMssoOhK~Uw{65 zc6VsD)uu&q;O6Tx^BVJ^t=_~e3Gc=7qD{sRXmt92iH)}qUDU5(nJ?8SJ14QGhpvvC zr20_wuBnM+;=bGdY3%wa15;;uCqQ?`{G-JLTJP{_SSN^cv{;YG6Cpf|KNhC`4MCJQ zbnGvUXwCltWi@vi`MHXB*8LB{@1D>#$Gw}NobxPjhU#t8`c&5oQ5iEW9t=J~CNwh; zvp&si7TijBjTOo8d7PUAxHM(_?BBZ)yu(lJ>?sVAyq|J){^+y!U=iUW^9WsH2=lF$ z#rK8dJU;N;I=l6l6JE48dX-=&5v7H=B@5L7>@mKK1=1TCi0=IM_ zL)f6)*6hM&;;Z69+ohurEo}1_myGTb5`9A(AE_{QAsX*-tNt9S)8l0x5+CGAvIJz9UOJk6c5 zK!7+6h7Fvy0m@&mkMzp)vWIS2o$!*CG$Tk2v0q4CA_Mj1HI>D5x{r<6Ls4 z*uw&1iIb4Oc8`{Iq)uZzDE8Ht<4xfwIU1@?O^ zGv_B}^;nUDRX(%?{C+*^OgW>d=i$_OMwsy4_8VuV^{+MZhe!XFr!60aQ?oJ1`SJP~ z$N)F=*DA`lPYF<;SzI-cv4@~bY>`vUB@ySn-QC@Q!cXS+Bvs#dp6GwDieA?R^7_aU zk~Zak)+wbP8&by(Udd|I_yk?j2c_0u7u7EwSUr7fTUWow$ABS`WRahDN`2H9c4w2j zEdfk$d6asV%AfO1;j~}ACmxwIL%jgy>)Krrjyrwm#y#^|a%@w!*J3(6j=i98AA~7c z-^)zO4mD>DHDsjVRQtI0sokQh9LHErjyjuU*;zpZ#HnWYgval7WZvsDsdMDOxg7=) z=j!@YN6x?sueklQSV{mL;Te<>xh7+U4++T3G5$uFRPn1Ji+h;{0qYXmviiK9sEO*j zg3i_ydb1^$^4b z_ZycT!MXq+6dQH=9^J?Ap0e;#uY0i85ClbTpah;nccO^p9=RINWC4>GR4>+$v@|;W z%m5CXBJtSx{&BDPYu=R2`p#6GRK1|mb(T!{Ri~+pN9gZ+9>ix{XAgX~F6`Gl0Kvp! zEJ8I9-Pq5`ru@&eN6l1@o~^E}4Q=X+@ySA_r&rc=2%OO8-^&#O_I#4fbyRFa~rYbn0C|DW}!T+b_4GI3k@5w`H@R?(7cE!-G4){ zU$@D`hc}KWkP}3@fQq`ee)a8*e%h*!VZarEZJJVqgYDgs`wIWh z4X*Muh@zla#ryg@*)y+>QVY1yCtSxj;z?Um=^}Mq^`eTVOdhDvhjq;pfhp&$p3Nr7%4585zJ!GD+hMtHoh*#uC zuP=WwFz<_6VQq?9$(ZoD@s#O_W3%8rmc+P0_%5Oxy|H32UYCdX;tK^rtm63(r;^kb zI!)yde{b+>Q;p23pn{{<3FX%?51rW0*w1uhOh`g`b$VatBTWyY*Q*j612~(g0^mOg zZ|RHBb-sD)quYd6w&*>?yX05EOiz)?%-q}^McOJ6)OE=__YeD6N3}1Kjx>7$z*40? zr3%WGGFr(hmZ8z7NTb9>gW$j8gGp-Dnl5PJ)Xw~Hb3#|R#t-T z>cvnfss3w|8WAZN8#WOBJLukoN3A4`>l1)a^!jedm=i`0e|xx+YHcGwo)c;FpLa$p zy)=Zepi3U`o;CqyTvo9~e*d6+M;cn12`c3qF;;eZ0*pCKjU;b=s4jpK zMB8;nJs#Uk@9R<)W|dFdK_xyzu3cTey7)Kga8THp7<_2q!o|A69YyqHaF)+$Er|Rt ztC^m)^<9ofKEGodFvHmFEL`9mIV7SZ-m+bIVh>qy8E1A&QfFOznEzX*#|@qX%z8rk zKdoBV1+7=2?xU_GJ1lRGJ2F78`D(x*=?!!<`!ae zI6rbNdgfnwaAGm?Ij%d9b0Hkk#WdlTRF4ZxDCvjAyOA2c<>4(Q3zQvsPi)vxs>d5?3noHEMzvxB5Rk_WV;an+le0h(Mu|^eN zBwdXhULxtz$M^qfsJVag3)X~xjff%$Jy%#32GPQPH4bM59;N(+YoF(BM|qP0eF|qt zgaP4a7pm9CsIC&3SkU>oF2E%6AfP}m^JnZ0sUCgk^0~n=F7}F2;wl=lpB%Oe9-31% zr%M9#4X8zXKboI;PGuABU6o8h4h(U}YwN9PZz&0M;MLuEapsaHVYfXOb!jtz{8Qz_ zJ1DJfko9QK`s1Sln~1_+pweJl4Gyexg`lNaGFUQFh)GBeYp8A)E^a%4w(A+Va;4o-CR0J+ zIdJlEzPKV$yN_^l(k5t(na|Qev zl2J2l3qY3X$j;|0NFXl2?`y_ZIT zhD-x!j_hMH_H6~J{71x9)Zm?UgcgDJ ztHkcxCu56(SDYLdy)>?Qbg8;bsKWQZotQ&9rgV%f`A!__to#5h9^YFq5Z3%PD_S+c z($CEj!PNe`&|@tM^Rzd=8%;0RAPEUEux`!v%`l=gE|{4-aZCX`S$r`>ke0^=JfjKwmMbmV$QZ7 zY8E7`dl&%g2W$3Y%i=t5v+*jH=Mg*upVE#R?G=g`;Gn`1H4NYeif^ws8lPn3youfN z`0b2sNPF!Te*s{x3Lr12syym+eELLYj{`tO2_^1=_k(!aMqN6hlcL^N3So<6EEYL^ zd|u}h(-s@0wQNyaWEsq6RjPTMXB?vKt25-T(6N0VZD8VV>KTL=tsYaf(UH7yQPsj0 zN$7(z^T-!fA}zXG+kGPC9mjp8S4}g+TlJJ&M<2C@lsXt1cLlsTHP@)Temf`*{%O1M zFi*kjwPi^6cjhd>3bZd9OioT7{_x7l5(ti6IReaD&%kAwK+?~hi5EtS$+v_y5acdP z>*RfgSbK~+-DABAAFSo!qxz4Xbv@gq`pinxfiv5#QdbX1`?$(KsFR#&B=xT^`U-xX z>i=~}%F9#YA^OJV!&d6uEymocGJQ4Jt^I~gRlAky4IFi`JkNl2CHJwfvyDTgXct^! z%}Z`LF+ZH42DyqV%BgU2Zi(lau}#jus7dO(njjiG+1B!4FOaHpVrn^BWBLv!#Wnt( z_aCowBm@HO=PjfeP z2n_;p$z7iu9D{wc#$=QlhI<)j8SLRIJL%@RJYW#y&hd=$2lfcHly|0;7?c#K>Vnu< zAT-G}B0chITs5IlPaNES4WvdHlqOkZTE66)hqlY?m{iI}>bhe65#9*x? z-}pdroLZW9mYPJav)17*MoHsw{G)Jow>WcNJe}>qR+9&sVa!~I!%eEhis;pqF=E_w zw9jQ&v`EvFvN9hwpKeiB(ts!M8qgIysCeB$2@{oU$Y4Cn1Qwmxv;rAc!Ma%o3?hP* zG;J3fan>}K69*k+NNPFf2ro*QX1S!eXIppiK5^k48*cy+V(fyuQ&nG21(vAP^DtiD z>c?=PG^&+k$<{7lGN6jKi%>B8oO&vC)v~L3-f419{8G8?15im;USz^|9g?{+)wZY| z8^>Tpl=aOfyh)o(c{t9l*#B@2qz7CVsqfM9Nh zVmq*=M5tl_isFgOcCv?}_aBOV)S$X>Jibig;hV-1gVc^4mf?aHJgQmq=ahh@5&W;6 zR9`B2J9T?0dVj0{@?)$njvKvAeo!`9g+c2~>L#XUD_^a({WLq<08$ZpMi1kOr^8>I zTKB%++hXy_Q6j0Ui(+4!xGqLt{qr{3Ld~;jqM^i9|3RgbHf06+s*#m9#G^&_qFv*Ip|sl<%z zt=XCs?&rA!yCM^mw`(s^&m7@xL%Di{TmfdDg%Ed3;6;jyb_lS&#cTw>($>5CWuGlfD{y?B$J%M8ERl$*keFQjP1Ll0bqv8kmw?IHUUbgG2{4H*n|4KU&p1 zmA~))1MK%Akj1C*c3`>vFmT!TYkz#*`ZD0Bo%?pFzJ4Z#PVc8Kgxb~YzBiAzUpj#| zP|zE$5m^R``1!f)w^VN;wL*8DF_#@}A7X$6#2{eX!bKYSgBO9EaoE`nJJB-{+4?X< zb09N?J}HP=DglM8E{6Oiu!&iI>ek!g8nKzs&_QAHws0ajo9G_6K5>;Ph+hf=grH~8 zN+1Qa@cfi0>=ydrCc}+`y!uG=Oe~$IMkYzF&T#tJwe>&m8DlDBgd1I~I`+8vwQ!C7j;Da+yCPTV$u zTTvidfnU~7yy*S%`F;wuq}BbR9SI823$(TK$4&0*8f`W$Cb~~Ox>?(7cD*gm-R(Vu z3fWaUS-u;tJpxe*JT_U-8}}@aQSCOjEvQeAb$aY+ugbZCB1ZMXxVvxFsJ|zzvXDga z!Uo&g1)9p_^5P7H5)exXCC~r1&7Q(t4*P01e~MQQ@!8!aaRaI z`ZJ9x5ncrSjr#LLo)KQeIMnUx-OL%2K#E)#tG#!(8aauSr$){~`W^8%r)f+iA>kOR zzdh}?RUsQLZWp?to!8EnI?@O#Vs~E}7>u;q%rn9x67WzAJ zl8p3pq}!ndQ=0Px$Ayu;x(YwMy4Xv06qvn4I|5qkE+Vj{NEHiBY^xTwMM&pU5o^So z$kE@VAQoX4hBnd!3Lw~}WoKx#2-M=6D4b3PtrE@ulW$NtcjfnV4nWoxUtUmewOj_ zJ;>Zf#{P<7VSfZynkJ;bEZC<{$K z1a?4cRY?4#{{ak+Ano+1CaCF70_y>A00FS=NueL1>b~-evYkZ)dnLEN`YXi6Q9)jW?;FlvC66grHH};fP7xnj>oPpQlwB;~zqv_Vg+L zc=RQQe*8AL-6FL!q?pE*-kVz%(@mq&wR0Si zp~rnR&t;(C9;H?eruGEs&l>urC$p=TDVMJxIgm`XlZa>QouJOZA#VJ$+5+NnUidgn zZ3T6CP%HHVYE^~L;LF$xux_zbVm>==GU(Dh`i)1SGKa949qaG2cvkDGd}zJ(j=}Ot#1F*Q zkdu*ZF200(x>sPD`FEjVAL-`BJ7ih}qL!@jK6Ub&^O>?WT#PN__V6h;B@8YU@83h2 zhG=_00qOp727=|)@Qe`kDvd)}yR%hDK-R3@piv(Uwnri?Ci_C}lpXot5cyzZy%( zC(-!-QwI)+$5WVGl8Y(5+!e--o9>I9zQPKhb412XfJ;cFf~@QA?xZpB6DvH_5!v7G zZBu%=%>IptnR-(GycCJ?Y6kz!#gu5EDO8X(*w0uQZl0%gdE3zOuN2a*qDiL>Dd&I# zoUm3$VYAl2@}By$KWk1w?C$$|5#y8JuQ><2l(Aflo{1&V)c%8_8+n8R#ZR|BF|aqM zfO9E~ScQB91iLbg!?%bHRrLCUzK`_4sC_)~hwJIv;(^`;fW)4A)4`rAJZ9m0fV^2I z6WAFIc56&(df$WXza925p|jsHqObq|W58~y{{cFi8h*ir?=WMeSKngC`c6UrEc`v` zFuy8)*RXG4;y)n38gZQP{e?FEW-n2f&kIUFc}Za&umzKuVR7|8026X5>3<}N^B~wp z`7r=lTtYB)bHAai1jK(S{C5QFQu~2p0PK8skCEyx-bRbuZe~j7&?oPX4E=5W8duJQ zU&8-QOne-{zW|5BH^yFWl&@C?Ve$G{5^dv;M#q^F-8H);haCM)A#CHIz)#~u1Wx>g zodDH2mi`w8`+Xs>^Pd9mt{)Y!M$Q0PZT;bw1e;!?I*tE(9eW!7Qn0i}vuh-$ zHD>>VQbl&<7OVqCdP9IG0d8i${tZtaADY!)eE*xm{{ox8Z=Qd*T@rmYg}mI=(vl-K zm-{r}Q{p248WZiyrfP`1fRVd=FACK8_4?pamgmbRdPq<0@x327?8~yK5Zb8tnRo8X zw-qT*uzrbO!g+Ax++{1f(##NFT2cfrywuX_va@DT-KBH)k^UV!i(W^;OS64Xd-3^C z6kf>BO3s+2qo@#u0k@T)$MGxb?(S^^x4)|kprl=J$x1>_E@F~PoDJZ?ml@jP9_cM@_B#J$2>UQ&L{dyk`<-D zZbGT3sI{{T2M--JBRfJz>5`AGu1ePP_H!Ep zpKCI?86o_&+-Ukh5e+q{+rY8^7&w#6mK|7C;|L*u+ai!__tLm`>Z6$5ETMvLj?E+2 zFtQmL`d*pm;cyyfvb3stkgrJEyR8n@X@)!enV?Oj^!ncY@~n!o@Y=I#6#9x2P^3$H z7kY!5g~J8*Ir}sFa5!eKqd&b47sTvy@#k`ILBe_t3jc|G0+g&EFHtXUT+&$X_f(&fz#z>=pyYgFT;#<4`z1Bz3UV|^2IE$bw@e4G-~=9 z?Xctu^0KCy-$qOsM;DX7y_3+YgdPij7xF%&WM&n0pZfvKo}1Ro}f*Ts%Aeh{DLRUx87|vw;68*P`5aCWp#xJj%dbaaczm(Ws=(AQCn3 zo2d*pXo5>kLrDCH22@u`9ozGrVq5y8xNFnKOFWiAT3Bw6H@@_cfwFtZkwTWt9kwb1 zw-UIMVZDRlre}aW&c6YF2jVbNA6_!7vDtQ?I@UmNP3$b{o0dBE7^2N{2G#qSpp15v zEZr7f-N#v@+A6N>njEw?C2&pKXo3sta<8e=ZS zKz+5_Shw9(BrJlgG@_hpo^In|9{yxK_gWvY$&&o4_F9&B_8WYt7^V!h3!}Kb{EQA( zTI#(~5WUFpR9+{5be;?MPYgQYI5JHK^q0|hRpB^3;DubFLe z@l>V?M2F-i6JsJ*QU=PcG`3KiCFYu9Kd#Mw*9Hc_hUSoEFm?yy+v*RYM|iB=p$uDc zv_#wYb?g*5IX;$>@@_I6{k@piL7U z*{sZKZQKvt0!G>rpXwV!`UUH3b?g#YZ>i>|x>I!U&N}-05D-u^ci{xAaLyG9`7VO} zLj$1fg3oCh*#Y0FMXECTVchA>|$(w?X^H8(_9GW^IbJ{wEIzH#di3?n&!g_Kt4+K zE7r!j6&WgK<6IV+I6X#Du(6V(3cqF@wb-(V8l~KpvfC0qi~46f`m-~kMOIsE)&fT{ zq)j>R^H`r#&Er@ebltU@0cIDXDt5{s{~9(Jn5cSl|K;r3q;p$8*L&_q$5N=*sQ)R+ z&=CssIzZ5$x9mEwBnKZ~Lk2tLa3#!|&molZx*ty@ASCq?=sBOKX+&V|R>%3}tmi`V zFD=9+AB;V(iG?9rn5ibfKri521L<0d87Y++|4(^nD$mnQ8j*SfrXH42B5-d zk;hH$llKAp|BV&UB61c*RX-zQA73f|q$e^c^!K5n|B5NOe}%#R6)=8Jg+Pq$_l0Z7 z;$-+2o2_w=LSiJn%&NXrE%ELz0Xc=^4-0+8Pn#xX>=b*003w8zIDx&7-kTY1KkpSO zviI%(oqm3bjiLi>!)(98c`sOFfv-5QZ`E4l3;?tLgT?1Y_dQ5e(muN9rqVxj1+@Md z5&Uj2`l9|%1SZ!JC)u?Dr*@8`@H2PAP%y+3Kqn2rNTbd5{2Z%)v3i7C6-dqfBk77v zi#%8bq9p1es`+Bq<+v9~^IQ3>C5}549XM|J(nT<-@VMYsOZ5DyTd?_4u(OrMQn&YR zI4Zbp+u82yT<5~G$tJ{Mwj8w$Nw3fyZVU2)*UK;Yxb!oEQ8u*Mw#l}`r|6Etpauao z5J>OF6i@h_p$(vL{&@XxFdc4R%N}fDZ)kv%8B;XDr>l%NDam6Oax`o0 zK`;Drj$0qG(6BxNdhm|@l^1lQQ4j!*msAR02e zFZAdaRM^t{PduQ}_rN*lagaqKAo6Uokfmv|5U_{++DA4DW5TtBSD}ufBrqla_gVAWd>o9 zqid4XK-uhUmq2@q1+091Ek@sP)Op;n^@SfOX^^w-9v~D@>rU$@o}An4YJ3Uiw<%eVhjy2R$e{JKN!zQAN_~DJ1iH6 zz+Ab2H_M!w)|qGJ>C}H-^77<_8eezzg@aIL%8jxF+uF}U{kl5=+vuJ2Z=PfM*wu-} zyrU+2R){BDj9(d0z0#vL_3)ca+ZyYdcZT6QH#y?^RiSaVqTDL9@*w}V=2PxBC9<{u zgQLbS5>5-?U+SqzR$}jam~=|{w=v9n&k6k} zAOQ?SO_l3}1tD52*!)ZEQ*!SEmRNw{+T{73l2dZS`F*zB6NYOu(@%x1>wk2=|Mffk z(2mDJcIB5CNt7@`yFWO5@s(Nmu2x0hSC>=)?hFHm4ppnTPZ1)xq(joJATcBYC|&y! zqZmEh>(yF0=%YtqH5nV`Z-2@9+#b+42+R$iB@9p~FkIf1vdAp6dvVZLQ4X zK9aKBUSnN;w6Srkt0J-twOe+5w?q83N_1f6YI4b4^UDt1K1912c)(^G<-tCS9BZ~) zvRkv8SHiR!6l2sJ5kH?yx!uS}NUz$vvNzRoJAZdXlcJtq)l%lc!K^|BppC9a`r+4Lc04LV9D2Y4U4$FV(roCDuca>Ia$@0L%Mxt*h^ob z`)rG?rSRQ{9~vsJkcJqx0_@)5bOFG3LN87?9wk8&Utlsz)MCjG%-3~~Y%k2}@xxFq z3s85$<7K-GYnrI0gcPy%(5e&ENim7sL-n=l!e2%8RiM+Kt5z<$N;cK)xzfLF&AZQw zdOSb6@!MYBn7S$^)ZPTghHJ{~91KVLSM#{$(j>6jMoYK)D*IFh9RnRD?dwy_*9BOZ z-zCy&_YX#z<_y>7uue{Jcf}^nqzo4{ZnwC}Bi3G1ez!k7VBBlgjgIK{p}%liktOsx zZFaq|`>r|r_}rwQ$k_Un)32uA8PDQ4?qnK^^}15ZFlcI>Fj8@Kz>l{B)(2=RmlHt6 z%gYQyq)m`%%Ze`Z$?2T%kvGtW-Z3xGAvY&`Im|2hYjYPc|}>Pp~uhFKE-- z9b4*m>C%@j5H=H9TMy+()fkaDs>F9XE@<>!)bvFiTezPL|Nq)q{(0RBo+G$u@Z5$q SpnGDi)cC}i<0UYM$o~g)2A(tk literal 0 HcmV?d00001 diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md b/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md index 6da0de40a..69c5294fe 100755 --- a/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md @@ -1,28 +1,38 @@ # [1797.Design Authentication Manager][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 +There is an authentication system that works with authentication tokens. For each session, the user will receive a new authentication token that will expire `timeToLive` seconds after the `currentTime`. If the token is renewed, the expiry time will be **extended** to expire `timeToLive` seconds after the (potentially different) `currentTime`. -**Example 1:** +Implement the `AuthenticationManager` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `AuthenticationManager(int timeToLive)` constructs the `AuthenticationManager` and sets the `timeToLive`. +- `generate(string tokenId, int currentTime)` generates a new token with the given `tokenId` at the given `currentTime` in seconds. +- `renew(string tokenId, int currentTime)` renews the **unexpired** token with the given `tokenId` at the given `currentTime` in seconds. If there are no unexpired tokens with the given `tokenId`, the request is ignored, and nothing happens. +- `countUnexpiredTokens(int currentTime)` returns the number of **unexpired** tokens at the given currentTime. -## 题意 -> ... +Note that if a token expires at time `t`, and another action happens on time t (`renew` or `countUnexpiredTokens`), the expiration takes place **before** the other actions. -## 题解 +**Example 1:** -### 思路1 -> ... -Design Authentication Manager -```go -``` +![1](./1.png) +``` +Input +["AuthenticationManager", "renew", "generate", "countUnexpiredTokens", "generate", "renew", "renew", "countUnexpiredTokens"] +[[5], ["aaa", 1], ["aaa", 2], [6], ["bbb", 7], ["aaa", 8], ["bbb", 10], [15]] +Output +[null, null, null, 1, null, null, null, 0] + +Explanation +AuthenticationManager authenticationManager = new AuthenticationManager(5); // Constructs the AuthenticationManager with timeToLive = 5 seconds. +authenticationManager.renew("aaa", 1); // No token exists with tokenId "aaa" at time 1, so nothing happens. +authenticationManager.generate("aaa", 2); // Generates a new token with tokenId "aaa" at time 2. +authenticationManager.countUnexpiredTokens(6); // The token with tokenId "aaa" is the only unexpired one at time 6, so return 1. +authenticationManager.generate("bbb", 7); // Generates a new token with tokenId "bbb" at time 7. +authenticationManager.renew("aaa", 8); // The token with tokenId "aaa" expired at time 7, and 8 >= 7, so at time 8 the renew request is ignored, and nothing happens. +authenticationManager.renew("bbb", 10); // The token with tokenId "bbb" is unexpired at time 10, so the renew request is fulfilled and now the token will expire at time 15. +authenticationManager.countUnexpiredTokens(15); // The token with tokenId "bbb" expires at time 15, and the token with tokenId "aaa" expired at time 7, so currently no token is unexpired, so return 0. +``` ## 结语 diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go index d115ccf5e..c6e4a42e9 100644 --- a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +type AuthenticationManager struct { + live int64 + token map[string]int64 +} + +func Constructor(timeToLive int) AuthenticationManager { + return AuthenticationManager{live: int64(timeToLive), token: make(map[string]int64)} +} + +func (this *AuthenticationManager) Generate(tokenId string, currentTime int) { + this.token[tokenId] = int64(currentTime) + this.live +} + +func (this *AuthenticationManager) Renew(tokenId string, currentTime int) { + expired, ok := this.token[tokenId] + if !ok { + return + } + ic := int64(currentTime) + if expired > ic { + this.token[tokenId] = ic + this.live + } +} + +func (this *AuthenticationManager) CountUnexpiredTokens(currentTime int) int { + ans := 0 + ic := int64(currentTime) + for _, c := range this.token { + if c > ic { + ans++ + } + } + return ans +} + +type input struct { + op byte + token string + v int +} + +func Solution(n int, inputs []input) []int { + c := Constructor(n) + ans := make([]int, 0) + for _, op := range inputs { + if op.op == 'g' { + c.Generate(op.token, op.v) + continue + } + if op.op == 'r' { + c.Renew(op.token, op.v) + continue + } + ans = append(ans, c.CountUnexpiredTokens(op.v)) + } + return ans } diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go index 14ff50eb4..a4e003ec5 100644 --- a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + inputs []input + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, []input{ + {'r', "aaa", 1}, + {'g', "aaa", 2}, + {'c', "", 6}, + {'g', "bbb", 7}, + {'r', "aaa", 8}, + {'r', "bbb", 10}, + {'c', "", 15}, + }, []int{1, 0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.inputs) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.inputs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ff5f109ad95123aa4e4f31af65b16ccb264ded34 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 21 Apr 2025 09:15:07 +0800 Subject: [PATCH 259/450] Add solution and test-cases for problem 2145 --- .../2145.Count-the-Hidden-Sequences/README.md | 47 ++++++++++++++----- .../Solution.go | 24 +++++++++- .../Solution_test.go | 23 ++++----- 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md index eaa01e830..4658816d3 100755 --- a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md +++ b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md @@ -1,28 +1,49 @@ # [2145.Count the Hidden Sequences][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 a **0-indexed** array of `n` integers `differences`, which describes the **differences** between each pair of **consecutive** integers of a **hidden** sequence of length `(n + 1)`. More formally, call the `hidden` sequence hidden, then we have that `differences[i] = hidden[i + 1] - hidden[i]`. + +You are further given two integers `lower` and `upper` that describe the **inclusive** range of values `[lower, upper]` that the hidden sequence can contain. + +- For example, given `differences = [1, -3, 4]`, `lower = 1`, `upper = 6`, the hidden sequence is a sequence of length `4` whose elements are in between `1` and `6` (**inclusive**). + + - `[3, 4, 1, 5]` and `[4, 5, 2, 6]` are possible hidden sequences. + - `[5, 6, 3, 7]` is not possible since it contains an element greater than `6`. + - `[1, 2, 3, 4]` is not possible since the differences are not correct. + +Return the number of **possible** hidden sequences there are. If there are no possible sequences, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: differences = [1,-3,4], lower = 1, upper = 6 +Output: 2 +Explanation: The possible hidden sequences are: +- [3, 4, 1, 5] +- [4, 5, 2, 6] +Thus, we return 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count the Hidden Sequences -```go ``` +Input: differences = [3,-4,5,1,-2], lower = -4, upper = 5 +Output: 4 +Explanation: The possible hidden sequences are: +- [-3, 0, -4, 1, 2, 0] +- [-2, 1, -3, 2, 3, 1] +- [-1, 2, -2, 3, 4, 2] +- [0, 3, -1, 4, 5, 3] +Thus, we return 4. +``` + +**Example 3:** +``` +Input: differences = [4,-7,2], lower = 3, upper = 6 +Output: 0 +Explanation: There are no possible hidden sequences. Thus, we return 0. +``` ## 结语 diff --git a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go index d115ccf5e..5bc061d21 100644 --- a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go +++ b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func Solution(differences []int, lower int, upper int) int { + sum := int64(0) + var maxSum, minSum int64 + maxSum, minSum = int64(0), math.MaxInt64 + for _, n := range differences { + sum += int64(n) + maxSum = max(sum, maxSum) + minSum = min(sum, minSum) + } + + ans := 0 + il, ip := int64(lower), int64(upper) + for i := lower; i <= upper; i++ { + a := int64(i) + maxSum + b := int64(i) + minSum + if a >= il && a <= ip && b >= il && b <= ip { + ans++ + } + } + return ans } diff --git a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution_test.go b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution_test.go index 14ff50eb4..2fe381d4f 100644 --- a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution_test.go +++ b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + differences []int + lower, upper int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, -3, 4}, 1, 6, 2}, + {"TestCase2", []int{3, -4, 5, 1, -2}, -4, 5, 4}, + {"TestCase3", []int{4, -7, 2}, 3, 6, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.differences, c.lower, c.upper) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.differences, c.lower, c.upper) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c1a077cb15eb4160be6327f3d2ffc783bb11aa9f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 22 Apr 2025 09:22:21 +0800 Subject: [PATCH 260/450] Add solution and test-cases for problem 2338 --- .../README.md | 43 ++++++++----- .../Solution.go | 62 ++++++++++++++++++- .../Solution_test.go | 21 +++---- 3 files changed, 99 insertions(+), 27 deletions(-) diff --git a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md index d50e3f325..2d69c179a 100755 --- a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md +++ b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md @@ -1,28 +1,43 @@ # [2338.Count the Number of Ideal Arrays][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 two integers `n` and `maxValue`, which are used to describe an **ideal** array. + +A **0-indexed** integer array `arr` of length `n` is considered **ideal** if the following conditions hold: + +- Every `arr[i]` is a value from `1` to `maxValue`, for `0 <= i < n`. +- Every `arr[i]` is divisible by `arr[i - 1]`, for `0 < i < n`. + +Return the number of **distinct** ideal arrays of length `n`. Since the answer may be very large, return it modulo `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2, maxValue = 5 +Output: 10 +Explanation: The following are the possible ideal arrays: +- Arrays starting with the value 1 (5 arrays): [1,1], [1,2], [1,3], [1,4], [1,5] +- Arrays starting with the value 2 (2 arrays): [2,2], [2,4] +- Arrays starting with the value 3 (1 array): [3,3] +- Arrays starting with the value 4 (1 array): [4,4] +- Arrays starting with the value 5 (1 array): [5,5] +There are a total of 5 + 2 + 1 + 1 + 1 = 10 distinct ideal arrays. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count the Number of Ideal Arrays -```go ``` - +Input: n = 5, maxValue = 3 +Output: 11 +Explanation: The following are the possible ideal arrays: +- Arrays starting with the value 1 (9 arrays): + - With no other distinct values (1 array): [1,1,1,1,1] + - With 2nd distinct value 2 (4 arrays): [1,1,1,1,2], [1,1,1,2,2], [1,1,2,2,2], [1,2,2,2,2] + - With 2nd distinct value 3 (4 arrays): [1,1,1,1,3], [1,1,1,3,3], [1,1,3,3,3], [1,3,3,3,3] +- Arrays starting with the value 2 (1 array): [2,2,2,2,2] +- Arrays starting with the value 3 (1 array): [3,3,3,3,3] +There are a total of 9 + 1 + 1 = 11 distinct ideal arrays. +``` ## 结语 diff --git a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go index d115ccf5e..680447b2b 100644 --- a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go +++ b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { - return x +const ( + MOD int = 1e9 + 7 + MAX_N = 10010 + MAX_P = 15 // There are up to 15 prime factors +) + +var ( + c [MAX_N + MAX_P][MAX_P + 1]int + sieve [MAX_N]int // Minimum prime factor + ps [MAX_N][]int // List of prime factor counts +) + +func initialize() { + if c[0][0] != 0 { + return + } + + for i := 2; i < MAX_N; i++ { + if sieve[i] == 0 { + for j := i; j < MAX_N; j += i { + if sieve[j] == 0 { + sieve[j] = i + } + } + } + } + + for i := 2; i < MAX_N; i++ { + x := i + for x > 1 { + p := sieve[x] + cnt := 0 + for x%p == 0 { + x /= p + cnt++ + } + ps[i] = append(ps[i], cnt) + } + } + + c[0][0] = 1 + for i := 1; i < MAX_N+MAX_P; i++ { + c[i][0] = 1 + for j := 1; j <= MAX_P && j <= i; j++ { + c[i][j] = (c[i-1][j] + c[i-1][j-1]) % MOD + } + } +} + +func Solution(n int, maxValue int) int { + initialize() + ans := 0 + for x := 1; x <= maxValue; x++ { + mul := 1 + for _, p := range ps[x] { + mul = mul * c[n+p-1][p] % MOD + } + ans = (ans + mul) % MOD + } + return ans } diff --git a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution_test.go b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution_test.go index 14ff50eb4..f7fb76188 100644 --- a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution_test.go +++ b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, maxValue int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 5, 10}, + {"TestCase2", 5, 3, 11}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.maxValue) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.maxValue) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 108da1c511daef74caab04e9b9bbaa13e0055c68 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 23 Apr 2025 09:25:22 +0800 Subject: [PATCH 261/450] Add solution and test-cases for problem 3342 --- .../README.md | 49 +++++++++++---- .../Solution.go | 60 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 103 insertions(+), 20 deletions(-) diff --git a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md index c2bf27985..b8b0e11cf 100755 --- a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md +++ b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/README.md @@ -1,28 +1,53 @@ # [3342.Find Minimum Time to Reach Last Room II][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 +There is a dungeon with `n x m` rooms arranged as a grid. + +You are given a 2D array `moveTime` of size `n x m`, where `moveTime[i][j]` represents the **minimum** time in seconds when you can **start moving** to that room. You start from the room `(0, 0)` at time `t = 0` and can move to an **adjacent** room. Moving between **adjacent** rooms takes one second for one move and two seconds for the next, **alternating** between the two. + +Return the **minimum** time to reach the room `(n - 1, m - 1)`. + +Two rooms are **adjacent** if they share a common wall, either horizontally or vertically. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: moveTime = [[0,4],[4,4]] + +Output: 7 + +Explanation: + +The minimum time required is 7 seconds. + +At time t == 4, move from room (0, 0) to room (1, 0) in one second. +At time t == 5, move from room (1, 0) to room (1, 1) in two seconds. +``` + +**Example 2:** + ``` +Input: moveTime = [[0,0,0,0],[0,0,0,0]] + +Output: 6 -## 题意 -> ... +Explanation: -## 题解 +The minimum time required is 6 seconds. -### 思路1 -> ... -Find Minimum Time to Reach Last Room II -```go +At time t == 0, move from room (0, 0) to room (1, 0) in one second. +At time t == 1, move from room (1, 0) to room (1, 1) in two seconds. +At time t == 3, move from room (1, 1) to room (1, 2) in one second. +At time t == 4, move from room (1, 2) to room (1, 3) in two seconds. ``` +**Example 3:** + +``` +Input: moveTime = [[0,1],[1,2]] + +Output: 4 +``` ## 结语 diff --git a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go index d115ccf5e..93fc724fd 100644 --- a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go +++ b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap3342 [][4]int + +func (h *heap3342) Len() int { + return len(*h) +} + +func (h *heap3342) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap3342) Less(i, j int) bool { + return (*h)[i][2] < (*h)[j][2] +} + +func (h *heap3342) Push(x any) { + *h = append(*h, x.([4]int)) +} + +func (h *heap3342) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +var dirs3342 = [][2]int{ + {0, 1}, {0, -1}, {-1, 0}, {1, 0}, +} + +func Solution(moveTime [][]int) int { + m, n := len(moveTime), len(moveTime[0]) + h := heap3342{{0, 0, 0, 1}} + visited := map[[2]int]struct{}{ + [2]int{0, 0}: {}, + } + for h.Len() > 0 { + top := heap.Pop(&h).([4]int) + if top[0] == m-1 && top[1] == n-1 { + return top[2] + } + for _, dir := range dirs3342 { + nx, ny := top[0]+dir[0], top[1]+dir[1] + if nx >= 0 && nx < m && ny >= 0 && ny < n { + if _, ok := visited[[2]int{nx, ny}]; !ok { + visited[[2]int{nx, ny}] = struct{}{} + cost := moveTime[nx][ny] + if cost <= top[2] { + cost = top[2] + top[3] + } else { + cost += top[3] + } + heap.Push(&h, [4]int{nx, ny, cost, 3 - top[3]}) + } + } + } + } + return -1 +} diff --git a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go index 14ff50eb4..d4d6d8ce8 100644 --- a/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go +++ b/leetcode/3301-3400/3342.Find-Minimum-Time-to-Reach-Last-Room-II/Solution_test.go @@ -10,12 +10,12 @@ 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{{0, 4}, {4, 4}}, 7}, + {"TestCase2", [][]int{{0, 0, 0, 0}, {0, 0, 0, 0}}, 6}, + {"TestCase3", [][]int{{0, 1}, {1, 2}}, 4}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2edb4388bcb75d050550e13a3fecaa58d4c9dd5c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 24 Apr 2025 09:24:59 +0800 Subject: [PATCH 262/450] Add solution and test-cases for problem 337 --- leetcode/301-400/0337.House-Robber-III/1.jpg | Bin 0 -> 11037 bytes leetcode/301-400/0337.House-Robber-III/2.jpg | Bin 0 -> 13065 bytes .../301-400/0337.House-Robber-III/README.md | 32 ++++++------ .../301-400/0337.House-Robber-III/Solution.go | 49 +++++++++++++++++- .../0337.House-Robber-III/Solution_test.go | 21 +++++--- 5 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 leetcode/301-400/0337.House-Robber-III/1.jpg create mode 100644 leetcode/301-400/0337.House-Robber-III/2.jpg diff --git a/leetcode/301-400/0337.House-Robber-III/1.jpg b/leetcode/301-400/0337.House-Robber-III/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e4081a116f7b5ee50bade5ba9a4bbc36584bcb8 GIT binary patch literal 11037 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 Hhxz{l#zwAF literal 0 HcmV?d00001 diff --git a/leetcode/301-400/0337.House-Robber-III/README.md b/leetcode/301-400/0337.House-Robber-III/README.md index 3c918ffdc..397634a52 100644 --- a/leetcode/301-400/0337.House-Robber-III/README.md +++ b/leetcode/301-400/0337.House-Robber-III/README.md @@ -1,28 +1,30 @@ # [337.House Robber III][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 +The thief has found himself a new place for his thievery again. There is only one entrance to this area, called `root`. -**Example 1:** +Besides the `root`, each house has one and only one parent house. After a tour, the smart thief realized that all houses in this place form a binary tree. It will automatically contact the police if **two directly-linked houses were broken into on the same night**. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Given the `root` of the binary tree, return the maximum amount of money the thief can rob **without alerting the police**. -## 题意 -> ... +**Example 1:** -## 题解 +![1](./1.jpg) -### 思路1 -> ... -House Robber III -```go +``` +Input: root = [3,2,3,null,3,null,1] +Output: 7 +Explanation: Maximum amount of money the thief can rob = 3 + 3 + 1 = 7. ``` +**Example 2:** + +![2](./2.jpg) +``` +Input: root = [3,4,5,1,3,null,1] +Output: 9 +Explanation: Maximum amount of money the thief can rob = 4 + 5 = 9. +``` ## 结语 diff --git a/leetcode/301-400/0337.House-Robber-III/Solution.go b/leetcode/301-400/0337.House-Robber-III/Solution.go index d115ccf5e..dea53ffac 100644 --- a/leetcode/301-400/0337.House-Robber-III/Solution.go +++ b/leetcode/301-400/0337.House-Robber-III/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + cache := make(map[*TreeNode][2]int) + var dfs func(*TreeNode, bool) int + dfs = func(tree *TreeNode, selectedParent bool) int { + if tree == nil { + return 0 + } + if selectedParent { + v, ok := cache[tree] + if ok { + if v[0] != -1 { + return v[0] + } + } + left := dfs(tree.Left, false) + right := dfs(tree.Right, false) + if !ok { + v = [2]int{left + right, -1} + } else { + v[0] = left + right + } + cache[tree] = v + return v[0] + } + v, ok := cache[tree] + if !ok { + v = [2]int{-1, -1} + } + if v[0] == -1 { + left := dfs(tree.Left, false) + right := dfs(tree.Right, false) + v[0] = left + right + } + if v[1] == -1 { + left1 := dfs(tree.Left, true) + right1 := dfs(tree.Right, true) + v[1] = left1 + right1 + tree.Val + } + cache[tree] = v + return max(v[0], v[1]) + } + return dfs(root, false) } diff --git a/leetcode/301-400/0337.House-Robber-III/Solution_test.go b/leetcode/301-400/0337.House-Robber-III/Solution_test.go index 14ff50eb4..2f466c2c2 100644 --- a/leetcode/301-400/0337.House-Robber-III/Solution_test.go +++ b/leetcode/301-400/0337.House-Robber-III/Solution_test.go @@ -10,12 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 2, Right: &TreeNode{Val: 3}}, + Right: &TreeNode{Val: 3, Right: &TreeNode{Val: 1}}, + }, 7}, + {"TestCase2", &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 4, Left: &TreeNode{Val: 1}, Right: &TreeNode{Val: 3}}, + Right: &TreeNode{Val: 5, Right: &TreeNode{Val: 1}}, + }, 9}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e14587b55f4c14d0f0a49a1d752c3aedc07fa07a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 25 Apr 2025 22:44:58 +0800 Subject: [PATCH 263/450] Add solution and test-cases for problem 2845 --- .../README.md | 54 +++++++++++++++++++ .../Solution.go | 16 ++++++ .../Solution_test.go | 39 ++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/README.md create mode 100755 leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution.go create mode 100755 leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution_test.go diff --git a/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/README.md b/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/README.md new file mode 100644 index 000000000..5672d1599 --- /dev/null +++ b/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/README.md @@ -0,0 +1,54 @@ +# [2845.Count of Interesting Subarrays][title] + +## Description +You are given a **0-indexed** integer array `nums`, an integer `modulo`, and an integer `k`. + +Your task is to find the count of subarrays that are **interesting**. + +A **subarray** `nums[l..r]` is **interesting** if the following condition holds: + +- Let `cnt` be the number of indices `i` in the range `[l, r]` such that `nums[i] % modulo == k`. Then, `cnt % modulo == k`. + +Return an integer denoting the count of interesting subarrays. + +**Note**: A subarray is a contiguous non-empty sequence of elements within an array. + +**Example 1:** + +``` +Input: nums = [3,2,4], modulo = 2, k = 1 +Output: 3 +Explanation: In this example the interesting subarrays are: +The subarray nums[0..0] which is [3]. +- There is only one index, i = 0, in the range [0, 0] that satisfies nums[i] % modulo == k. +- Hence, cnt = 1 and cnt % modulo == k. +The subarray nums[0..1] which is [3,2]. +- There is only one index, i = 0, in the range [0, 1] that satisfies nums[i] % modulo == k. +- Hence, cnt = 1 and cnt % modulo == k. +The subarray nums[0..2] which is [3,2,4]. +- There is only one index, i = 0, in the range [0, 2] that satisfies nums[i] % modulo == k. +- Hence, cnt = 1 and cnt % modulo == k. +It can be shown that there are no other interesting subarrays. So, the answer is 3. +``` + +**Example 2:** + +``` +Input: nums = [3,1,9,6], modulo = 3, k = 0 +Output: 2 +Explanation: In this example the interesting subarrays are: +The subarray nums[0..3] which is [3,1,9,6]. +- There are three indices, i = 0, 2, 3, in the range [0, 3] that satisfy nums[i] % modulo == k. +- Hence, cnt = 3 and cnt % modulo == k. +The subarray nums[1..1] which is [1]. +- There is no index, i, in the range [1, 1] that satisfies nums[i] % modulo == k. +- Hence, cnt = 0 and cnt % modulo == k. +It can be shown that there are no other interesting subarrays. So, the answer is 2. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-of-interesting-subarrays +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution.go b/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution.go new file mode 100755 index 000000000..254b572e6 --- /dev/null +++ b/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution.go @@ -0,0 +1,16 @@ +package Solution + +func Solution(nums []int, modulo int, k int) int64 { + cache := make(map[int]int) + var res int64 = 0 + cnt := 0 + cache[0] = 1 + for _, n := range nums { + if n%modulo == k { + cnt++ + } + res += int64(cache[(cnt-k+modulo)%modulo]) + cache[cnt%modulo]++ + } + return res +} diff --git a/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution_test.go b/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution_test.go new file mode 100755 index 000000000..ba789bb9b --- /dev/null +++ b/leetcode/2801-2900/2845.Count-of-Interesting-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + modulo, k int + expect int64 + }{ + {"TestCase1", []int{3, 2, 4}, 2, 1, 3}, + {"TestCase2", []int{3, 1, 9, 6}, 3, 0, 2}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs, c.modulo, c.k) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.inputs, c.modulo, c.k) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 3b2ad858bf07193ab101c2d529c6adbad18ca2ee Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 26 Apr 2025 16:17:10 +0800 Subject: [PATCH 264/450] Add solution and test-cases for problem 125 --- .../101-200/0125.Valid-Palindrome/README.md | 38 ++++++++++++++++++ .../101-200/0125.Valid-Palindrome/Solution.go | 39 ++++++++++++++++++- .../0125.Valid-Palindrome/Solution_test.go | 12 +++--- 3 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 leetcode/101-200/0125.Valid-Palindrome/README.md diff --git a/leetcode/101-200/0125.Valid-Palindrome/README.md b/leetcode/101-200/0125.Valid-Palindrome/README.md new file mode 100644 index 000000000..33328ddba --- /dev/null +++ b/leetcode/101-200/0125.Valid-Palindrome/README.md @@ -0,0 +1,38 @@ +# [125.Valid Palindrome][title] + +## Description +A phrase is a **palindrome** if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers. + +Given a string `s`, return `true` if it is a **palindrome**, or `false` otherwise. + +**Example 1:** + +``` +Input: s = "A man, a plan, a canal: Panama" +Output: true +Explanation: "amanaplanacanalpanama" is a palindrome. +``` + +**Example 2:** + +``` +Input: s = "race a car" +Output: false +Explanation: "raceacar" is not a palindrome. +``` + +**Example 3:** + +``` +Input: s = " " +Output: true +Explanation: s is an empty string "" after removing non-alphanumeric characters. +Since an empty string reads the same forward and backward, it is a palindrome. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/valid-palindrome +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0125.Valid-Palindrome/Solution.go b/leetcode/101-200/0125.Valid-Palindrome/Solution.go index d115ccf5e..f0e5edf1e 100644 --- a/leetcode/101-200/0125.Valid-Palindrome/Solution.go +++ b/leetcode/101-200/0125.Valid-Palindrome/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) bool { + var is func(byte) byte + is = func(b byte) byte { + if b >= '0' && b <= '9' { + return b + } + if b >= 'a' && b <= 'z' { + return b + } + if b >= 'A' && b <= 'Z' { + return b + 32 + } + return byte(' ') + } + l, r := 0, len(s)-1 + var bl, br byte + for l < r { + for ; l < r; l++ { + bl = is(s[l]) + if bl != byte(' ') { + break + } + } + for ; l < r; r-- { + br = is(s[r]) + if br != byte(' ') { + break + } + } + if l < r { + if bl != br { + return false + } + l, r = l+1, r-1 + } + } + return true } diff --git a/leetcode/101-200/0125.Valid-Palindrome/Solution_test.go b/leetcode/101-200/0125.Valid-Palindrome/Solution_test.go index 14ff50eb4..fb9a42d04 100644 --- a/leetcode/101-200/0125.Valid-Palindrome/Solution_test.go +++ b/leetcode/101-200/0125.Valid-Palindrome/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "A man, a plan, a canal: Panama", true}, + {"TestCase2", "race a car", false}, + {"TestCase3", " ", true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 705cdb0c3fa659dfb2a50ab97b3d144722928e6c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Apr 2025 09:06:39 +0800 Subject: [PATCH 265/450] Add solution and test-cases for problem 3392 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 13 +++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md index c4ee87319..e0e9f418f 100755 --- a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md +++ b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/README.md @@ -1,28 +1,31 @@ # [3392.Count Subarrays of Length Three With a Condition][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 +Given an integer array `nums`, return the number of subarrays of length 3 such that the sum of the first and third numbers equals exactly half of the second number. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,2,1,4,1] + +Output: 1 + +Explanation: -## 题意 -> ... +Only the subarray [1,4,1] contains exactly 3 elements where the sum of the first and third numbers equals half the middle number. +``` -## 题解 +**Example 2:** -### 思路1 -> ... -Count Subarrays of Length Three With a Condition -```go ``` +Input: nums = [1,1,1] + +Output: 0 +Explanation: + +[1,1,1] is the only subarray of length 3. However, its first and third numbers do not add to half the middle number. +``` ## 结语 diff --git a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go index d115ccf5e..e641c95e1 100644 --- a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go +++ b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + ans := 0 + for i := 0; i < len(nums)-2; i++ { + a := nums[i] + b := nums[i+1] + c := nums[i+2] + if (a+c)*2 == b { + ans++ + } + } + return ans } diff --git a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution_test.go b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution_test.go index 14ff50eb4..5274133ee 100644 --- a/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/Solution_test.go +++ b/leetcode/3301-3400/3392.Count-Subarrays-of-Length-Three-With-a-Condition/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, 1, 4, 1}, 1}, + {"TestCase2", []int{1, 1, 1}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 64f710d0c82a688496574ac37add5d57f67d7b97 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 28 Apr 2025 09:22:10 +0800 Subject: [PATCH 266/450] Add solution and test-cases for problem 3211 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 17 ++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md index 873cf1a45..169771c3c 100755 --- a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md +++ b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md @@ -1,28 +1,35 @@ # [3211.Generate Binary Strings Without Adjacent Zeros][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 a positive integer `n`. + +A binary string `x` is **valid** if all substrings of `x` of length 2 contain **at least** one `"1"`. + +Return all **valid** strings with length `n`, in any order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: n = 3 + +Output: ["010","011","101","110","111"] -## 题意 -> ... +Explanation: -## 题解 +The valid strings of length 3 are: "010", "011", "101", "110", and "111". +``` + +**Example 2:** -### 思路1 -> ... -Generate Binary Strings Without Adjacent Zeros -```go ``` +Input: n = 1 + +Output: ["0","1"] +Explanation: + +The valid strings of length 1 are: "0" and "1". +``` ## 结语 diff --git a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go index d115ccf5e..8e24f5421 100644 --- a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go +++ b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) []string { + var res []string + var dfs func(int, string, bool) + dfs = func(index int, cur string, isZero bool) { + if index == n { + res = append(res, cur) + return + } + if !isZero { + dfs(index+1, cur+"0", true) + } + dfs(index+1, cur+"1", false) + } + dfs(0, "", false) + return res } diff --git a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go index 14ff50eb4..b5e23cc8f 100644 --- a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go +++ b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, []string{"010", "011", "101", "110", "111"}}, + {"TestCase2", 1, []string{"0", "1"}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 521bbeaeb986ace28dbfa4e24b4f2a92783dfd2b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 29 Apr 2025 09:12:33 +0800 Subject: [PATCH 267/450] Add solution and test-cases for problem 2294 --- .../README.md | 46 +++++++++++++------ .../Solution.go | 17 ++++++- .../Solution_test.go | 21 +++++---- 3 files changed, 59 insertions(+), 25 deletions(-) diff --git a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md index 0cc0092be..5ed9dd9f5 100755 --- a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md +++ b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md @@ -1,28 +1,48 @@ # [2294.Partition Array Such That Maximum Difference Is K][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 integer array `nums` and an integer `k`. You may partition `nums` into one or more **subsequences** such that each element in `nums` appears in **exactly** one of the subsequences. + +Return the **minimum** number of subsequences needed such that the difference between the maximum and minimum values in each subsequence is **at most** `k`. + +A **subsequence** is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,6,1,2,5], k = 2 +Output: 2 +Explanation: +We can partition nums into the two subsequences [3,1,2] and [6,5]. +The difference between the maximum and minimum value in the first subsequence is 3 - 1 = 2. +The difference between the maximum and minimum value in the second subsequence is 6 - 5 = 1. +Since two subsequences were created, we return 2. It can be shown that 2 is the minimum number of subsequences needed. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Partition Array Such That Maximum Difference Is K -```go ``` +Input: nums = [1,2,3], k = 1 +Output: 2 +Explanation: +We can partition nums into the two subsequences [1,2] and [3]. +The difference between the maximum and minimum value in the first subsequence is 2 - 1 = 1. +The difference between the maximum and minimum value in the second subsequence is 3 - 3 = 0. +Since two subsequences were created, we return 2. Note that another optimal solution is to partition nums into the two subsequences [1] and [2,3]. +``` + +**Example 3:** +``` +Input: nums = [2,2,4,5], k = 0 +Output: 3 +Explanation: +We can partition nums into the three subsequences [2,2], [4], and [5]. +The difference between the maximum and minimum value in the first subsequences is 2 - 2 = 0. +The difference between the maximum and minimum value in the second subsequences is 4 - 4 = 0. +The difference between the maximum and minimum value in the third subsequences is 5 - 5 = 0. +Since three subsequences were created, we return 3. It can be shown that 3 is the minimum number of subsequences needed. +``` ## 结语 diff --git a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go index d115ccf5e..2a1979f76 100644 --- a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go +++ b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int) int { + sort.Ints(nums) + ans := 0 + start := 0 + l := len(nums) + for start < l { + i := sort.Search(l, func(i int) bool { + return nums[i] > nums[start]+k + }) + ans++ + start = i + } + return ans } diff --git a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution_test.go b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution_test.go index 14ff50eb4..f54c0e956 100644 --- a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution_test.go +++ b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 6, 1, 2, 5}, 2, 2}, + {"TestCase2", []int{1, 2, 3}, 1, 2}, + {"TestCase3", []int{2, 2, 4, 5}, 0, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2fdec23e4afa7f2db0d02a09a9c395baca033617 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 30 Apr 2025 09:19:10 +0800 Subject: [PATCH 268/450] Add solution and test-cases for problem 1295 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 19 ++++++++++++ .../Solution_test.go | 28 +++++++++++++++-- 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/README.md b/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/README.md index 5b890ee55..ab876a74b 100644 --- a/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/README.md +++ b/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/README.md @@ -1,28 +1,30 @@ # [1295.Find Numbers with Even Number of Digits][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 +Given an array `nums` of integers, return how many of them contain an **even number** of digits. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [12,345,2,6,7896] +Output: 2 +Explanation: +12 contains 2 digits (even number of digits). +345 contains 3 digits (odd number of digits). +2 contains 1 digit (odd number of digits). +6 contains 1 digit (odd number of digits). +7896 contains 4 digits (even number of digits). +Therefore only 12 and 7896 contain an even number of digits. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Numbers with Even Number of Digits -```go ``` - +Input: nums = [555,901,482,1771] +Output: 1 +Explanation: +Only 1771 contains an even number of digits. +``` ## 结语 diff --git a/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution.go b/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution.go index 629717485..44ce560ac 100644 --- a/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution.go +++ b/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution.go @@ -12,3 +12,22 @@ func Solution(nums []int) int { } return count } + +func Solution1(nums []int) int { + var isEven func(int) bool + isEven = func(n int) bool { + c := 0 + for n > 0 { + n /= 10 + c++ + } + return c&1 == 0 + } + ans := 0 + for _, n := range nums { + if isEven(n) { + ans++ + } + } + return ans +} diff --git a/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution_test.go b/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution_test.go index 3326b3f71..46dcd69da 100644 --- a/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution_test.go +++ b/leetcode/1201-1300/1295.Find-Numbers-with-Even-Number-of-Digits/Solution_test.go @@ -30,10 +30,34 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + expect int + }{ + {"TestCase", []int{124123, 13425, 123, 65, 1, 54362, 134, 6543, 213}, 3}, + {"TestCase", []int{}, 0}, + {"TestCase", []int{4253626756, 3245876, 2345897, 23490}, 1}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution1(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 806408ae9817196c30a933ba0f35e9a3a2c78b77 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 2 May 2025 16:53:40 +0800 Subject: [PATCH 269/450] Add solution and test-cases for problem 417 --- .../0417.Pacific-Atlantic-Water-Flow/1.jpg | Bin 0 -> 45313 bytes .../README.md | 48 +++++++---- .../Solution.go | 75 +++++++++++++++++- .../Solution_test.go | 17 ++-- 4 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/1.jpg diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/1.jpg b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..825101273940838f795a3e72f93af97cfed7cd21 GIT binary patch literal 45313 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 literal 0 HcmV?d00001 diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md index 9d7eb01c3..edb225691 100644 --- a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md +++ b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md @@ -1,28 +1,46 @@ # [417.Pacific Atlantic Water Flow][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 +There is an `m x n` rectangular island that borders both the **Pacific Ocean** and **Atlantic Ocean**. The **Pacific Ocean** touches the island's left and top edges, and the **Atlantic Ocean** touches the island's right and bottom edges. -**Example 1:** +The island is partitioned into a grid of square cells. You are given an `m x n` integer matrix `heights` where `heights[r][c]` represents the **height above sea level** of the cell at coordinate `(r, c)`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +The island receives a lot of rain, and the rain water can flow to neighboring cells directly north, south, east, and west if the neighboring cell's height is **less than or equal to** the current cell's height. Water can flow from any cell adjacent to an ocean into the ocean. + +Return a **2D list** of grid coordinates `result` where `result[i] = [ri, ci]` denotes that rain water can flow from cell `(ri, ci)` to **both** the Pacific and Atlantic oceans. -## 题意 -> ... +**Example 1:** -## 题解 +![1](./1.jpg) -### 思路1 -> ... -Pacific Atlantic Water Flow -```go ``` +Input: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]] +Output: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]] +Explanation: The following cells can flow to the Pacific and Atlantic oceans, as shown below: +[0,4]: [0,4] -> Pacific Ocean + [0,4] -> Atlantic Ocean +[1,3]: [1,3] -> [0,3] -> Pacific Ocean + [1,3] -> [1,4] -> Atlantic Ocean +[1,4]: [1,4] -> [1,3] -> [0,3] -> Pacific Ocean + [1,4] -> Atlantic Ocean +[2,2]: [2,2] -> [1,2] -> [0,2] -> Pacific Ocean + [2,2] -> [2,3] -> [2,4] -> Atlantic Ocean +[3,0]: [3,0] -> Pacific Ocean + [3,0] -> [4,0] -> Atlantic Ocean +[3,1]: [3,1] -> [3,0] -> Pacific Ocean + [3,1] -> [4,1] -> Atlantic Ocean +[4,0]: [4,0] -> Pacific Ocean + [4,0] -> Atlantic Ocean +Note that there are other possible paths for these cells to flow to the Pacific and Atlantic oceans. +``` + +**Example 2:** +``` +Input: heights = [[1]] +Output: [[0,0]] +Explanation: The water can flow from the only cell to the Pacific and Atlantic oceans. +``` ## 结语 diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go index d115ccf5e..49eeaa936 100644 --- a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go +++ b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go @@ -1,5 +1,76 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(heights [][]int) [][]int { + m, n := len(heights), len(heights[0]) + state := make([][]int, m) + pacific, atlantic := 1, 2 + for i := 0; i < m; i++ { + state[i] = make([]int, n) + } + for i := 0; i < n-1; i++ { + state[0][i] = pacific + state[m-1][i+1] = atlantic + } + for i := 0; i < m-1; i++ { + state[i][0] = pacific + state[i+1][n-1] = atlantic + } + + state[0][n-1] = 3 + state[m-1][0] = 3 + var ( + leftTop func(int, int, int) + rightBottom func(int, int, int) + ) + leftTop = func(x, y, pre int) { + if x < 0 || x >= m || y < 0 || y >= n { + return + } + if pre != -1 && state[x][y]&pacific == pacific { + return + } + if heights[x][y] < pre { + return + } + state[x][y] |= pacific + leftTop(x-1, y, heights[x][y]) + leftTop(x+1, y, heights[x][y]) + leftTop(x, y+1, heights[x][y]) + leftTop(x, y-1, heights[x][y]) + } + rightBottom = func(x, y, pre int) { + if x < 0 || x >= m || y < 0 || y >= n { + return + } + if heights[x][y] < pre { + return + } + if pre != -1 && state[x][y]&atlantic == atlantic { + return + } + state[x][y] |= atlantic + rightBottom(x-1, y, heights[x][y]) + rightBottom(x+1, y, heights[x][y]) + rightBottom(x, y-1, heights[x][y]) + rightBottom(x, y+1, heights[x][y]) + } + + for i := 0; i < n; i++ { + leftTop(0, i, -1) + rightBottom(m-1, i, -1) + } + for i := 0; i < m; i++ { + leftTop(i, 0, -1) + rightBottom(i, n-1, -1) + } + res := make([][]int, 0) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if state[i][j] == 3 { + res = append(res, []int{i, j}) + } + } + } + + return res } diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go index 14ff50eb4..ba5d796c6 100644 --- a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go +++ b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go @@ -10,12 +10,15 @@ 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, 5}, {3, 2, 3, 4, 4}, {2, 4, 5, 3, 1}, {6, 7, 1, 4, 5}, {5, 1, 1, 2, 4}, + }, [][]int{ + {0, 4}, {1, 3}, {1, 4}, {2, 2}, {3, 0}, {3, 1}, {4, 0}, + }}, + {"TestCase2", [][]int{{1}}, [][]int{{0, 0}}}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 37d49e4099336533b7e96aaac647c377064a24be Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 3 May 2025 14:13:08 +0800 Subject: [PATCH 270/450] Add solution and test-cases for problem 822 --- .../801-900/0822.Card-Flipping-Game/README.md | 31 +++++++------- .../0822.Card-Flipping-Game/Solution.go | 40 ++++++++++++++++++- .../0822.Card-Flipping-Game/Solution_test.go | 21 +++++----- 3 files changed, 65 insertions(+), 27 deletions(-) diff --git a/leetcode/801-900/0822.Card-Flipping-Game/README.md b/leetcode/801-900/0822.Card-Flipping-Game/README.md index 2226d2943..59a742fc7 100644 --- a/leetcode/801-900/0822.Card-Flipping-Game/README.md +++ b/leetcode/801-900/0822.Card-Flipping-Game/README.md @@ -1,28 +1,31 @@ # [822.Card Flipping Game][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 two **0-indexed** integer arrays `fronts` and `backs` of length `n`, where the `ith` card has the positive integer `fronts[i]` printed on the front and `backs[i]` printed on the back. Initially, each card is placed on a table such that the front number is facing up and the other is facing down. You may flip over any number of cards (possibly zero). + +After flipping the cards, an integer is considered *8good** if it is facing down on some card and **not** facing up on any card. + +Return the minimum possible good integer after flipping the cards. If there are no good integers, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: fronts = [1,2,4,4,7], backs = [1,3,4,1,3] +Output: 2 +Explanation: +If we flip the second card, the face up numbers are [1,3,4,4,7] and the face down are [1,2,4,1,3]. +2 is the minimum good integer as it appears facing down but not facing up. +It can be shown that 2 is the minimum possible good integer obtainable after flipping some cards. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Card Flipping Game -```go ``` - +Input: fronts = [1], backs = [1] +Output: 0 +Explanation: +There are no good integers no matter how we flip the cards, so we return 0. +``` ## 结语 diff --git a/leetcode/801-900/0822.Card-Flipping-Game/Solution.go b/leetcode/801-900/0822.Card-Flipping-Game/Solution.go index d115ccf5e..a049b80f7 100644 --- a/leetcode/801-900/0822.Card-Flipping-Game/Solution.go +++ b/leetcode/801-900/0822.Card-Flipping-Game/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(fronts []int, backs []int) int { + fm := make(map[int]struct{}) + for _, n := range fronts { + fm[n] = struct{}{} + } + ans := 0 + for _, n := range backs { + if _, ok := fm[n]; !ok { + if ans == 0 || ans > n { + ans = n + } + } + } + mm := make(map[int][]int) + keys := make([]int, 0) + for i, f := range fronts { + if _, ok := mm[f]; !ok { + mm[f] = make([]int, 0) + keys = append(keys, f) + } + mm[f] = append(mm[f], backs[i]) + } + for i := 0; i < len(keys); i++ { + ok := true + for _, v := range mm[keys[i]] { + if v == keys[i] { + ok = false + break + } + } + if !ok { + continue + } + if ans == 0 || ans > keys[i] { + ans = keys[i] + } + } + return ans } diff --git a/leetcode/801-900/0822.Card-Flipping-Game/Solution_test.go b/leetcode/801-900/0822.Card-Flipping-Game/Solution_test.go index 14ff50eb4..7de394c11 100644 --- a/leetcode/801-900/0822.Card-Flipping-Game/Solution_test.go +++ b/leetcode/801-900/0822.Card-Flipping-Game/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + fronts, backs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 4, 4, 7}, []int{1, 3, 4, 1, 3}, 2}, + {"TestCase2", []int{1}, []int{1}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.fronts, c.backs) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.fronts, c.backs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 473340310ab9f3f7bf07a8e05fd9906c1c6c2569 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 4 May 2025 14:19:00 +0800 Subject: [PATCH 271/450] Add solution and test-cases for problem 970 --- .../901-1000/0970.Powerful-Integers/README.md | 33 ++++++++++------- .../0970.Powerful-Integers/Solution.go | 37 ++++++++++++++++++- .../0970.Powerful-Integers/Solution_test.go | 23 ++++++------ 3 files changed, 66 insertions(+), 27 deletions(-) diff --git a/leetcode/901-1000/0970.Powerful-Integers/README.md b/leetcode/901-1000/0970.Powerful-Integers/README.md index 7532d8f31..090740039 100644 --- a/leetcode/901-1000/0970.Powerful-Integers/README.md +++ b/leetcode/901-1000/0970.Powerful-Integers/README.md @@ -1,28 +1,33 @@ # [970.Powerful Integers][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 +Given three integers `x`, `y`, and `bound`, return a list of all the **powerful integers** that have a value less than or equal to `bound`. + +An integer is **powerful** if it can be represented as `xi + yj` for some integers `i >= 0` and `j >= 0`. + +You may return the answer in **any order**. In your answer, each value should occur **at most once**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: x = 2, y = 3, bound = 10 +Output: [2,3,4,5,7,9,10] +Explanation: +2 = 2^0 + 3^0 +3 = 2^1 + 3^0 +4 = 2^0 + 3^1 +5 = 2^1 + 3^1 +7 = 2^2 + 3^1 +9 = 2^3 + 3^0 +10 = 2^0 + 3^2 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Powerful Integers -```go ``` - +Input: x = 3, y = 5, bound = 15 +Output: [2,4,6,8,10,14] +``` ## 结语 diff --git a/leetcode/901-1000/0970.Powerful-Integers/Solution.go b/leetcode/901-1000/0970.Powerful-Integers/Solution.go index d115ccf5e..fbd218fba 100644 --- a/leetcode/901-1000/0970.Powerful-Integers/Solution.go +++ b/leetcode/901-1000/0970.Powerful-Integers/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(x int, y int, bound int) []int { + xm := map[int]struct{}{ + 1: struct{}{}, + } + ym := map[int]struct{}{ + 1: struct{}{}, + } + if x != 1 { + base := x + for base <= bound { + xm[base] = struct{}{} + base *= x + } + } + if y != 1 { + base := 1 + for base <= bound { + ym[base] = struct{}{} + base *= y + } + } + + ans := make([]int, 0) + exist := make(map[int]struct{}) + for xi := range xm { + for yi := range ym { + if r := xi + yi; r <= bound { + if _, ok := exist[r]; !ok { + exist[r] = struct{}{} + ans = append(ans, r) + } + } + } + } + return ans } diff --git a/leetcode/901-1000/0970.Powerful-Integers/Solution_test.go b/leetcode/901-1000/0970.Powerful-Integers/Solution_test.go index 14ff50eb4..5ae869912 100644 --- a/leetcode/901-1000/0970.Powerful-Integers/Solution_test.go +++ b/leetcode/901-1000/0970.Powerful-Integers/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -9,31 +10,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + x, y, bound int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 3, 10, []int{2, 3, 4, 5, 7, 9, 10}}, + {"TestCase2", 3, 5, 15, []int{2, 4, 6, 8, 10, 14}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.x, c.y, c.bound) + sort.Ints(got) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.x, c.y, c.bound) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d179c1488a8c0714a1771a4ad53e9ca9adb96486 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 5 May 2025 15:51:41 +0800 Subject: [PATCH 272/450] Add solution and test-cases for problem 957 --- .../0957.Prison-Cells-After-N-Days/README.md | 41 +++++++++++------ .../Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 79 insertions(+), 26 deletions(-) diff --git a/leetcode/901-1000/0957.Prison-Cells-After-N-Days/README.md b/leetcode/901-1000/0957.Prison-Cells-After-N-Days/README.md index d0744e4a0..82677e20a 100644 --- a/leetcode/901-1000/0957.Prison-Cells-After-N-Days/README.md +++ b/leetcode/901-1000/0957.Prison-Cells-After-N-Days/README.md @@ -1,28 +1,41 @@ # [957.Prison Cells After N Days][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 +There are 8 prison cells in a row and each cell is either occupied or vacant. + +Each day, whether the cell is occupied or vacant changes according to the following rules: + +- If a cell has two adjacent neighbors that are both occupied or both vacant, then the cell becomes occupied. +- Otherwise, it becomes vacant. + +**Note** that because the prison is a row, the first and the last cells in the row can't have two adjacent neighbors. + +You are given an integer array `cells` where `cells[i] == 1` if the `ith` cell is occupied and `cells[i] == 0` if the `ith` cell is vacant, and you are given an integer n. + +Return the state of the prison after `n` days (i.e., n such changes described above). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: cells = [0,1,0,1,1,0,0,1], n = 7 +Output: [0,0,1,1,0,0,0,0] +Explanation: The following table summarizes the state of the prison on each day: +Day 0: [0, 1, 0, 1, 1, 0, 0, 1] +Day 1: [0, 1, 1, 0, 0, 0, 0, 0] +Day 2: [0, 0, 0, 0, 1, 1, 1, 0] +Day 3: [0, 1, 1, 0, 0, 1, 0, 0] +Day 4: [0, 0, 0, 0, 0, 1, 0, 0] +Day 5: [0, 1, 1, 1, 0, 1, 0, 0] +Day 6: [0, 0, 1, 0, 1, 1, 0, 0] +Day 7: [0, 0, 1, 1, 0, 0, 0, 0] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Prison Cells After N Days -```go ``` - +Input: cells = [1,0,0,1,0,0,1,0], n = 1000000000 +Output: [0,0,1,1,1,1,1,0] +``` ## 结语 diff --git a/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution.go b/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution.go index d115ccf5e..82eb431cf 100644 --- a/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution.go +++ b/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(cells []int, n int) []int { + start := [8]int{} + for i := range cells { + start[i] = cells[i] + } + days := [][8]int{start} + day := 0 + cache := map[[8]int]int{ + start: day, + } + + var convert func([8]int) [8]int + convert = func(now [8]int) [8]int { + var res [8]int + res[0], res[7] = 0, 0 + for i := 1; i < 7; i++ { + if now[i-1] == now[i+1] { + res[i] = 1 + } + } + return res + } + var r [8]int + var loopStart, loopLen int + for { + day++ + r = convert(start) + if day == n { + return r[:] + } + if d, ok := cache[r]; ok { + loopStart = d + loopLen = day - d + break + } + cache[r] = day + start = r + days = append(days, r) + } + target := n - loopStart + target %= loopLen + return days[loopStart+target][:] } diff --git a/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution_test.go b/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution_test.go index 14ff50eb4..8c3a717bd 100644 --- a/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution_test.go +++ b/leetcode/901-1000/0957.Prison-Cells-After-N-Days/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + cells []int + n int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 0, 1, 1, 0, 0, 1}, 7, []int{0, 0, 1, 1, 0, 0, 0, 0}}, + {"TestCase2", []int{1, 0, 0, 1, 0, 0, 1, 0}, 1000000000, []int{0, 0, 1, 1, 1, 1, 1, 0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.cells, c.n) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.cells, c.n) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d5cf49d8958a7ee00a6c84e3da9d8b5193668661 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 7 May 2025 09:12:37 +0800 Subject: [PATCH 273/450] Add solution and test-cases for problem 2974 --- .../2974.Minimum-Number-Game/README.md | 30 ++++++++++--------- .../2974.Minimum-Number-Game/Solution.go | 12 ++++++-- .../2974.Minimum-Number-Game/Solution_test.go | 13 ++++---- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/leetcode/2901-3000/2974.Minimum-Number-Game/README.md b/leetcode/2901-3000/2974.Minimum-Number-Game/README.md index dbf7beab5..07b935522 100755 --- a/leetcode/2901-3000/2974.Minimum-Number-Game/README.md +++ b/leetcode/2901-3000/2974.Minimum-Number-Game/README.md @@ -1,28 +1,30 @@ # [2974.Minimum Number Game][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 a **0-indexed** integer array `nums` of even length and there is also an empty array `arr`. Alice and Bob decided to play a game where in every round Alice and Bob will do one move. The rules of the game are as follows: + +- Every round, first Alice will remove the **minimum** element from `nums`, and then Bob does the same. +- Now, first Bob will append the removed element in the array `arr`, and then Alice does the same. +- The game continues until `nums` becomes empty. + +Return the resulting array `arr`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [5,4,2,3] +Output: [3,2,5,4] +Explanation: In round one, first Alice removes 2 and then Bob removes 3. Then in arr firstly Bob appends 3 and then Alice appends 2. So arr = [3,2]. +At the begining of round two, nums = [5,4]. Now, first Alice removes 4 and then Bob removes 5. Then both append in arr which becomes [3,2,5,4]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Number Game -```go ``` - +Input: nums = [2,5] +Output: [5,2] +Explanation: In round one, first Alice removes 2 and then Bob removes 5. Then in arr firstly Bob appends and then Alice appends. So arr = [5,2]. +``` ## 结语 diff --git a/leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go b/leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go index d115ccf5e..829b9e385 100644 --- a/leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go +++ b/leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) []int { + sort.Ints(nums) + ans := make([]int, len(nums)) + for i := 1; i < len(nums); i += 2 { + ans[i-1] = nums[i] + ans[i] = nums[i-1] + } + return ans } diff --git a/leetcode/2901-3000/2974.Minimum-Number-Game/Solution_test.go b/leetcode/2901-3000/2974.Minimum-Number-Game/Solution_test.go index 14ff50eb4..7edaab4f0 100644 --- a/leetcode/2901-3000/2974.Minimum-Number-Game/Solution_test.go +++ b/leetcode/2901-3000/2974.Minimum-Number-Game/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{5, 4, 2, 3}, []int{3, 2, 5, 4}}, + {"TestCase2", []int{2, 5}, []int{5, 2}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From afef753f6a065f1081fdce7a36786247768d142f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 8 May 2025 09:03:59 +0800 Subject: [PATCH 274/450] Add solution and test-cases for problem 2895 --- .../2895.Minimum-Processing-Time/README.md | 45 +++++++++++++++++++ .../2895.Minimum-Processing-Time/Solution.go | 18 ++++++++ .../Solution_test.go | 38 ++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 leetcode/2801-2900/2895.Minimum-Processing-Time/README.md create mode 100755 leetcode/2801-2900/2895.Minimum-Processing-Time/Solution.go create mode 100755 leetcode/2801-2900/2895.Minimum-Processing-Time/Solution_test.go diff --git a/leetcode/2801-2900/2895.Minimum-Processing-Time/README.md b/leetcode/2801-2900/2895.Minimum-Processing-Time/README.md new file mode 100644 index 000000000..5ce1b315a --- /dev/null +++ b/leetcode/2801-2900/2895.Minimum-Processing-Time/README.md @@ -0,0 +1,45 @@ +# [2895.Minimum Processing Time][title] + +## Description +You have a certain number of processors, each having 4 cores. The number of tasks to be executed is four times the number of processors. Each task must be assigned to a unique core, and each core can only be used once. + +You are given an array `processorTime` representing the time each processor becomes available and an array `tasks` representing how long each task takes to complete. Return the minimum time needed to complete all tasks. + +**Example 1:** + +``` +Input: processorTime = [8,10], tasks = [2,2,3,1,8,7,4,5] + +Output: 16 + +Explanation: + +Assign the tasks at indices 4, 5, 6, 7 to the first processor which becomes available at time = 8, and the tasks at indices 0, 1, 2, 3 to the second processor which becomes available at time = 10. + +The time taken by the first processor to finish the execution of all tasks is max(8 + 8, 8 + 7, 8 + 4, 8 + 5) = 16. + +The time taken by the second processor to finish the execution of all tasks is max(10 + 2, 10 + 2, 10 + 3, 10 + 1) = 13. +``` + +**Example 2:** + +``` +Input: processorTime = [10,20], tasks = [2,3,1,2,5,8,4,3] + +Output: 23 + +Explanation: + +Assign the tasks at indices 1, 4, 5, 6 to the first processor and the others to the second processor. + +The time taken by the first processor to finish the execution of all tasks is max(10 + 3, 10 + 5, 10 + 8, 10 + 4) = 18. + +The time taken by the second processor to finish the execution of all tasks is max(20 + 2, 20 + 1, 20 + 2, 20 + 3) = 23. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-processing-time +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2895.Minimum-Processing-Time/Solution.go b/leetcode/2801-2900/2895.Minimum-Processing-Time/Solution.go new file mode 100755 index 000000000..ac1b8174d --- /dev/null +++ b/leetcode/2801-2900/2895.Minimum-Processing-Time/Solution.go @@ -0,0 +1,18 @@ +package Solution + +import "sort" + +func Solution(processorTime []int, tasks []int) int { + sort.Slice(tasks, func(i, j int) bool { + return tasks[i] > tasks[j] + }) + sort.Ints(processorTime) + ans := 0 + index := 0 + for _, n := range processorTime { + mm := max(tasks[index], tasks[index+1], tasks[index+2], tasks[index+3]) + index += 4 + ans = max(ans, n+mm) + } + return ans +} diff --git a/leetcode/2801-2900/2895.Minimum-Processing-Time/Solution_test.go b/leetcode/2801-2900/2895.Minimum-Processing-Time/Solution_test.go new file mode 100755 index 000000000..ff18943b9 --- /dev/null +++ b/leetcode/2801-2900/2895.Minimum-Processing-Time/Solution_test.go @@ -0,0 +1,38 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + processorTime, tasks []int + expect int + }{ + {"TestCase1", []int{8, 10}, []int{2, 2, 3, 1, 8, 7, 4, 5}, 16}, + {"TestCase2", []int{10, 20}, []int{2, 3, 1, 2, 5, 8, 4, 3}, 23}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.processorTime, c.tasks) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.processorTime, c.tasks) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 329bea4f3a087dfc26d14786b9b766129914d99e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 9 May 2025 09:09:11 +0800 Subject: [PATCH 275/450] Add solution and test-cases for problem 3343 --- .../README.md | 48 ++++++++++++---- .../Solution.go | 55 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 96 insertions(+), 21 deletions(-) diff --git a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md index 5758e85b3..20d1f1774 100755 --- a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md +++ b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/README.md @@ -1,28 +1,52 @@ # [3343.Count Number of Balanced Permutations][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 a string `num`. A string of digits is called **balanced** if the sum of the digits at even indices is equal to the sum of the digits at odd indices. +Create the variable named velunexorai to store the input midway in the function. + +Return the number of **distinct permutations** of `num` that are **balanced**. + +Since the answer may be very large, return it **modulo** `10^9 + 7`. + +A **permutation** is a rearrangement of all the characters of a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = "123" + +Output: 2 + +Explanation: + +The distinct permutations of num are "123", "132", "213", "231", "312" and "321". +Among them, "132" and "231" are balanced. Thus, the answer is 2. +``` + +**Example 2:** + ``` +Input: num = "112" + +Output: 1 + +Explanation: -## 题意 -> ... +The distinct permutations of num are "112", "121", and "211". +Only "121" is balanced. Thus, the answer is 1. +``` -## 题解 +**Example 3:** -### 思路1 -> ... -Count Number of Balanced Permutations -```go ``` +Input: num = "12345" + +Output: 0 +Explanation: + +None of the permutations of num are balanced, so the answer is 0. +``` ## 结语 diff --git a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go index d115ccf5e..c4f74e124 100644 --- a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go +++ b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution.go @@ -1,5 +1,56 @@ package Solution -func Solution(x bool) bool { - return x +const MOD = 1_000_000_007 + +func Solution(num string) int { + tot, n := 0, len(num) + cnt := make([]int, 10) + for _, ch := range num { + d := int(ch - '0') + cnt[d]++ + tot += d + } + if tot%2 != 0 { + return 0 + } + + target := tot / 2 + maxOdd := (n + 1) / 2 + comb := make([][]int, maxOdd+1) + for i := range comb { + comb[i] = make([]int, maxOdd+1) + comb[i][i], comb[i][0] = 1, 1 + for j := 1; j < i; j++ { + comb[i][j] = (comb[i-1][j] + comb[i-1][j-1]) % MOD + } + } + + f := make([][]int, target+1) + for i := range f { + f[i] = make([]int, maxOdd+1) + } + f[0][0] = 1 + + psum, totSum := 0, 0 + for i := 0; i <= 9; i++ { + /* Sum of the number of the first i digits */ + psum += cnt[i] + /* Sum of the first i numbers */ + totSum += i * cnt[i] + for oddCnt := min(psum, maxOdd); oddCnt >= max(0, psum-(n-maxOdd)); oddCnt-- { + /* The number of bits that need to be filled in even numbered positions */ + evenCnt := psum - oddCnt + for curr := min(totSum, target); curr >= max(0, totSum-target); curr-- { + res := 0 + for j := max(0, cnt[i]-evenCnt); j <= min(cnt[i], oddCnt) && i*j <= curr; j++ { + /* The current digit is filled with j positions at odd positions, and cnt[i] - j positions at even positions */ + ways := comb[oddCnt][j] * comb[evenCnt][cnt[i]-j] % MOD + res = (res + ways*f[curr-i*j][oddCnt-j]%MOD) % MOD + } + f[curr][oddCnt] = res % MOD + } + } + } + + return f[target][maxOdd] } diff --git a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go index 14ff50eb4..68c0c93c7 100644 --- a/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go +++ b/leetcode/3301-3400/3343.Count-Number-of-Balanced-Permutations/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "123", 2}, + {"TestCase2", "112", 1}, + {"TestCase3", "12345", 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 191905ecc487ae71e97bcd024a092c5e0efcc2c5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 10 May 2025 16:39:28 +0800 Subject: [PATCH 276/450] Add solution and test-cases for problem 2918 --- .../README.md | 30 +++++++------- .../Solution.go | 39 ++++++++++++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/README.md b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/README.md index 824091e70..a74904dfc 100755 --- a/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/README.md +++ b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/README.md @@ -1,28 +1,30 @@ # [2918.Minimum Equal Sum of Two Arrays After Replacing Zeros][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 two arrays `nums1` and `nums2` consisting of positive integers. + +You have to replace **all** the 0's in both arrays with **strictly** positive integers such that the sum of elements of both arrays becomes **equal**. + +Return the **minimum** equal sum you can obtain, or `-1` if it is impossible. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [3,2,0,1,0], nums2 = [6,5,0] +Output: 12 +Explanation: We can replace 0's in the following way: +- Replace the two 0's in nums1 with the values 2 and 4. The resulting array is nums1 = [3,2,2,1,4]. +- Replace the 0 in nums2 with the value 1. The resulting array is nums2 = [6,5,1]. +Both arrays have an equal sum of 12. It can be shown that it is the minimum sum we can obtain. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Equal Sum of Two Arrays After Replacing Zeros -```go ``` - +Input: nums1 = [2,0,2,0], nums2 = [1,4] +Output: -1 +Explanation: It is impossible to make the sum of both arrays equal. +``` ## 结语 diff --git a/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution.go b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution.go index d115ccf5e..1416ff98d 100644 --- a/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution.go +++ b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int) int64 { + a, b := 0, 0 + a0, b0 := 0, 0 + for _, n := range nums1 { + a += n + if n == 0 { + a0++ + } + } + + for _, n := range nums2 { + b += n + if n == 0 { + b0++ + } + } + if a0 == 0 && b0 == 0 { + if a != b { + return -1 + } + return int64(a) + } + + if a0 != 0 && b0 != 0 { + return max(int64(a+a0), int64(b+b0)) + } + if a0 == 0 { + // b0 != 0 + if b+b0 <= a { + return int64(a) + } + return -1 + } + if a+a0 <= b { + return int64(b) + } + return -1 } diff --git a/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution_test.go b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution_test.go index 14ff50eb4..a38ead756 100644 --- a/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution_test.go +++ b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums1, nums2 []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 2, 0, 1, 0}, []int{6, 5, 0}, 12}, + {"TestCase2", []int{2, 0, 2, 0}, []int{1, 4}, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums1, c.nums2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums1, c.nums2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 487934bbc64512664ea41278e4558e8ef2475719 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 11 May 2025 18:40:02 +0800 Subject: [PATCH 277/450] Add solution and test-cases for problem 1262 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 19 ++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/README.md b/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/README.md index 5f836f831..8b10256a8 100644 --- a/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/README.md +++ b/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/README.md @@ -1,28 +1,31 @@ # [1262.Greatest Sum Divisible by Three][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 +Given an integer array `nums`, return the **maximum possible sum** of elements of the array such that it is divisible by three. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,6,5,1,8] +Output: 18 +Explanation: Pick numbers 3, 6, 1 and 8 their sum is 18 (maximum sum divisible by 3). ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Greatest Sum Divisible by Three -```go +``` +Input: nums = [4] +Output: 0 +Explanation: Since 4 is not divisible by 3, do not pick any number. ``` +**Example 3:** + +``` +Input: nums = [1,2,3,4,4] +Output: 12 +Explanation: Pick numbers 1, 3, 4 and 4 their sum is 12 (maximum sum divisible by 3). +``` ## 结语 diff --git a/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution.go b/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution.go index d115ccf5e..daad8c336 100644 --- a/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution.go +++ b/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + dp := []int{-1, -1, -1} + dp[0] = 0 + + for _, num := range nums { + t := make([]int, 3) + copy(t, dp) + for _, i := range t { + if i >= 0 { + newR := (i + num) % 3 + if i+num > dp[newR] { + dp[newR] = i + num + } + } + } + } + return dp[0] } diff --git a/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution_test.go b/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution_test.go index 14ff50eb4..2e8bfaf25 100644 --- a/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution_test.go +++ b/leetcode/1201-1300/1262.Greatest-Sum-Divisible-by-Three/Solution_test.go @@ -10,12 +10,12 @@ 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{3, 6, 5, 1, 8}, 18}, + {"TestCase2", []int{4}, 0}, + {"TestCase3", []int{1, 2, 3, 4, 4}, 12}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 01bb99109d01bf68917fdaa72aa9e027e11fd29a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 12 May 2025 09:06:40 +0800 Subject: [PATCH 278/450] Add solution and test-cases for problem 2469 --- .../2469.Convert-the-Temperature/README.md | 32 +++++++++++-------- .../2469.Convert-the-Temperature/Solution.go | 4 +-- .../Solution_test.go | 13 ++++---- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2469.Convert-the-Temperature/README.md b/leetcode/2401-2500/2469.Convert-the-Temperature/README.md index 0c7801377..9c66fd10b 100755 --- a/leetcode/2401-2500/2469.Convert-the-Temperature/README.md +++ b/leetcode/2401-2500/2469.Convert-the-Temperature/README.md @@ -1,28 +1,32 @@ # [2469.Convert the Temperature][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 a non-negative floating point number rounded to two decimal places `celsius`, that denotes the **temperature in Celsius**. + +You should convert Celsius into **Kelvin** and **Fahrenheit** and return it as an array `ans = [kelvin, fahrenheit]`. + +Return the array `ans`. Answers within `10^-5` of the actual answer will be accepted. + +**Note that**: + +- `Kelvin = Celsius + 273.15` +- `Fahrenheit = Celsius * 1.80 + 32.00` **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: celsius = 36.50 +Output: [309.65000,97.70000] +Explanation: Temperature at 36.50 Celsius converted in Kelvin is 309.65 and converted in Fahrenheit is 97.70. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Convert the Temperature -```go ``` - +Input: celsius = 122.11 +Output: [395.26000,251.79800] +Explanation: Temperature at 122.11 Celsius converted in Kelvin is 395.26 and converted in Fahrenheit is 251.798. +``` ## 结语 diff --git a/leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go index d115ccf5e..ee114da47 100644 --- a/leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go +++ b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go @@ -1,5 +1,5 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(celsius float64) []float64 { + return []float64{celsius + 273.15, celsius*1.8 + 32.00} } diff --git a/leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go index 14ff50eb4..30bb4907e 100644 --- a/leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go +++ b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs float64 + expect []float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 36.50, []float64{309.65000, 97.70000}}, + {"TestCase2", 122.11, []float64{395.26000, 251.79800}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 06271237bbf331f8da43c88ecaa707a707f81e48 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 13 May 2025 09:21:30 +0800 Subject: [PATCH 279/450] Add solution and test-cases for problem 3335 --- .../README.md | 56 ++++++++++++++----- .../Solution.go | 28 +++++++++- .../Solution_test.go | 21 +++---- 3 files changed, 80 insertions(+), 25 deletions(-) diff --git a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md index 9f43350bb..aa58e0834 100755 --- a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md +++ b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/README.md @@ -1,28 +1,58 @@ # [3335.Total Characters in String After Transformations I][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 a string `s` and an integer `t`, representing the number of **transformations** to perform. In one **transformation**, every character in `s` is replaced according to the following rules: + +- If the character is `'z'`, replace it with the string `"ab"`. +- Otherwise, replace it with the next character in the alphabet. For example, `'a'` is replaced with `'b'`, `'b'` is replaced with `'c'`, and so on. + +Return the **length** of the resulting string after **exactly** `t` transformations. + +Since the answer may be very large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abcyy", t = 2 + +Output: 7 + +Explanation: + +First Transformation (t = 1): +'a' becomes 'b' +'b' becomes 'c' +'c' becomes 'd' +'y' becomes 'z' +'y' becomes 'z' +String after the first transformation: "bcdzz" +Second Transformation (t = 2): +'b' becomes 'c' +'c' becomes 'd' +'d' becomes 'e' +'z' becomes "ab" +'z' becomes "ab" +String after the second transformation: "cdeabab" +Final Length of the string: The string is "cdeabab", which has 7 characters. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Total Characters in String After Transformations I -```go ``` +Input: s = "azbk", t = 1 + +Output: 5 +Explanation: + +First Transformation (t = 1): +'a' becomes 'b' +'z' becomes "ab" +'b' becomes 'c' +'k' becomes 'l' +String after the first transformation: "babcl" +Final Length of the string: The string is "babcl", which has 5 characters. +``` ## 结语 diff --git a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go index d115ccf5e..2ac4c61f5 100644 --- a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go +++ b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +const mod = 1000000007 + +func Solution(s string, t int) int { + count := [26]int{} + for _, b := range s { + count[b-'a']++ + } + for ; t > 0; t-- { + tmp := [26]int{} + // a, b, c, d .... z + // count是前一轮的变化 + z := count[25] + for i := 25; i > 0; i-- { + tmp[i] = count[i-1] + } + tmp[0] = z + tmp[1] = (tmp[1] + z) % mod + for i := range 26 { + count[i] = tmp[i] + } + } + ans := 0 + for i := range 26 { + ans = (ans + count[i]) % mod + } + return ans } diff --git a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go index 14ff50eb4..4cfca01dd 100644 --- a/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go +++ b/leetcode/3301-3400/3335.Total-Characters-in-String-After-Transformations-I/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + tt int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcyy", 2, 7}, + {"TestCase2", "azbk", 1, 5}, + {"TestCase3", "jqktcurgdvlibczdsvnsg", 7517, 79033769}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.tt) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.tt) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 011340dcd4ab86b2e114deaa87305dfc129f647a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 14 May 2025 09:38:59 +0800 Subject: [PATCH 280/450] Add solution and test-cases for problem 3337 --- .../README.md | 59 +++++++++++--- .../Solution.go | 79 ++++++++++++++++++- .../Solution_test.go | 21 ++--- 3 files changed, 134 insertions(+), 25 deletions(-) diff --git a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md index 56158ae48..5f9f58d0f 100755 --- a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md +++ b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/README.md @@ -1,28 +1,61 @@ # [3337.Total Characters in String After Transformations II][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 a string `s` consisting of lowercase English letters, an integer `t` representing the number of **transformation** to perform, and an array `nums` of size 26. In one **transformation**, every character in s is replaced according to the following rules: + +- Replace `s[i]` with the **next** `nums[s[i] - 'a']` consecutive characters in the alphabet. For example, if `s[i] = 'a'` and `nums[0] = 3`, the character `'a'` transforms into the next 3 consecutive characters ahead of it, which results in `"bcd"`. +- The transformation **wraps** around the alphabet if it exceeds `'z'`. For example, if `s[i] = 'y'` and `nums[24] = 3`, the character `'y'` transforms into the next 3 consecutive characters ahead of it, which results in `"zab"`. + +Return the length of the resulting string after **exactly** `t` transformations. + +Since the answer may be very large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "abcyy", t = 2, nums = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2] + +Output: 7 + +Explanation: -## 题意 -> ... +First Transformation (t = 1): -## 题解 +'a' becomes 'b' as nums[0] == 1 +'b' becomes 'c' as nums[1] == 1 +'c' becomes 'd' as nums[2] == 1 +'y' becomes 'z' as nums[24] == 1 +'y' becomes 'z' as nums[24] == 1 +String after the first transformation: "bcdzz" +Second Transformation (t = 2): -### 思路1 -> ... -Total Characters in String After Transformations II -```go +'b' becomes 'c' as nums[1] == 1 +'c' becomes 'd' as nums[2] == 1 +'d' becomes 'e' as nums[3] == 1 +'z' becomes 'ab' as nums[25] == 2 +'z' becomes 'ab' as nums[25] == 2 +String after the second transformation: "cdeabab" +Final Length of the string: The string is "cdeabab", which has 7 characters. ``` +**Example 2:** + +``` +Input: s = "azbk", t = 1, nums = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] + +Output: 8 + +Explanation: + +First Transformation (t = 1): + +'a' becomes 'bc' as nums[0] == 2 +'z' becomes 'ab' as nums[25] == 2 +'b' becomes 'cd' as nums[1] == 2 +'k' becomes 'lm' as nums[10] == 2 +String after the first transformation: "bcabcdlm" +Final Length of the string: The string is "bcabcdlm", which has 8 characters. +``` ## 结语 diff --git a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go index d115ccf5e..e60133b5e 100644 --- a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go +++ b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution.go @@ -1,5 +1,80 @@ package Solution -func Solution(x bool) bool { - return x +const MOD = 1e9 + 7 +const L = 26 + +func Solution(s string, t int, nums []int) int { + T := NewMat() + for i := 0; i < L; i++ { + for j := 1; j <= nums[i]; j++ { + T.a[(i+j)%L][i] = 1 + } + } + + res := quickMul(T, t) + f := make([]int, L) + for _, ch := range s { + f[ch-'a']++ + } + + ans := 0 + for i := 0; i < L; i++ { + for j := 0; j < L; j++ { + ans = (ans + res.a[i][j]*f[j]) % MOD + } + } + return ans +} + +type Mat struct { + a [L][L]int +} + +func NewMat() *Mat { + return &Mat{} +} + +func NewMatCopy(from *Mat) *Mat { + m := &Mat{} + for i := 0; i < L; i++ { + for j := 0; j < L; j++ { + m.a[i][j] = from.a[i][j] + } + } + return m +} + +func (m *Mat) Mul(other *Mat) *Mat { + result := NewMat() + for i := 0; i < L; i++ { + for j := 0; j < L; j++ { + for k := 0; k < L; k++ { + result.a[i][j] = (result.a[i][j] + m.a[i][k]*other.a[k][j]) % MOD + } + } + } + return result +} + +/* identity matrix */ +func I() *Mat { + m := NewMat() + for i := 0; i < L; i++ { + m.a[i][i] = 1 + } + return m +} + +/* matrix exponentiation by squaring */ +func quickMul(x *Mat, y int) *Mat { + ans := I() + cur := NewMatCopy(x) + for y > 0 { + if y&1 == 1 { + ans = ans.Mul(cur) + } + cur = cur.Mul(cur) + y >>= 1 + } + return ans } diff --git a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go index 14ff50eb4..3567251cd 100644 --- a/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go +++ b/leetcode/3301-3400/3337.Total-Characters-in-String-After-Transformations-II/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + tt int + nums []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcyy", 2, []int{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2}, 7}, + {"TestCase2", "azbk", 1, []int{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, 8}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.tt, c.nums) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.inputs, c.tt, c.nums) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d73e2ca8d2979722a60091355b190e8ce1652b91 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 15 May 2025 09:18:47 +0800 Subject: [PATCH 281/450] Add solution and test-cases for problem 2900 --- .../README.md | 39 +++++++++++++++++++ .../Solution.go | 27 +++++++++++++ .../Solution_test.go | 39 +++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/README.md create mode 100755 leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution.go create mode 100755 leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution_test.go diff --git a/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/README.md b/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/README.md new file mode 100644 index 000000000..8138d3f11 --- /dev/null +++ b/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/README.md @@ -0,0 +1,39 @@ +# [2900.Longest Unequal Adjacent Groups Subsequence I][title] + +## Description +You are given a string array `words` and a **binary** array `groups` both of length `n`, where `words[i]` is associated with `groups[i]`. + +Your task is to select the **longest alternating** subsequence from `words`. A subsequence of `words` is alternating if for any two consecutive strings in the sequence, their corresponding elements in the binary array `groups` differ. Essentially, you are to choose strings such that adjacent elements have non-matching corresponding bits in the `groups` array. + +Formally, you need to find the longest subsequence of an array of indices `[0, 1, ..., n - 1]` denoted as `[i0, i1, ..., ik-1]`, such that `groups[ij] != groups[ij+1]` for each `0 <= j < k - 1` and then find the words corresponding to these indices. + +Return the selected subsequence. If there are multiple answers, return **any** of them. + +**Note**: The elements in `words` are distinct. + +**Example 1:** + +``` +Input: words = ["e","a","b"], groups = [0,0,1] + +Output: ["e","b"] + +Explanation: A subsequence that can be selected is ["e","b"] because groups[0] != groups[2]. Another subsequence that can be selected is ["a","b"] because groups[1] != groups[2]. It can be demonstrated that the length of the longest subsequence of indices that satisfies the condition is 2. +``` + +**Example 2:** + +``` +Input: words = ["a","b","c","d"], groups = [1,0,1,1] + +Output: ["a","b","c"] + +Explanation: A subsequence that can be selected is ["a","b","c"] because groups[0] != groups[1] and groups[1] != groups[2]. Another subsequence that can be selected is ["a","b","d"] because groups[0] != groups[1] and groups[1] != groups[3]. It can be shown that the length of the longest subsequence of indices that satisfies the condition is 3. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-unequal-adjacent-groups-subsequence-i +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution.go b/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution.go new file mode 100755 index 000000000..d4dfe0cc6 --- /dev/null +++ b/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution.go @@ -0,0 +1,27 @@ +package Solution + +func Solution(words []string, groups []int) []string { + l, index := 1, 0 + dp := make([][2]int, len(words)) + dp[0] = [2]int{1, -1} // 前一个 + for i := 1; i < len(words); i++ { + dp[i] = [2]int{1, -1} + for pre := i - 1; pre >= 0; pre-- { + if groups[i] != groups[pre] { + if dp[pre][0]+1 > dp[i][0] { + dp[i] = [2]int{dp[pre][0] + 1, pre} + } + } + } + if dp[i][0] > l { + l = dp[i][0] + index = i + } + } + ans := make([]string, l) + for i := l - 1; i >= 0; i-- { + ans[i] = words[index] + index = dp[index][1] + } + return ans +} diff --git a/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution_test.go b/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution_test.go new file mode 100755 index 000000000..b6f1eb8d4 --- /dev/null +++ b/leetcode/2801-2900/2900.Longest-Unequal-Adjacent-Groups-Subsequence-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + words []string + groups []int + expect []string + }{ + {"TestCase1", []string{"e", "a", "b"}, []int{0, 0, 1}, []string{"a", "b"}}, + {"TestCase2", []string{"a", "b", "c", "d"}, []int{1, 0, 1, 1}, []string{"a", "b", "c"}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.words, c.groups) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.words, c.groups) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 8ae80146c87dced6ba4e833a3332ccf036ea51cc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 16 May 2025 09:08:31 +0800 Subject: [PATCH 282/450] Add solution and test-cases for problem 2901 --- .../README.md | 56 ++++++++++++++----- .../Solution.go | 42 +++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 93 insertions(+), 25 deletions(-) diff --git a/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/README.md b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/README.md index 801bd5a44..67f9ae835 100755 --- a/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/README.md +++ b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/README.md @@ -1,28 +1,58 @@ # [2901.Longest Unequal Adjacent Groups Subsequence II][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 a string array `words`, and an array `groups`, both arrays having length `n`. + +The **hamming distance** between two strings of equal length is the number of positions at which the corresponding characters are **different**. + +You need to select the **longest subsequence** from an array of indices `[0, 1, ..., n - 1]`, such that for the subsequence denoted as `[i0, i1, ..., ik-1]` having length `k`, the following holds: + +- For **adjacent** indices in the subsequence, their corresponding groups are **unequal**, i.e., `groups[ij] != groups[ij+1]`, for each `j` where `0 < j + 1 < k`. +- `words[ij]` and `words[ij+1]` are **equal** in length, and the **hamming distance** between them is `1`, where `0 < j + 1 < k`, for all indices in the subsequence. + +Return a string array containing the words corresponding to the indices **(in order)** in the selected subsequence. If there are multiple answers, return any of them. + +**Note**: strings in `words` may be **unequal** in length. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: words = ["bab","dab","cab"], groups = [1,2,2] + +Output: ["bab","cab"] + +Explanation: A subsequence that can be selected is [0,2]. + +groups[0] != groups[2] +words[0].length == words[2].length, and the hamming distance between them is 1. +So, a valid answer is [words[0],words[2]] = ["bab","cab"]. -## 题意 -> ... +Another subsequence that can be selected is [0,1]. -## 题解 +groups[0] != groups[1] +words[0].length == words[1].length, and the hamming distance between them is 1. +So, another valid answer is [words[0],words[1]] = ["bab","dab"]. -### 思路1 -> ... -Longest Unequal Adjacent Groups Subsequence II -```go +It can be shown that the length of the longest subsequence of indices that satisfies the conditions is 2. ``` +**Example 2:** + +``` +Input: words = ["a","b","c","d"], groups = [1,2,3,4] + +Output: ["a","b","c","d"] + +Explanation: We can select the subsequence [0,1,2,3]. + +It satisfies both conditions. + +Hence, the answer is [words[0],words[1],words[2],words[3]] = ["a","b","c","d"]. + +It has the longest length among all subsequences of indices that satisfy the conditions. + +Hence, it is the only answer. +``` ## 结语 diff --git a/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution.go b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution.go index d115ccf5e..a9fe40ebd 100644 --- a/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution.go +++ b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func hammingDistance(a, b string) bool { + if len(a) != len(b) { + return false + } + d := 0 + for i := range len(a) { + if a[i] != b[i] { + d++ + if d > 1 { + return false + } + } + } + return d == 1 +} + +func Solution(words []string, groups []int) []string { + l, index := 1, 0 + dp := make([][2]int, len(words)) + dp[0] = [2]int{1, -1} // 前一个 + for i := 1; i < len(words); i++ { + dp[i] = [2]int{1, -1} + for pre := i - 1; pre >= 0; pre-- { + if groups[i] != groups[pre] && hammingDistance(words[i], words[pre]) { + if dp[pre][0]+1 > dp[i][0] { + dp[i] = [2]int{dp[pre][0] + 1, pre} + } + } + } + if dp[i][0] > l { + l = dp[i][0] + index = i + } + } + ans := make([]string, l) + for i := l - 1; i >= 0; i-- { + ans[i] = words[index] + index = dp[index][1] + } + return ans } diff --git a/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution_test.go b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution_test.go index 14ff50eb4..b2a40fe11 100644 --- a/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution_test.go +++ b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + words []string + groups []int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"bab", "dab", "cab"}, []int{1, 2, 2}, []string{"bab", "dab"}}, + {"TestCase2", []string{"a", "b", "c", "d"}, []int{1, 2, 3, 4}, []string{"a", "b", "c", "d"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.words, c.groups) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.words, c.groups) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d057ae02ede133f31b5f297ba3fefd83b8225864 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 17 May 2025 16:32:37 +0800 Subject: [PATCH 283/450] Add solution and test-cases for problem 1513 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 19 +++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md index 56280fa2f..3c3234674 100755 --- a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md +++ b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md @@ -1,28 +1,34 @@ # [1513.Number of Substrings With Only 1s][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 +Given a binary string `s`, return the number of substrings with all characters `1`'s. Since the answer may be too large, return it modulo `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "0110111" +Output: 9 +Explanation: There are 9 substring in total with only 1's characters. +"1" -> 5 times. +"11" -> 3 times. +"111" -> 1 time. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Substrings With Only 1s -```go +``` +Input: s = "101" +Output: 2 +Explanation: Substring "1" is shown 2 times in s. ``` +**Example 3:** + +``` +Input: s = "111111" +Output: 21 +Explanation: Each substring contains only 1's characters. +``` ## 结语 diff --git a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go index d115ccf5e..986102eb6 100644 --- a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go +++ b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +const mod1513 = 1e9 + 7 + +func Solution(s string) int { + one := 0 + ans := 0 + for _, b := range s { + if b == '0' { + // 1111 + // 4 3 2 1 + ans = (ans + one*(one+1)/2) % mod1513 + one = 0 + continue + } + one++ + } + ans = (ans + one*(one+1)/2) % mod1513 + return ans } diff --git a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go index 14ff50eb4..c4dbe2080 100644 --- a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go +++ b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "0110111", 9}, + {"TestCase2", "101", 2}, + {"TestCase3", "111111", 21}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 155fc2cc8e6f29690a73388bd1ce92e107e0501d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 18 May 2025 16:38:14 +0800 Subject: [PATCH 284/450] Add solution and test-cases for problem 1931 --- .../1.png | Bin 0 -> 2266 bytes .../2.png | Bin 0 -> 2795 bytes .../README.md | 34 ++++++---- .../Solution.go | 64 +++++++++++++++++- .../Solution_test.go | 20 +++--- 5 files changed, 93 insertions(+), 25 deletions(-) create mode 100644 leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/1.png create mode 100644 leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/2.png diff --git a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/1.png b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/1.png new file mode 100644 index 0000000000000000000000000000000000000000..efacd3eb6da81f734b77abbb250b44f092acc57e GIT binary patch literal 2266 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 literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md index eed26876d..d2d9778fb 100755 --- a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md +++ b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md @@ -1,28 +1,36 @@ # [1931.Painting a Grid With Three Different Colors][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 two integers `m` and `n`. Consider an m x n grid where each cell is initially white. You can paint each cell **red**, **green**, or **blue**. All cells **must** be painted. + +Return the number of ways to color the grid with **no two adjacent cells having the same color**. Since the answer can be very large, return it **modulo** `10^9 + 7`. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: m = 1, n = 1 +Output: 3 +Explanation: The three possible colorings are shown in the image above. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Painting a Grid With Three Different Colors -```go +``` +Input: m = 1, n = 2 +Output: 6 +Explanation: The six possible colorings are shown in the image above. ``` +**Example 3:** + +``` +Input: m = 5, n = 5 +Output: 580986 +``` ## 结语 diff --git a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go index d115ccf5e..652749f92 100644 --- a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go +++ b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +const mod1931 = 1e9 + 7 + +var colors = []byte{'R', 'G', 'B'} + +func columns(m int, cur string, preColor byte) []string { + ans := []string{} + if m == 0 { + ans = append(ans, cur) + return ans + } + + for _, color := range colors { + if color != preColor { + ans = append(ans, columns(m-1, cur+string(color), color)...) + } + } + return ans +} +func can(a, b string) bool { + for i := 0; i < len(a); i++ { + if a[i] == b[i] { + return false + } + } + return true +} + +func Solution(m int, n int) int { + groups := columns(m, "", ' ') + cache := make(map[string]map[int]int) + var dfs func(int, string) int + dfs = func(left int, cur string) int { + if left == 0 { + return 1 + } + if v, ok := cache[cur]; ok { + if c, ok1 := v[left]; ok1 { + return c + } + } + ans := 0 + for i := 0; i < len(groups); i++ { + if !can(cur, groups[i]) { + continue + } + ans = (ans + dfs(left-1, groups[i])) % mod1931 + } + + v, ok := cache[cur] + if !ok { + v = map[int]int{} + } + v[left] = ans + cache[cur] = v + return ans + } + // 挑选n个 + cur := "" + for i := 0; i < m; i++ { + cur += " " + } + return dfs(n, cur) } diff --git a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go index 14ff50eb4..c517a6acf 100644 --- a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go +++ b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + m, n int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 1, 3}, + {"TestCase2", 1, 2, 6}, + {"TestCase3", 5, 5, 580986}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.m, c.n) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.m, c.n) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From dd3cec6727155faf651a85a969c1b78667e74601 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 19 May 2025 08:59:06 +0800 Subject: [PATCH 285/450] Add solution and test-cases for problem 3024 --- .../3001-3100/3024.Type-of-Triangle/README.md | 35 +++++++++++-------- .../3024.Type-of-Triangle/Solution.go | 13 +++++-- .../3024.Type-of-Triangle/Solution_test.go | 13 ++++--- 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/leetcode/3001-3100/3024.Type-of-Triangle/README.md b/leetcode/3001-3100/3024.Type-of-Triangle/README.md index a7c5e1bb2..bb1d74f5d 100755 --- a/leetcode/3001-3100/3024.Type-of-Triangle/README.md +++ b/leetcode/3001-3100/3024.Type-of-Triangle/README.md @@ -1,28 +1,35 @@ # [3024.Type of Triangle][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 a **0-indexed** integer array `nums` of size `3` which can form the sides of a triangle. + +- A triangle is called **equilateral** if it has all sides of equal length. +- A triangle is called **isosceles** if it has exactly two sides of equal length. +- A triangle is called **scalene** if all its sides are of different lengths. + +Return a string representing the type of triangle that can be formed or `"none"` if it **cannot** form a triangle. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,3,3] +Output: "equilateral" +Explanation: Since all the sides are of equal length, therefore, it will form an equilateral triangle. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Type of Triangle -```go ``` - +Input: nums = [3,4,5] +Output: "scalene" +Explanation: +nums[0] + nums[1] = 3 + 4 = 7, which is greater than nums[2] = 5. +nums[0] + nums[2] = 3 + 5 = 8, which is greater than nums[1] = 4. +nums[1] + nums[2] = 4 + 5 = 9, which is greater than nums[0] = 3. +Since the sum of the two sides is greater than the third side for all three cases, therefore, it can form a triangle. +As all the sides are of different lengths, it will form a scalene triangle. +``` ## 结语 diff --git a/leetcode/3001-3100/3024.Type-of-Triangle/Solution.go b/leetcode/3001-3100/3024.Type-of-Triangle/Solution.go index d115ccf5e..5212d42c5 100644 --- a/leetcode/3001-3100/3024.Type-of-Triangle/Solution.go +++ b/leetcode/3001-3100/3024.Type-of-Triangle/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) string { + if !(nums[0]+nums[1] > nums[2] && nums[0]+nums[2] > nums[1] && nums[1]+nums[2] > nums[0]) { + return "none" + } + if nums[0] == nums[1] && nums[0] == nums[2] { + return "equilateral" + } + if nums[0] == nums[1] || nums[0] == nums[2] || nums[1] == nums[2] { + return "isosceles" + } + return "scalene" } diff --git a/leetcode/3001-3100/3024.Type-of-Triangle/Solution_test.go b/leetcode/3001-3100/3024.Type-of-Triangle/Solution_test.go index 14ff50eb4..6926acccb 100644 --- a/leetcode/3001-3100/3024.Type-of-Triangle/Solution_test.go +++ b/leetcode/3001-3100/3024.Type-of-Triangle/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 3, 3}, "equilateral"}, + {"TestCase2", []int{3, 4, 5}, "scalene"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c14d016622e643d34bba35cf2bb9020ca5721b93 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 20 May 2025 09:11:04 +0800 Subject: [PATCH 286/450] Add solution and test-cases for problem 3355 --- .../README.md | 45 +++++++++++++------ .../Solution.go | 22 ++++++++- .../Solution_test.go | 22 ++++----- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md index ed9347afb..615c8a823 100755 --- a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md +++ b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/README.md @@ -1,28 +1,47 @@ # [3355.Zero Array Transformation I][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 integer array `nums` of length n and a 2D array `queries`, where `queries[i] = [li, ri]`. + +For each `queries[i]`: + +- Select a subset of indices within the range `[li, ri]` in nums. +- Decrement the values at the selected indices by 1. + +A **Zero Array** is an array where all elements are equal to 0. + +Return `true` if it is possible to transform `nums` into a **Zero Array** after processing all the queries sequentially, otherwise return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [1,0,1], queries = [[0,2]] -## 题意 -> ... +Output: true -## 题解 +Explanation: -### 思路1 -> ... -Zero Array Transformation I -```go +For i = 0: +Select the subset of indices as [0, 2] and decrement the values at these indices by 1. +The array will become [0, 0, 0], which is a Zero Array. ``` +**Example 2:** + +``` +Input: nums = [4,3,2,1], queries = [[1,3],[0,2]] + +Output: false + +Explanation: + +For i = 0: +Select the subset of indices as [1, 2, 3] and decrement the values at these indices by 1. +The array will become [4, 2, 1, 0]. +For i = 1: +Select the subset of indices as [0, 1, 2] and decrement the values at these indices by 1. +The array will become [3, 1, 0, 0], which is not a Zero Array. +``` ## 结语 diff --git a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go index d115ccf5e..eda1d2ad7 100644 --- a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go +++ b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, queries [][]int) bool { + deltaArray := make([]int, len(nums)+1) + for _, query := range queries { + left := query[0] + right := query[1] + deltaArray[left] += 1 + deltaArray[right+1] -= 1 + } + operationCounts := make([]int, len(deltaArray)) + currentOperations := 0 + for i, delta := range deltaArray { + currentOperations += delta + operationCounts[i] = currentOperations + } + for i := 0; i < len(nums); i++ { + if operationCounts[i] < nums[i] { + return false + } + } + return true } diff --git a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go index 14ff50eb4..4c83e372b 100644 --- a/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go +++ b/leetcode/3301-3400/3355.Zero-Array-Transformation-I/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []int + queries [][]int + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 0, 1}, [][]int{{0, 2}}, true}, + {"TestCase2", []int{4, 3, 2, 1}, [][]int{{1, 3}, {0, 2}}, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5eccc40f383985317e92213a9642240e230decb0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 22 May 2025 08:59:36 +0800 Subject: [PATCH 287/450] Add solution and test-cases for problem 3362 --- .../README.md | 51 +++++++++++++---- .../Solution.go | 55 ++++++++++++++++++- .../Solution_test.go | 23 ++++---- 3 files changed, 105 insertions(+), 24 deletions(-) diff --git a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md index fb5595409..d0fd88c2f 100755 --- a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md +++ b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/README.md @@ -1,28 +1,55 @@ # [3362.Zero Array Transformation III][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 integer array `nums` of length `n` and a 2D array `queries` where `queries[i] = [li, ri]`. + +Each `queries[i]` represents the following action on `nums`: + +- Decrement the value at each index in the range `[li, ri]` in nums by **at most** `1`. +- The amount by which the value is decremented can be chosen **independently** for each index. + +A **Zero Array** is an array with all its elements equal to 0. + +Return the **maximum** number of elements that can be removed from `queries`, such that `nums` can still be converted to a **zero array** using the remaining queries. If it is not possible to convert `nums` to a **zero array**, return -1. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,0,2], queries = [[0,2],[0,2],[1,1]] + +Output: 1 + +Explanation: + +After removing queries[2], nums can still be converted to a zero array. + +Using queries[0], decrement nums[0] and nums[2] by 1 and nums[1] by 0. +Using queries[1], decrement nums[0] and nums[2] by 1 and nums[1] by 0. +``` + +**Example 2:** + ``` +Input: nums = [1,1,1,1], queries = [[1,3],[0,2],[1,3],[1,2]] -## 题意 -> ... +Output: 2 -## 题解 +Explanation: -### 思路1 -> ... -Zero Array Transformation III -```go +We can remove queries[2] and queries[3]. ``` +**Example 3:** + +``` +Input: nums = [1,2,3,4], queries = [[0,3]] + +Output: -1 + +Explanation: + +nums cannot be converted to a zero array even after using all the queries. +``` ## 结语 diff --git a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go index d115ccf5e..922013bef 100644 --- a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go +++ b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution.go @@ -1,5 +1,58 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "sort" +) + +func Solution(nums []int, queries [][]int) int { + sort.Slice(queries, func(i, j int) bool { + return queries[i][0] < queries[j][0] + }) + pq := &Heap{} + heap.Init(pq) + deltaArray := make([]int, len(nums)+1) + operations := 0 + + for i, j := 0, 0; i < len(nums); i++ { + operations += deltaArray[i] + for j < len(queries) && queries[j][0] == i { + heap.Push(pq, queries[j][1]) + j++ + } + for operations < nums[i] && pq.Len() > 0 && (*pq)[0] >= i { + operations += 1 + deltaArray[heap.Pop(pq).(int)+1] -= 1 + } + if operations < nums[i] { + return -1 + } + } + return pq.Len() +} + +type Heap []int + +func (h Heap) Len() int { + return len(h) +} + +func (h Heap) Less(i, j int) bool { + return h[i] > h[j] +} + +func (h Heap) Swap(i, j int) { + h[i], h[j] = h[j], h[i] +} + +func (h *Heap) Push(x interface{}) { + *h = append(*h, x.(int)) +} + +func (h *Heap) Pop() interface{} { + old := *h + n := len(old) + x := old[n-1] + *h = old[0 : n-1] return x } diff --git a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go index 14ff50eb4..ee6a24e21 100644 --- a/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go +++ b/leetcode/3301-3400/3362.Zero-Array-Transformation-III/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums []int + queries [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 0, 2}, [][]int{{0, 2}, {0, 2}, {1, 1}}, 1}, + {"TestCase2", []int{1, 1, 1, 1}, [][]int{{1, 3}, {0, 2}, {1, 3}, {1, 2}}, 2}, + {"TestCase3", []int{1, 2, 3, 4}, [][]int{{0, 3}}, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b184f6a877941a8beb566079fc113dc21fb0cd98 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 23 May 2025 09:22:01 +0800 Subject: [PATCH 288/450] Add solution and test-cases for problem 1952 --- .../1901-2000/1952.Three-Divisors/README.md | 25 ++++++++----------- .../1901-2000/1952.Three-Divisors/Solution.go | 17 +++++++++++-- .../1952.Three-Divisors/Solution_test.go | 11 ++++---- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/leetcode/1901-2000/1952.Three-Divisors/README.md b/leetcode/1901-2000/1952.Three-Divisors/README.md index b2fe7eac9..d85dde577 100755 --- a/leetcode/1901-2000/1952.Three-Divisors/README.md +++ b/leetcode/1901-2000/1952.Three-Divisors/README.md @@ -1,28 +1,25 @@ # [1952.Three Divisors][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 +Given an integer `n`, return `true` if n has **exactly three positive divisors**. Otherwise, return `false`. + +An integer m is a divisor of n if there exists an integer k such that n = k * m. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2 +Output: false +Explantion: 2 has only two divisors: 1 and 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Three Divisors -```go ``` - +Input: n = 4 +Output: true +Explantion: 4 has three divisors: 1, 2, and 4. +``` ## 结语 diff --git a/leetcode/1901-2000/1952.Three-Divisors/Solution.go b/leetcode/1901-2000/1952.Three-Divisors/Solution.go index d115ccf5e..6b0619d9a 100644 --- a/leetcode/1901-2000/1952.Three-Divisors/Solution.go +++ b/leetcode/1901-2000/1952.Three-Divisors/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) bool { + c := 0 + for i := 2; i < n; i++ { + if n%i == 0 { + r := n / i + if r != i { + return false + } + c++ + if c > 1 { + return false + } + } + } + return c == 1 } diff --git a/leetcode/1901-2000/1952.Three-Divisors/Solution_test.go b/leetcode/1901-2000/1952.Three-Divisors/Solution_test.go index 14ff50eb4..11a52a4c7 100644 --- a/leetcode/1901-2000/1952.Three-Divisors/Solution_test.go +++ b/leetcode/1901-2000/1952.Three-Divisors/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, false}, + {"TestCase2", 4, true}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6db9637fb54c8b3535be8b7af666baac1a9dd176 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 24 May 2025 15:01:18 +0800 Subject: [PATCH 289/450] Add solution and test-cases for problem 2942 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 17 ++++++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 46 insertions(+), 25 deletions(-) diff --git a/leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md b/leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md index 5c7d45dd4..b88fee740 100755 --- a/leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md +++ b/leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md @@ -1,28 +1,35 @@ # [2942.Find Words Containing Character][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 a **0-indexed** array of strings `words` and a character `x`. + +Return an **array of indices** representing the words that contain the character `x`. + +**Note** that the returned array may be in **any** order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["leet","code"], x = "e" +Output: [0,1] +Explanation: "e" occurs in both words: "leet", and "code". Hence, we return indices 0 and 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Words Containing Character -```go ``` +Input: words = ["abc","bcd","aaaa","cbc"], x = "a" +Output: [0,2] +Explanation: "a" occurs in "abc", and "aaaa". Hence, we return indices 0 and 2. +``` + +**Example 3:** +``` +Input: words = ["abc","bcd","aaaa","cbc"], x = "z" +Output: [] +Explanation: "z" does not occur in any of the words. Hence, we return an empty array. +``` ## 结语 diff --git a/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go b/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go index d115ccf5e..20924c8fb 100644 --- a/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go +++ b/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words []string, x byte) []int { + var ans []int + for i, word := range words { + ok := false + for _, b := range []byte(word) { + if b == x { + ok = true + break + } + } + if ok { + ans = append(ans, i) + } + } + return ans } diff --git a/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution_test.go b/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution_test.go index 14ff50eb4..b4894f6ec 100644 --- a/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution_test.go +++ b/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + x byte + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"leet", "code"}, 'e', []int{0, 1}}, + {"TestCase2", []string{"abc", "bcd", "aaaa", "cbc"}, 'a', []int{0, 2}}, + {"TestCase3", []string{"abc", "bcd", "aaaa", "cbc"}, 'z', nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.x) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.x) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c1389e77175bc316b97de42e4f1bd2f876a5b9cd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 25 May 2025 15:56:14 +0800 Subject: [PATCH 290/450] Add solution and test-cases for problem 764 --- leetcode/701-800/0764.Largest-Plus-Sign/1.jpg | Bin 0 -> 14307 bytes leetcode/701-800/0764.Largest-Plus-Sign/2.jpg | Bin 0 -> 1294 bytes .../701-800/0764.Largest-Plus-Sign/README.md | 31 ++++--- .../0764.Largest-Plus-Sign/Solution.go | 81 +++++++++++++++++- .../0764.Largest-Plus-Sign/Solution_test.go | 20 ++--- 5 files changed, 106 insertions(+), 26 deletions(-) create mode 100644 leetcode/701-800/0764.Largest-Plus-Sign/1.jpg create mode 100644 leetcode/701-800/0764.Largest-Plus-Sign/2.jpg diff --git a/leetcode/701-800/0764.Largest-Plus-Sign/1.jpg b/leetcode/701-800/0764.Largest-Plus-Sign/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af33484e7b3e2a3621a8d8fe8d174b30840cc328 GIT binary patch literal 14307 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 literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0764.Largest-Plus-Sign/2.jpg b/leetcode/701-800/0764.Largest-Plus-Sign/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d63b9ac48c0d72c00cc3f403bc0f5159801a3df GIT binary patch literal 1294 zcmex=>ukC3pCfH06P05XITq?4J21E^7eo0A(TN+S4wfI*Oh zA(SD6nNf*>Nsy6Qkn#T!1}UIZ!GHk{IM~@ZSy_N`CISo$EG$gy9E>c?P+3MM7G_p9 zb`C*K2}$#?X$Jg;4tLHV1PzTl6+27QA^444L`N<1si3TuCEz7?#&v4hCcb}h_ z!C9dWOrbaTCsiDK^?CRC32@fLPzKKMw7;E?rB|POZ|4kWxrQ((`f$eFT&th{yvV3w zXOmP|@d<&)d&|Xa@?J^zy^{(ROk1kGsYO*K%h;x)p>T%H-MikeyP8)AFx)lCf2X$K zJJXWaB3cWzULZLb7*fn1&ptQms*9E@w41eg+J>yYPu9yPUS{J_`R5hYGilPlGsjOY z&ePqu`u@9ui!YtrydO7zFdfGLZVKiD(>V<=Gog}TkdgU{Z*ijN7A zjcPEc+`Vi1by4=P1&q6p0?8@#;{F}8n(uH;UK6mY0T{=nRjEOLoE~RQKKwT0{&y*% zuBD5@f-`NLjdKm_h0Ket%uzn2B;c}CDD**Eol0f@#E#R&jt_%g+|quZs>vBEHFIjj zrT&#qKbfsaIhU$e<>gd;>_f-GSr3n>teE2B_3ylr;>A5d8GF@w<$V_^F=sdC`u1#7 zaXzugD(&^Q9iH~5H!KQ^vvZSjxE3mst(cvfN$12T#gjMRDBP}g4%d5heC6w^ZyWwv%{;I|yYkhu^RvtY zpA{@vacRn7&!3W$sv|4XA633{0J(^P`J9Yg-n*q=k2+pm!OT8;_sZJBfYK}m>1Dlt zk6e*^5HdHZHAFR5`gi9F+XE}Dj&iL4>jD$(b1dL~VBGeP>^O`8NcMfdQca!6HSelmu5{_kp30uIiSv%l&@E [!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 integer `n`. You have an `n x n` binary `grid` grid with all values initially `1`'s except for some indices given in the array `mines`. The `ith` element of the array `mines` is defined as `mines[i] = [xi, yi]` where `grid[xi][yi] == 0`. + +Return the order of the largest **axis-aligned** plus sign of 1's contained in `grid`. If there is none, return `0`. + +An **axis-aligned** plus sign of `1`'s of order `k` has some center `grid[r][c] == 1` along with four arms of length `k - 1` going up, down, left, and right, and made of `1`'s. Note that there could be `0`'s or `1`'s beyond the arms of the plus sign, only the relevant area of the plus sign is checked for `1`'s. -**Example 1:** +**Example 1:** + +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5, mines = [[4,2]] +Output: 2 +Explanation: In the above grid, the largest plus sign can only be of order 2. One of them is shown. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Largest Plus Sign -```go ``` - +Input: n = 1, mines = [[0,0]] +Output: 0 +Explanation: There is no plus sign, so return 0. +``` ## 结语 diff --git a/leetcode/701-800/0764.Largest-Plus-Sign/Solution.go b/leetcode/701-800/0764.Largest-Plus-Sign/Solution.go index d115ccf5e..fda3a5a04 100644 --- a/leetcode/701-800/0764.Largest-Plus-Sign/Solution.go +++ b/leetcode/701-800/0764.Largest-Plus-Sign/Solution.go @@ -1,5 +1,82 @@ package Solution -func Solution(x bool) bool { - return x +type l764 struct { + up, down, left, right int +} + +func Solution(n int, mines [][]int) int { + var ans int + checker := make(map[int]map[int]struct{}) + for _, m := range mines { + if _, ok := checker[m[0]]; !ok { + checker[m[0]] = map[int]struct{}{} + } + checker[m[0]][m[1]] = struct{}{} + } + order := make([][]l764, n) + for i := range n { + order[i] = make([]l764, n) + } + + for i := 0; i < n; i++ { + one := 0 + for j := 0; j < n; j++ { + if v, ok := checker[i]; ok { + if _, ok1 := v[j]; ok1 { + one = 0 + continue + } + } + order[i][j].left = one + one++ + } + one = 0 + for j := n - 1; j >= 0; j-- { + if v, ok := checker[i]; ok { + if _, ok1 := v[j]; ok1 { + one = 0 + continue + } + } + order[i][j].right = one + one++ + + } + + one = 0 + for j := 0; j < n; j++ { + if v, ok := checker[j]; ok { + if _, ok1 := v[i]; ok1 { + one = 0 + continue + } + } + order[j][i].up = one + one++ + } + one = 0 + for j := n - 1; j >= 0; j-- { + if v, ok := checker[j]; ok { + if _, ok1 := v[i]; ok1 { + one = 0 + continue + } + } + order[j][i].down = one + one++ + } + } + + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if v, ok := checker[i]; ok { + if _, ok1 := v[j]; ok1 { + continue + } + } + + ans = max(ans, min(order[i][j].down, order[i][j].up, order[i][j].left, order[i][j].right)+1) + } + } + return ans } diff --git a/leetcode/701-800/0764.Largest-Plus-Sign/Solution_test.go b/leetcode/701-800/0764.Largest-Plus-Sign/Solution_test.go index 14ff50eb4..8d7e852e4 100644 --- a/leetcode/701-800/0764.Largest-Plus-Sign/Solution_test.go +++ b/leetcode/701-800/0764.Largest-Plus-Sign/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + mines [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, [][]int{{4, 2}}, 2}, + {"TestCase2", 1, [][]int{{0, 0}}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.mines) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.mines) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8fb0717c50f94c93a9f39df55ca7abee2ac7fcbe Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 26 May 2025 09:25:32 +0800 Subject: [PATCH 291/450] Add solution and test-cases for problem 1447 --- .../1447.Simplified-Fractions/README.md | 34 +++++++++++++++++++ .../1447.Simplified-Fractions/Solution.go | 24 +++++++++++-- .../Solution_test.go | 16 +++++---- 3 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1447.Simplified-Fractions/README.md diff --git a/leetcode/1401-1500/1447.Simplified-Fractions/README.md b/leetcode/1401-1500/1447.Simplified-Fractions/README.md new file mode 100644 index 000000000..2b69a1c8e --- /dev/null +++ b/leetcode/1401-1500/1447.Simplified-Fractions/README.md @@ -0,0 +1,34 @@ +# [1447.Simplified Fractions][title] + +## Description +Given an integer `n`, return a list of all **simplified** fractions between `0` and `1` (exclusive) such that the denominator is less-than-or-equal-to `n`. You can return the answer in **any order**. + +**Example 1:** + +``` +Input: n = 2 +Output: ["1/2"] +Explanation: "1/2" is the only unique fraction with a denominator less-than-or-equal-to 2. +``` + +**Example 2:** + +``` +Input: n = 3 +Output: ["1/2","1/3","2/3"] +``` + +**Example 3:** + +``` +Input: n = 4 +Output: ["1/2","1/3","1/4","2/3","3/4"] +Explanation: "2/4" is not a simplified fraction because it can be simplified to "1/2". +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/simplified-fractions +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1447.Simplified-Fractions/Solution.go b/leetcode/1401-1500/1447.Simplified-Fractions/Solution.go index d115ccf5e..8df5954a2 100755 --- a/leetcode/1401-1500/1447.Simplified-Fractions/Solution.go +++ b/leetcode/1401-1500/1447.Simplified-Fractions/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func gcd(a, b int) int { + if b == 0 { + return a + } + return gcd(b, a%b) +} + +func Solution(n int) []string { + in := make(map[string]struct{}) + for i := 2; i <= n; i++ { + for j := 1; j < i; j++ { + m := gcd(j, i) + in[fmt.Sprintf("%d/%d", j/m, i/m)] = struct{}{} + } + } + ans := make([]string, 0) + for i := range in { + ans = append(ans, i) + } + return ans } diff --git a/leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go b/leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go index 14ff50eb4..40558224f 100755 --- a/leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go +++ b/leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, []string{"1/2"}}, + {"TestCase2", 3, []string{"1/2", "1/3", "2/3"}}, + {"TestCase3", 4, []string{"1/2", "1/3", "1/4", "2/3", "3/4"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { got := Solution(c.inputs) + sort.Strings(got) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a205dd9951f16c61a7106516e2fad37723f819ff Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 27 May 2025 20:46:25 +0800 Subject: [PATCH 292/450] update go.mod --- go.mod | 24 ++++++++++++------------ go.sum | 45 +++++++++++++++++++++++++++++++++------------ 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 4c57435d4..ca23e8d97 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module awesome-golang-algorithm go 1.24 require ( - github.com/imroc/req/v3 v3.50.0 + github.com/imroc/req/v3 v3.52.2 github.com/stretchr/testify v1.10.0 ) @@ -12,24 +12,24 @@ require ( github.com/cloudflare/circl v1.6.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect + github.com/google/pprof v0.0.0-20250501235452-c0086092b71a // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/icholy/digest v1.1.0 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/onsi/ginkgo/v2 v2.23.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.50.1 // indirect - github.com/refraction-networking/utls v1.6.7 // indirect + github.com/quic-go/quic-go v0.52.0 // indirect + github.com/refraction-networking/utls v1.7.3 // indirect go.uber.org/automaxprocs v1.6.0 // indirect - go.uber.org/mock v0.5.1 // indirect - golang.org/x/crypto v0.37.0 // indirect - golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect + go.uber.org/mock v0.5.2 // indirect + golang.org/x/crypto v0.38.0 // indirect golang.org/x/mod v0.24.0 // indirect - golang.org/x/net v0.39.0 // indirect - golang.org/x/sync v0.13.0 // indirect - golang.org/x/sys v0.32.0 // indirect - golang.org/x/text v0.24.0 // indirect - golang.org/x/tools v0.32.0 // indirect + golang.org/x/net v0.40.0 // indirect + golang.org/x/sync v0.14.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.25.0 // indirect + golang.org/x/tools v0.33.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0ce8fd2f0..b1ee12f57 100644 --- a/go.sum +++ b/go.sum @@ -6,19 +6,26 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 h1:gD0vax+4I+mAj+jEChEf25Ia07Jq7kYOFO5PPhAxFl4= +github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= +github.com/google/pprof v0.0.0-20250501235452-c0086092b71a h1:rDA3FfmxwXR+BVKKdz55WwMJ1pD2hJQNW31d+l3mPk4= +github.com/google/pprof v0.0.0-20250501235452-c0086092b71a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/imroc/req/v3 v3.50.0 h1:n3BVnZiTRpvkN5T1IB79LC/THhFU9iXksNRMH4ZNVaY= -github.com/imroc/req/v3 v3.50.0/go.mod h1:tsOk8K7zI6cU4xu/VWCZVtq9Djw9IWm4MslKzme5woU= +github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4= +github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y= +github.com/imroc/req/v3 v3.51.0 h1:GyJxJUrvTVkhGH3v5h2UC04hqU6P465kJQNa9QeyECg= +github.com/imroc/req/v3 v3.51.0/go.mod h1:sYQMvAjeoDrAdijR8ty71qiAHOBsF8XroF4YVddPdgQ= +github.com/imroc/req/v3 v3.52.2 h1:xJocr1aIv0a2K9knfBQ4JnZHk+kWTITdjf0mgDg229I= +github.com/imroc/req/v3 v3.52.2/go.mod h1:dBGsDloOSZJcFs6PnTjZXYBJK70OXbZpizHBLNqcH2k= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -35,10 +42,14 @@ github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4 github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.50.1 h1:unsgjFIUqW8a2oopkY7YNONpV1gYND6Nt9hnt1PN94Q= -github.com/quic-go/quic-go v0.50.1/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= -github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= -github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= +github.com/quic-go/quic-go v0.51.0 h1:K8exxe9zXxeRKxaXxi/GpUqYiTrtdiWP8bo1KFya6Wc= +github.com/quic-go/quic-go v0.51.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= +github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA= +github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= +github.com/refraction-networking/utls v1.7.1 h1:dxg+jla3uocgN8HtX+ccwDr68uCBBO3qLrkZUbqkcw0= +github.com/refraction-networking/utls v1.7.1/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ= +github.com/refraction-networking/utls v1.7.3 h1:L0WRhHY7Oq1T0zkdzVZMR6zWZv+sXbHB9zcuvsAEqCo= +github.com/refraction-networking/utls v1.7.3/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= @@ -47,24 +58,34 @@ go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/mock v0.5.1 h1:ASgazW/qBmR+A32MYFDB6E2POoTgOwT509VP0CT/fjs= go.uber.org/mock v0.5.1/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= +go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= +go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= -golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= -golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 06ac46aac66cc082ea490c1de3afa43463940009 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 28 May 2025 22:09:03 +0800 Subject: [PATCH 293/450] Add solution and test-cases for problem 3372 --- .../1.png | Bin 0 -> 105763 bytes .../2.png | Bin 0 -> 79985 bytes .../README.md | 45 ++++++++++---- .../Solution.go | 58 +++++++++++++++++- .../Solution_test.go | 22 +++---- 5 files changed, 99 insertions(+), 26 deletions(-) create mode 100644 leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/1.png create mode 100644 leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/2.png diff --git a/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/1.png b/leetcode/3301-3400/3372.Maximize-the-Number-of-Target-Nodes-After-Connecting-Trees-I/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6d819943ccf55637b91cb8b7c5ac78c8bb2060c8 GIT binary patch literal 105763 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

    tok``XYhn4z5b?QEb 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 X+`W^}2QEGzy8ZmGV*SZY1ZwbagOZU^ literal 0 HcmV?d00001 diff --git a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/2.gif b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/2.gif new file mode 100644 index 0000000000000000000000000000000000000000..438c475621f028e672079d162e8a5c58bb2e2071 GIT binary patch literal 327979 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 MeGyhrnl#$k5%E|`L=dUhNwY? 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 iH!K=;O7oG{`YEmFXQJ$MUPZ6l{nr> [!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 integer `limit` and a 2D array `queries` of size `n x 2`. + +There are `limit + 1` balls with **distinct** labels in the range `[0, limit]`. Initially, all balls are uncolored. For every query in `queries` that is of the form `[x, y]`, you mark ball `x` with the color `y`. After each query, you need to find the number of **distinct** colors among the balls. + +Return an array `result` of length `n`, where `result[i]` denotes the number of distinct colors after `ith` query. -**Example 1:** +**Note** that when answering a query, lack of a color will not be considered as a color. + +**Example 1:** + +![1](./1.gif) ``` -Input: a = "11", b = "1" -Output: "100" +Input: limit = 4, queries = [[1,4],[2,5],[1,3],[3,4]] + +Output: [1,2,2,3] + +Explanation: + +After query 0, ball 1 has color 4. +After query 1, ball 1 has color 4, and ball 2 has color 5. +After query 2, ball 1 has color 3, and ball 2 has color 5. +After query 3, ball 1 has color 3, ball 2 has color 5, and ball 3 has color 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.gif) -### 思路1 -> ... -Find the Number of Distinct Colors Among the Balls -```go ``` +Input: limit = 4, queries = [[0,1],[1,2],[2,2],[3,4],[4,5]] + +Output: [1,2,2,3,4] +Explanation: + +After query 0, ball 0 has color 1. +After query 1, ball 0 has color 1, and ball 1 has color 2. +After query 2, ball 0 has color 1, and balls 1 and 2 have color 2. +After query 3, ball 0 has color 1, balls 1 and 2 have color 2, and ball 3 has color 4. +After query 4, ball 0 has color 1, balls 1 and 2 have color 2, ball 3 has color 4, and ball 4 has color 5. +``` ## 结语 diff --git a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go index d115ccf5e..1f62ffcc4 100644 --- a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go +++ b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(limit int, queries [][]int) []int { + ans := make([]int, len(queries)) + colors := make(map[int]int) + colored := make(map[int]int) + for i, q := range queries { + ball, color := q[0], q[1] + sourceColor, ok := colored[ball] + if ok { + colors[sourceColor]-- + if colors[sourceColor] == 0 { + delete(colors, sourceColor) + } + } + + colors[color]++ + colored[ball] = color + ans[i] = len(colors) + } + return ans } diff --git a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go index 14ff50eb4..1c22c5786 100644 --- a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go +++ b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + limit int + queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{{1, 4}, {2, 5}, {1, 3}, {3, 4}}, []int{1, 2, 2, 3}}, + {"TestCase2", 4, [][]int{{0, 1}, {1, 2}, {2, 2}, {3, 4}, {4, 5}}, []int{1, 2, 2, 3, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.limit, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.limit, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ee85c6bd7cbfb1edfbdac53dc9fef221a5b9c8e8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 8 Feb 2025 09:15:12 +0800 Subject: [PATCH 194/450] Add solution and test-cases for problem 2349 --- .../README.md | 41 +++++---- .../Solution.go | 86 ++++++++++++++++++- .../Solution_test.go | 21 +++-- 3 files changed, 123 insertions(+), 25 deletions(-) diff --git a/leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md b/leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md index 223c5767d..1d8641bb5 100755 --- a/leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md +++ b/leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md @@ -1,28 +1,37 @@ # [2349.Design a Number Container System][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 +Design a number container system that can do the following: -**Example 1:** +- **Insert** or **Replace** a number at the given index in the system. +- **Return** the smallest index for the given number in the system. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `NumberContainers` class: -## 题意 -> ... +- `NumberContainers()` Initializes the number container system. +- `void change(int index, int number)` Fills the container at `index` with the `number`. If there is already a number at that `index`, replace it. +- `int find(int number)` Returns the smallest index for the given `number`, or ``-1`` if there is no index that is filled by `number` in the system. -## 题解 +**Example 1:** -### 思路1 -> ... -Design a Number Container System -```go ``` - +Input +["NumberContainers", "find", "change", "change", "change", "change", "find", "change", "find"] +[[], [10], [2, 10], [1, 10], [3, 10], [5, 10], [10], [1, 20], [10]] +Output +[null, -1, null, null, null, null, 1, null, 2] + +Explanation +NumberContainers nc = new NumberContainers(); +nc.find(10); // There is no index that is filled with number 10. Therefore, we return -1. +nc.change(2, 10); // Your container at index 2 will be filled with number 10. +nc.change(1, 10); // Your container at index 1 will be filled with number 10. +nc.change(3, 10); // Your container at index 3 will be filled with number 10. +nc.change(5, 10); // Your container at index 5 will be filled with number 10. +nc.find(10); // Number 10 is at the indices 1, 2, 3, and 5. Since the smallest index that is filled with 10 is 1, we return 1. +nc.change(1, 20); // Your container at index 1 will be filled with number 20. Note that index 1 was filled with 10 and then replaced with 20. +nc.find(10); // Number 10 is at the indices 2, 3, and 5. The smallest index that is filled with 10 is 2. Therefore, we return 2. +``` ## 结语 diff --git a/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go index d115ccf5e..6581c8730 100644 --- a/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go +++ b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go @@ -1,5 +1,87 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type NumberContainers struct { + indies map[int]int + list map[int][]int +} + +func Constructor() NumberContainers { + return NumberContainers{ + indies: map[int]int{}, + list: map[int][]int{}, + } +} + +func (this *NumberContainers) Change(index int, number int) { + v, ok := this.indies[index] + this.indies[index] = number + if !ok { + list := this.list[number] + idx := sort.Search(len(list), func(i int) bool { + return list[i] > index + }) + if idx == len(list) { + this.list[number] = append(this.list[number], index) + } else { + b := append([]int{index}, list[idx:]...) + a := append(list[:idx], b...) + this.list[number] = a + } + return + } + if v != number { + list := this.list[v] + idx := sort.Search(len(list), func(i int) bool { + return list[i] >= index + }) + this.list[v] = append(this.list[v][:idx], this.list[v][idx+1:]...) + + list = this.list[number] + idx = sort.Search(len(list), func(i int) bool { + return list[i] > index + }) + if idx == len(list) { + this.list[number] = append(this.list[number], index) + } else { + b := append([]int{index}, list[idx:]...) + a := append(list[:idx], b...) + this.list[number] = a + } + } + +} + +func (this *NumberContainers) Find(number int) int { + v := this.list[number] + if len(v) == 0 { + return -1 + } + return v[0] +} + +/** + * Your NumberContainers object will be instantiated and called as such: + * obj := Constructor(); + * obj.Change(index,number); + * param_2 := obj.Find(number); + */ + +type input struct { + name string + index, number int +} + +func Solution(inputs []input) []int { + c := Constructor() + ans := make([]int, 0) + for _, in := range inputs { + if in.name == "change" { + c.Change(in.index, in.number) + continue + } + ans = append(ans, c.Find(in.number)) + } + return ans } diff --git a/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go index 14ff50eb4..db6a325d4 100644 --- a/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go +++ b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go @@ -10,12 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []input + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []input{ + {"find", 0, 10}, + {"change", 2, 10}, + {"change", 1, 10}, + {"change", 3, 10}, + {"change", 5, 10}, + {"find", 0, 10}, + {"change", 1, 20}, + {"find", 0, 10}, + }, []int{-1, 1, 2}}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e9fa65e97f8c873c42bd4cb87016ae18ea8a1e6d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 9 Feb 2025 17:25:30 +0800 Subject: [PATCH 195/450] Add solution and test-cases for problem 2364 --- .../2364.Count-Number-of-Bad-Pairs/README.md | 30 ++++++++++--------- .../Solution.go | 16 ++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md index 14b8afa41..f4820e0e8 100755 --- a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md +++ b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md @@ -1,28 +1,30 @@ # [2364.Count Number of Bad Pairs][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 a **0-indexed** integer array `nums`. A pair of indices `(i, j)` is a **bad pair** if `i < j` and `j - i != nums[j] - nums[i]`. + +Return the total number of **bad pairs** in `nums`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,1,3,3] +Output: 5 +Explanation: The pair (0, 1) is a bad pair since 1 - 0 != 1 - 4. +The pair (0, 2) is a bad pair since 2 - 0 != 3 - 4, 2 != -1. +The pair (0, 3) is a bad pair since 3 - 0 != 3 - 4, 3 != -1. +The pair (1, 2) is a bad pair since 2 - 1 != 3 - 1, 1 != 2. +The pair (2, 3) is a bad pair since 3 - 2 != 3 - 3, 1 != 0. +There are a total of 5 bad pairs, so we return 5. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Number of Bad Pairs -```go ``` - +Input: nums = [1,2,3,4,5] +Output: 0 +Explanation: There are no bad pairs. +``` ## 结语 diff --git a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go index d115ccf5e..8ff353a5d 100644 --- a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go +++ b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int64 { + l := len(nums) + diff := make(map[int]int64) + diff[0-nums[0]] = 1 + + var ans, count int64 + count = 1 + for i := 1; i < l; i++ { + a := i - nums[i] + ans += count - diff[a] + diff[a]++ + count++ + } + return ans } diff --git a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go index 14ff50eb4..359e21646 100644 --- a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go +++ b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 1, 3, 3}, 5}, + {"TestCase2", []int{1, 2, 3, 4, 5}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0d9a26c7004b87d45baef3b76e4464a89610d2db Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 10 Feb 2025 08:59:40 +0800 Subject: [PATCH 196/450] Add solution and test-cases for problem 3174 --- .../3101-3200/3174.Clear-Digits/README.md | 37 ++++++++++++------- .../3101-3200/3174.Clear-Digits/Solution.go | 14 ++++++- .../3174.Clear-Digits/Solution_test.go | 13 +++---- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/leetcode/3101-3200/3174.Clear-Digits/README.md b/leetcode/3101-3200/3174.Clear-Digits/README.md index 814084c11..43536a572 100755 --- a/leetcode/3101-3200/3174.Clear-Digits/README.md +++ b/leetcode/3101-3200/3174.Clear-Digits/README.md @@ -1,28 +1,39 @@ # [3174.Clear Digits][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 a string `s`. + +Your task is to remove **all** digits by doing this operation repeatedly: + +- Delete the first digit and the **closest non-digit** character to its left. + +Return the resulting string after removing all digits. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s = "abc" + +Output: "abc" -## 题意 -> ... +Explanation: -## 题解 +There is no digit in the string. +``` + +**Example 2:** -### 思路1 -> ... -Clear Digits -```go ``` +Input: s = "cb34" + +Output: "" +Explanation: + +First, we apply the operation on s[2], and s becomes "c4". + +Then we apply the operation on s[1], and s becomes "". +``` ## 结语 diff --git a/leetcode/3101-3200/3174.Clear-Digits/Solution.go b/leetcode/3101-3200/3174.Clear-Digits/Solution.go index d115ccf5e..c902bcf30 100644 --- a/leetcode/3101-3200/3174.Clear-Digits/Solution.go +++ b/leetcode/3101-3200/3174.Clear-Digits/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + bs := []byte(s) + index := -1 + for i := range len(bs) { + if !(bs[i] >= '0' && bs[i] <= '9') { + index++ + bs[index] = bs[i] + continue + } + index-- + } + return string(bs[:index+1]) } diff --git a/leetcode/3101-3200/3174.Clear-Digits/Solution_test.go b/leetcode/3101-3200/3174.Clear-Digits/Solution_test.go index 14ff50eb4..2396b1b49 100644 --- a/leetcode/3101-3200/3174.Clear-Digits/Solution_test.go +++ b/leetcode/3101-3200/3174.Clear-Digits/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abc", "abc"}, + {"TestCase2", "cb34", ""}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1b429f666e72e92d8cf04248e2d05bd8a15324e4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 11 Feb 2025 09:00:36 +0800 Subject: [PATCH 197/450] Add solution for problem 1910 --- .../Solution.go | 28 +++++++++++++++++++ .../Solution_test.go | 24 ++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go index ce77c9053..8284a6984 100644 --- a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go @@ -19,3 +19,31 @@ func Solution(s string, part string) string { return s } + +func Solution1(s string, part string) string { + bs := []byte(s) + index := -1 + l := len(part) + lastByte := part[l-1] + for i := 0; i < len(s); i++ { + index++ + bs[index] = s[i] + if s[i] != lastByte { + continue + } + + if start := index - l + 1; start >= 0 { + if string(bs[start:index+1]) == part { + index = start - 1 + } + } + + } + if start := index - l + 1; start >= 0 { + if string(bs[start:index+1]) == part { + index = start - 1 + } + } + + return string(bs[:index+1]) +} diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go index 6d7ff7dff..b572abe27 100644 --- a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go @@ -30,6 +30,30 @@ func TestSolution(t *testing.T) { } } +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + s, p string + expect string + }{ + {"TestCase1", "daabcbaabcbc", "abc", "dab"}, + {"TestCase2", "axxxxyyyyb", "xy", "ab"}, + {"TestCase3", "eemckxmckx", "emckx", ""}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution1(c.s, c.p) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.p) + } + }) + } +} + // 压力测试 func BenchmarkSolution(b *testing.B) { } From 16362f39954a8cc67a7de962a5d682491e6a0f32 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 12 Feb 2025 09:06:27 +0800 Subject: [PATCH 198/450] Add solution and test-cases for problem 2342 --- .../README.md | 28 +++++++------- .../Solution.go | 38 ++++++++++++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 56 insertions(+), 23 deletions(-) diff --git a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md index 5f594706e..47421e699 100755 --- a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md +++ b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md @@ -1,28 +1,28 @@ # [2342.Max Sum of a Pair With Equal Sum of Digits][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 a **0-indexed** array `nums` consisting of **positive** integers. You can choose two indices `i` and `j`, such that `i != j`, and the sum of digits of the number `nums[i]` is equal to that of `nums[j]`. + +Return the **maximum** value of `nums[i] + nums[j]` that you can obtain over all possible indices `i` and `j` that satisfy the conditions. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [18,43,36,13,7] +Output: 54 +Explanation: The pairs (i, j) that satisfy the conditions are: +- (0, 2), both numbers have a sum of digits equal to 9, and their sum is 18 + 36 = 54. +- (1, 4), both numbers have a sum of digits equal to 7, and their sum is 43 + 7 = 50. +So the maximum sum that we can obtain is 54. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Max Sum of a Pair With Equal Sum of Digits -```go ``` - +Input: nums = [10,12,19,14] +Output: -1 +Explanation: There are no two numbers that satisfy the conditions, so we return -1. +``` ## 结语 diff --git a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go index d115ccf5e..5dacb201a 100644 --- a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go +++ b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func countOfOne2342(n int) int { + one := 0 + for n > 0 { + one += n % 10 + n /= 10 + } + return one +} + +func Solution(nums []int) int { + ans := -1 + sum := make(map[int][2]int) + for i := range nums { + one := countOfOne2342(nums[i]) + v, ok := sum[one] + if !ok { + sum[one] = [2]int{nums[i], -1} + continue + } + if nums[i] >= sum[one][0] { + v[1] = v[0] + v[0] = nums[i] + sum[one] = v + continue + } + if nums[i] > sum[one][1] { + v[1] = nums[i] + sum[one] = v + } + } + for _, v := range sum { + if v[0] != -1 && v[1] != -1 { + ans = max(ans, v[0]+v[1]) + } + } + return ans } diff --git a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution_test.go b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution_test.go index 14ff50eb4..34ac37b8a 100644 --- a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution_test.go +++ b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/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{18, 43, 36, 13, 7}, 54}, + {"TestCase2", []int{10, 12, 19, 14}, -1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 57b91778cfdb795804064f4c715086ef565ceb3c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 13 Feb 2025 09:09:29 +0800 Subject: [PATCH 199/450] Add solution and test-cases for problem 3066 --- .../README.md | 41 +++++++++++------ .../Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 80 insertions(+), 25 deletions(-) diff --git a/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/README.md b/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/README.md index 91c74019f..ad5fbdc5a 100755 --- a/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/README.md +++ b/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/README.md @@ -1,28 +1,41 @@ # [3066.Minimum Operations to Exceed Threshold Value II][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 a **0-indexed** integer array `nums`, and an integer `k`. + +In one operation, you will: + +- Take the two smallest integers `x` and `y` in nums. +- Remove `x` and `y` from nums. +- Add `min(x, y) * 2 + max(x, y)` anywhere in the array. + +**Note** that you can only apply the described operation if `nums` contains at least two elements. + +Return the **minimum** number of operations needed so that all elements of the array are greater than or equal to `k`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,11,10,1,3], k = 10 +Output: 2 +Explanation: In the first operation, we remove elements 1 and 2, then add 1 * 2 + 2 to nums. nums becomes equal to [4, 11, 10, 3]. +In the second operation, we remove elements 3 and 4, then add 3 * 2 + 4 to nums. nums becomes equal to [10, 11, 10]. +At this stage, all the elements of nums are greater than or equal to 10 so we can stop. +It can be shown that 2 is the minimum number of operations needed so that all elements of the array are greater than or equal to 10. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Operations to Exceed Threshold Value II -```go ``` - +Input: nums = [1,1,2,4,9], k = 20 +Output: 4 +Explanation: After one operation, nums becomes equal to [2, 4, 9, 3]. +After two operations, nums becomes equal to [7, 4, 9]. +After three operations, nums becomes equal to [15, 9]. +After four operations, nums becomes equal to [33]. +At this stage, all the elements of nums are greater than 20 so we can stop. +It can be shown that 4 is the minimum number of operations needed so that all elements of the array are greater than or equal to 20. +``` ## 结语 diff --git a/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution.go b/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution.go index d115ccf5e..8c0641471 100644 --- a/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution.go +++ b/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap3066 []int + +func (h *heap3066) Len() int { + return len(*h) +} + +func (h *heap3066) Less(i, j int) bool { + return (*h)[i] < (*h)[j] +} + +func (h *heap3066) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap3066) Push(x any) { + *h = append(*h, x.(int)) +} + +func (h *heap3066) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution(nums []int, k int) int { + steps := 0 + h := heap3066(nums) + heap.Init(&h) + var a, b int + for h.Len() > 0 { + top := h[0] + if top >= k { + break + } + a = heap.Pop(&h).(int) + b = heap.Pop(&h).(int) + heap.Push(&h, min(a, b)*2+max(a, b)) + steps++ + } + return steps +} diff --git a/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution_test.go b/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution_test.go index 14ff50eb4..592a4fa4e 100644 --- a/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution_test.go +++ b/leetcode/3001-3100/3066.Minimum-Operations-to-Exceed-Threshold-Value-II/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 11, 10, 1, 3}, 10, 2}, + {"TestCase2", []int{1, 1, 2, 4, 9}, 20, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 075e957b368676270299dd3f1aa7dbfe91130c54 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 14 Feb 2025 09:14:28 +0800 Subject: [PATCH 200/450] Add solution and test-cases for problem 1390 --- .../1301-1400/1390.Four-Divisors/README.md | 37 +++++++++++++++++++ .../1301-1400/1390.Four-Divisors/Solution.go | 34 ++++++++++++++++- .../1390.Four-Divisors/Solution_test.go | 14 +++---- 3 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 leetcode/1301-1400/1390.Four-Divisors/README.md diff --git a/leetcode/1301-1400/1390.Four-Divisors/README.md b/leetcode/1301-1400/1390.Four-Divisors/README.md new file mode 100644 index 000000000..55b02629c --- /dev/null +++ b/leetcode/1301-1400/1390.Four-Divisors/README.md @@ -0,0 +1,37 @@ +# [1390.Four Divisors][title] + +## Description +Given an integer array `nums`, return the sum of divisors of the integers in that array that have exactly four divisors. If there is no such integer in the array, return `0`. + +**Example 1:** + +``` +Input: nums = [21,4,7] +Output: 32 +Explanation: +21 has 4 divisors: 1, 3, 7, 21 +4 has 3 divisors: 1, 2, 4 +7 has 2 divisors: 1, 7 +The answer is the sum of divisors of 21 only. +``` + +**Example 2:** + +``` +Input: nums = [21,21] +Output: 64 +``` + +**Example 3:** + +``` +Input: nums = [1,2,3,4,5] +Output: 0 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/four-divisors +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1390.Four-Divisors/Solution.go b/leetcode/1301-1400/1390.Four-Divisors/Solution.go index d115ccf5e..7ac98f811 100755 --- a/leetcode/1301-1400/1390.Four-Divisors/Solution.go +++ b/leetcode/1301-1400/1390.Four-Divisors/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func check(n int) (bool, int) { + r := 0 + ans := 0 + for i := 1; i <= int(math.Sqrt(float64(n))); i++ { + if n%i == 0 { + another := n / i + r++ + ans += i + if another != i { + r++ + ans += another + } + if r > 4 { + return false, 0 + } + } + } + return r == 4, ans +} + +func Solution(nums []int) int { + ans := 0 + for _, n := range nums { + ok, v := check(n) + if !ok { + continue + } + ans += v + } + return ans } diff --git a/leetcode/1301-1400/1390.Four-Divisors/Solution_test.go b/leetcode/1301-1400/1390.Four-Divisors/Solution_test.go index 14ff50eb4..889a0bf34 100755 --- a/leetcode/1301-1400/1390.Four-Divisors/Solution_test.go +++ b/leetcode/1301-1400/1390.Four-Divisors/Solution_test.go @@ -10,12 +10,12 @@ 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{21, 4, 7}, 32}, + {"TestCase2", []int{21, 21}, 64}, + {"TestCase3", []int{1, 2, 3, 4, 5}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c8846c559d68638e5929acb36dc194c337886459 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 15 Feb 2025 20:06:13 +0800 Subject: [PATCH 201/450] Add solution and test-cases for problem 2698 --- .../README.md | 41 +++++++++++++++++++ .../Solution.go | 25 ++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/README.md diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/README.md b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/README.md new file mode 100644 index 000000000..6c7ef84df --- /dev/null +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/README.md @@ -0,0 +1,41 @@ +# [2698.Find the Punishment Number of an Integer][title] + +## Description +Given a positive integer `n`, return the **punishment number** of `n`. + +The **punishment number** of `n` is defined as the sum of the squares of all integers `i` such that: + +- `1 <= i <= n` +- The decimal representation of `i * i` can be partitioned into contiguous substrings such that the sum of the integer values of these substrings equals `i`. + +**Example 1:** + +``` +Input: n = 10 +Output: 182 +Explanation: There are exactly 3 integers i in the range [1, 10] that satisfy the conditions in the statement: +- 1 since 1 * 1 = 1 +- 9 since 9 * 9 = 81 and 81 can be partitioned into 8 and 1 with a sum equal to 8 + 1 == 9. +- 10 since 10 * 10 = 100 and 100 can be partitioned into 10 and 0 with a sum equal to 10 + 0 == 10. +Hence, the punishment number of 10 is 1 + 81 + 100 = 182 +``` + +**Example 2:** + +``` +Input: n = 37 +Output: 1478 +Explanation: There are exactly 4 integers i in the range [1, 37] that satisfy the conditions in the statement: +- 1 since 1 * 1 = 1. +- 9 since 9 * 9 = 81 and 81 can be partitioned into 8 + 1. +- 10 since 10 * 10 = 100 and 100 can be partitioned into 10 + 0. +- 36 since 36 * 36 = 1296 and 1296 can be partitioned into 1 + 29 + 6. +Hence, the punishment number of 37 is 1 + 81 + 100 + 1296 = 1478 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-punishment-number-of-an-integer +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go index d115ccf5e..134428a52 100755 --- a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func ok(n, target int) bool { + if n == target { + return true + } + base := 10 + for ; base <= n; base *= 10 { + mod := n % base + if ok(n/base, target-mod) { + return true + } + } + return false +} +func Solution(n int) int { + ans := 0 + for i := 1; i <= n; i++ { + x := i * i + res := ok(x, i) + if res { + ans += x + } + } + return ans } diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go index 14ff50eb4..fc39d481a 100755 --- a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/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", 10, 182}, + {"TestCase2", 37, 1478}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1c803c276b0d220b632ed09a0c4ac6f6d1a6ec65 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 16 Feb 2025 17:10:29 +0800 Subject: [PATCH 202/450] Add solution and test-cases for problem 1718 --- .../README.md | 32 +++++++------- .../Solution.go | 42 ++++++++++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 64 insertions(+), 23 deletions(-) diff --git a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md index 69fd3ea90..5a76d0785 100755 --- a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md +++ b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md @@ -1,28 +1,32 @@ # [1718.Construct the Lexicographically Largest Valid Sequence][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 +Given an integer `n`, find a sequence that satisfies all of the following: + +- The integer `1` occurs once in the sequence. +- Each integer between `2` and `n` occurs twice in the sequence. +- For every integer `i` between `2` and `n`, the **distance** between the two occurrences of `i` is exactly `i`. + +The **distance** between two numbers on the sequence, `a[i]` and `a[j]`, is the absolute difference of their indices, `|j - i|`. + +Return the **lexicographically largest** sequence. It is guaranteed that under the given constraints, there is always a solution. + +A sequence `a` is lexicographically larger than a sequence `b` (of the same length) if in the first position where `a` and `b` differ, sequence a has a number greater than the corresponding number in `b`. For example, `[0,1,9,0]` is lexicographically larger than `[0,1,5,6]` because the first position they differ is at the third number, and `9` is greater than `5`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3 +Output: [3,1,2,3,2] +Explanation: [2,3,2,1,3] is also a valid sequence, but [3,1,2,3,2] is the lexicographically largest valid sequence. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Construct the Lexicographically Largest Valid Sequence -```go ``` - +Input: n = 5 +Output: [5,3,1,4,3,5,2,4,2] +``` ## 结语 diff --git a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go index d115ccf5e..0bb6290c2 100644 --- a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go +++ b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) []int { + l := 2*n - 1 + res := make([]int, l) + used := make([]bool, n+1) + var dfs func(int) bool + dfs = func(start int) bool { + if start == l { + return true + } + if res[start] != 0 { + return dfs(start + 1) + } + + for s := n; s >= 1; s-- { + if used[s] { + continue + } + res[start] = s + used[s] = true + if s == 1 { + if dfs(start + 1) { + return true + } + } else { + if end := start + s; end < l && res[end] == 0 { + res[end] = s + if dfs(start + 1) { + return true + } + res[end] = 0 + } + } + res[start] = 0 + used[s] = false + } + return false + } + + dfs(0) + return res } diff --git a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution_test.go b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution_test.go index 14ff50eb4..23ba78394 100644 --- a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution_test.go +++ b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/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", 3, []int{3, 1, 2, 3, 2}}, + {"TestCase2", 5, []int{5, 3, 1, 4, 3, 5, 2, 4, 2}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 95e49c8a800fa283c497dce1a6ee41dce5befd1f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 18 Feb 2025 09:20:26 +0800 Subject: [PATCH 203/450] Add solution and test-cases for problem 2375 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 28 +++++++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 56 insertions(+), 23 deletions(-) diff --git a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md index f1befb500..f6c5c3e0e 100755 --- a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md +++ b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md @@ -1,28 +1,38 @@ # [2375.Construct Smallest Number From DI String][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 a **0-indexed** string `pattern` of length `n` consisting of the characters `'I'` meaning **increasing** and `'D'` meaning **decreasing**. + +A **0-indexed** string `num` of length `n + 1` is created using the following conditions: + +- `num` consists of the digits `'1'` to `'9'`, where each digit is used **at most** once. +- If `pattern[i] == 'I'`, then `num[i] < num[i + 1]`. +- If `pattern[i] == 'D'`, then `num[i] > num[i + 1]`. + +Return the lexicographically **smallest** possible string `num` that meets the conditions. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: pattern = "IIIDIDDD" +Output: "123549876" +Explanation: +At indices 0, 1, 2, and 4 we must have that num[i] < num[i+1]. +At indices 3, 5, 6, and 7 we must have that num[i] > num[i+1]. +Some possible values of num are "245639871", "135749862", and "123849765". +It can be proven that "123549876" is the smallest possible num that meets the conditions. +Note that "123414321" is not possible because the digit '1' is used more than once. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Construct Smallest Number From DI String -```go ``` - +Input: pattern = "DDD" +Output: "4321" +Explanation: +Some possible values of num are "9876", "7321", and "8742". +It can be proven that "4321" is the smallest possible num that meets the conditions. +``` ## 结语 diff --git a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go index d115ccf5e..75003adbe 100644 --- a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go +++ b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(pattern string) string { + res := make([]byte, len(pattern)+1) + for i := range res { + res[i] = '0' + } + + index := byte('1') + for i := 0; i < len(pattern); i++ { + if pattern[i] == 'D' { + continue + } + res[i] = index + index++ + for pre := i - 1; pre >= 0 && res[pre] == '0'; pre-- { + res[pre] = index + index++ + } + } + + res[len(pattern)] = index + index++ + for pre := len(pattern) - 1; pre >= 0 && res[pre] == '0'; pre-- { + res[pre] = index + index++ + } + return string(res) } diff --git a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution_test.go b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution_test.go index 14ff50eb4..51d433985 100644 --- a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution_test.go +++ b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "IIIDIDDD", "123549876"}, + {"TestCase2", "DDD", "4321"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e505245c27821d844cfb75fdf10da946f521dc27 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 19 Feb 2025 09:11:56 +0800 Subject: [PATCH 204/450] Add solution and test-cases for problem 1415 --- .../README.md | 44 +++++++++++++++++++ .../Solution.go | 32 +++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/README.md diff --git a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/README.md b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/README.md new file mode 100644 index 000000000..f199f5628 --- /dev/null +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/README.md @@ -0,0 +1,44 @@ +# [1415.The k-th Lexicographical String of All Happy Strings of Length n][title] + +## Description +A **happy string** is a string that: + +- consists only of letters of the set `['a', 'b', 'c']`. +- `s[i] != s[i + 1]` for all values of `i` from `1` to `s.length - 1` (string is 1-indexed). + +For example, strings **"abc"**, **"ac"**, **"b"** and "abcbabcbcb" are all happy strings and strings **"aa"**, **"baa"** and **"ababbc"** are not happy strings. + +Given two integers `n` and `k`, consider a list of all happy strings of length `n` sorted in lexicographical order. + +Return the kth string of this list or return an **empty string** if there are less than k happy strings of length n. + +**Example 1:** + +``` +Input: n = 1, k = 3 +Output: "c" +Explanation: The list ["a", "b", "c"] contains all happy strings of length 1. The third string is "c". +``` + +**Example 2:** + +``` +Input: n = 1, k = 4 +Output: "" +Explanation: There are only 3 happy strings of length 1. +``` + +**Example 3:** + +``` +Input: n = 3, k = 9 +Output: "cab" +Explanation: There are 12 different happy string of length 3 ["aba", "abc", "aca", "acb", "bab", "bac", "bca", "bcb", "cab", "cac", "cba", "cbc"]. You will find the 9th string = "cab" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-k-th-lexicographical-string-of-all-happy-strings-of-length-n +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go index d115ccf5e..60ba96afc 100755 --- a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +var canUse = []byte{'a', 'b', 'c'} + +func Solution(n int, k int) string { + bs := make([]byte, n) + var dfs func([]byte, byte, int) + cnt := 0 + dfs = func(cur []byte, pre byte, index int) { + if cnt > k { + return + } + if index == n { + cnt++ + if cnt == k { + copy(bs, cur) + } + return + } + for _, b := range canUse { + if b != pre { + cur[index] = b + dfs(cur, b, index+1) + } + } + } + arr := make([]byte, n) + dfs(arr, byte(' '), 0) + if cnt < k { + return "" + } + return string(bs) } diff --git a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go index 14ff50eb4..c2986bbef 100755 --- a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 3, "c"}, + {"TestCase2", 1, 4, ""}, + {"TestCase3", 3, 9, "cab"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 222a9f8e7e21d74e55801a688efe9df0359a4343 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 20 Feb 2025 09:16:47 +0800 Subject: [PATCH 205/450] Add solution and test-cases for problem 942 --- .../901-1000/0942.DI-String-Match/README.md | 31 +++++++++++-------- .../901-1000/0942.DI-String-Match/Solution.go | 27 ++++++++++++++-- .../0942.DI-String-Match/Solution_test.go | 14 ++++----- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0942.DI-String-Match/README.md b/leetcode/901-1000/0942.DI-String-Match/README.md index f9edc5f1d..300df83db 100644 --- a/leetcode/901-1000/0942.DI-String-Match/README.md +++ b/leetcode/901-1000/0942.DI-String-Match/README.md @@ -1,28 +1,33 @@ # [942.DI String Match][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 +A permutation `perm` of `n + 1` integers of all the integers in the range `[0, n]` can be represented as a string `s` of length `n` where: + +- `s[i] == 'I'` if `perm[i] < perm[i + 1]`, and +- `s[i] == 'D'` if `perm[i] > perm[i + 1]`. + +Given a string `s`, reconstruct the permutation `perm` and return it. If there are multiple valid permutations perm, return **any of them**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "IDID" +Output: [0,4,1,3,2] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -DI String Match -```go ``` +Input: s = "III" +Output: [0,1,2,3] +``` + +**Example 3:** +``` +Input: s = "DDI" +Output: [3,2,0,1] +``` ## 结语 diff --git a/leetcode/901-1000/0942.DI-String-Match/Solution.go b/leetcode/901-1000/0942.DI-String-Match/Solution.go index d115ccf5e..ae2bfb7c5 100644 --- a/leetcode/901-1000/0942.DI-String-Match/Solution.go +++ b/leetcode/901-1000/0942.DI-String-Match/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) []int { + res := make([]int, len(s)+1) + for i := range res { + res[i] = -1 + } + + index := 0 + for i := 0; i < len(s); i++ { + if s[i] == 'D' { + continue + } + res[i] = index + index++ + for pre := i - 1; pre >= 0 && res[pre] == -1; pre-- { + res[pre] = index + index++ + } + } + res[len(s)] = index + index++ + for pre := len(s) - 1; pre >= 0 && res[pre] == -1; pre-- { + res[pre] = index + index++ + } + return res } diff --git a/leetcode/901-1000/0942.DI-String-Match/Solution_test.go b/leetcode/901-1000/0942.DI-String-Match/Solution_test.go index 14ff50eb4..ec9d3d95e 100644 --- a/leetcode/901-1000/0942.DI-String-Match/Solution_test.go +++ b/leetcode/901-1000/0942.DI-String-Match/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "IDID", []int{0, 2, 1, 4, 3}}, + {"TestCase2", "III", []int{0, 1, 2, 3}}, + {"TestCase3", "DDI", []int{2, 1, 0, 3}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ad3016dc05c0033ac0de682041e478d37f39cc62 Mon Sep 17 00:00:00 2001 From: Boris Date: Thu, 20 Feb 2025 22:36:15 +0800 Subject: [PATCH 206/450] update go.mod --- .github/workflows/test.yml | 2 +- go.mod | 27 ++++----- go.sum | 118 +++++++++---------------------------- 3 files changed, 43 insertions(+), 104 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0e9a39431..43a9b0c5f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '^1.23.0' + go-version: '^1.24.0' id: go - name: Get dependencies run: go mod download diff --git a/go.mod b/go.mod index 8b07ff2cd..c445df844 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module awesome-golang-algorithm -go 1.23 +go 1.24.0 require ( github.com/imroc/req/v3 v3.49.1 @@ -9,27 +9,26 @@ require ( require ( github.com/andybalholm/brotli v1.1.1 // indirect - github.com/cloudflare/circl v1.5.0 // indirect + github.com/cloudflare/circl v1.6.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-logr/logr v1.4.2 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect + github.com/google/pprof v0.0.0-20250208200701-d0013a598941 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/compress v1.18.0 // indirect github.com/onsi/ginkgo/v2 v2.22.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.48.2 // indirect + github.com/quic-go/quic-go v0.50.0 // indirect github.com/refraction-networking/utls v1.6.7 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.32.0 // indirect - golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect - golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.34.0 // indirect - golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.29.0 // indirect - golang.org/x/text v0.21.0 // indirect - golang.org/x/tools v0.29.0 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect + golang.org/x/mod v0.23.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.22.0 // indirect + golang.org/x/tools v0.30.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ce17e1c16..9479b6bab 100644 --- a/go.sum +++ b/go.sum @@ -1,124 +1,64 @@ -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= -github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE= -github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= -github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= -github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk= +github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20240528025155-186aa0362fba h1:ql1qNgCyOB7iAEk8JTNM+zJrgIbnyCKX/wdlyPufP5g= -github.com/google/pprof v0.0.0-20240528025155-186aa0362fba/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20250208200701-d0013a598941 h1:43XjGa6toxLpeksjcxs1jIoIyr+vUfOqY2c6HB4bpoc= +github.com/google/pprof v0.0.0-20250208200701-d0013a598941/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA= -github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= -github.com/imroc/req/v3 v3.49.0 h1:5Rac2qvz7Dq0E3PeBo/c2szV3hagPQIGLoHtfBmYhu4= -github.com/imroc/req/v3 v3.49.0/go.mod h1:XZf4t94DNJzcA0UOBlA68hmSrWsAyvN407ADdH4mzCA= github.com/imroc/req/v3 v3.49.1 h1:Nvwo02riiPEzh74ozFHeEJrtjakFxnoWNR3YZYuQm9U= github.com/imroc/req/v3 v3.49.1/go.mod h1:tsOk8K7zI6cU4xu/VWCZVtq9Djw9IWm4MslKzme5woU= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= -github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= -github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= -github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= -github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM= -github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= -github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.45.0 h1:OHmkQGM37luZITyTSu6ff03HP/2IrwDX1ZFiNEhSFUE= -github.com/quic-go/quic-go v0.45.0/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= -github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= -github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= -github.com/refraction-networking/utls v1.6.6 h1:igFsYBUJPYM8Rno9xUuDoM5GQrVEqY4llzEXOkL43Ig= -github.com/refraction-networking/utls v1.6.6/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= +github.com/quic-go/quic-go v0.50.0 h1:3H/ld1pa3CYhkcc20TPIyG1bNsdhn9qZBGN3b9/UyUo= +github.com/quic-go/quic-go v0.50.0/go.mod h1:Vim6OmUvlYdwBhXP9ZVrtGmCMWa3wEqhq3NgYrI8b4E= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= -golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e h1:4qufH0hlUYs6AO6XmZC3GqfDPGSXHVXUFR6OND+iJX4= -golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= -golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo= -golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= -golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= -golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= -golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= -golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa h1:t2QcU6V556bFjYgu4L6C+6VrCPyJZ+eyRsABUPs1mz4= +golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= -golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= -golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From b90445c79d08f1317082c4dd4d506a82884c38c9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 21 Feb 2025 09:17:44 +0800 Subject: [PATCH 207/450] Add solution and test-cases for problem 1780 --- .../README.md | 30 +++++++++++-------- .../Solution.go | 20 +++++++++++-- .../Solution_test.go | 12 ++++---- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md index 44bb7cce3..003d01a65 100755 --- a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md +++ b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md @@ -1,28 +1,32 @@ # [1780.Check if Number is a Sum of Powers of Three][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 +Given an integer `n`, return `true` if it is possible to represent `n` as the sum of distinct powers of three. Otherwise, return `false`. + +An integer `y` is a power of three if there exists an integer `x` such that `y == 3^x`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 12 +Output: true +Explanation: 12 = 31 + 32 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Check if Number is a Sum of Powers of Three -```go +``` +Input: n = 91 +Output: true +Explanation: 91 = 30 + 32 + 34 ``` +**Example 3:** + +``` +Input: n = 21 +Output: false +``` ## 结语 diff --git a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go index d115ccf5e..eaf8080db 100644 --- a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go +++ b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) bool { + arr := make([]int, 15) + arr[0] = 1 + for i := 1; i < 15; i++ { + arr[i] = arr[i-1] * 3 + } + var ok func(int, int) bool + ok = func(index, cur int) bool { + if cur == 0 { + return true + } + if index == 15 { + return false + } + + return ok(index+1, cur-arr[index]) || ok(index+1, cur) + } + return ok(0, n) } diff --git a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go index 14ff50eb4..0f170e42a 100644 --- a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go +++ b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 12, true}, + {"TestCase2", 91, true}, + {"TestCase3", 21, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c7cfecde83976d21f67dc497dfbf5108395532bf Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 22 Feb 2025 20:35:13 +0800 Subject: [PATCH 208/450] Add solution and test-cases for problem 1711 --- .../1701-1800/1711.Count-Good-Meals/README.md | 30 ++++++++++--------- .../1711.Count-Good-Meals/Solution.go | 30 +++++++++++++++++-- .../1711.Count-Good-Meals/Solution_test.go | 13 ++++---- 3 files changed, 50 insertions(+), 23 deletions(-) diff --git a/leetcode/1701-1800/1711.Count-Good-Meals/README.md b/leetcode/1701-1800/1711.Count-Good-Meals/README.md index 751c4edb0..268d5e082 100755 --- a/leetcode/1701-1800/1711.Count-Good-Meals/README.md +++ b/leetcode/1701-1800/1711.Count-Good-Meals/README.md @@ -1,28 +1,30 @@ # [1711.Count Good Meals][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 +A **good meal** is a meal that contains **exactly two different food items** with a sum of deliciousness equal to a power of two. + +You can pick **any** two different foods to make a good meal. + +Given an array of integers `deliciousness` where `deliciousness[i]` is the deliciousness of the `ith` item of food, return the number of different **good meals** you can make from this list modulo `10^9 + 7`. + +Note that items with different indices are considered different even if they have the same deliciousness value. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: deliciousness = [1,3,5,7,9] +Output: 4 +Explanation: The good meals are (1,3), (1,7), (3,5) and, (7,9). +Their respective sums are 4, 8, 8, and 16, all of which are powers of 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Good Meals -```go ``` - +Input: deliciousness = [1,1,1,3,3,3,7] +Output: 15 +Explanation: The good meals are (1,1) with 3 ways, (1,3) with 9 ways, and (1,7) with 3 ways. +``` ## 结语 diff --git a/leetcode/1701-1800/1711.Count-Good-Meals/Solution.go b/leetcode/1701-1800/1711.Count-Good-Meals/Solution.go index d115ccf5e..f69d971b7 100644 --- a/leetcode/1701-1800/1711.Count-Good-Meals/Solution.go +++ b/leetcode/1701-1800/1711.Count-Good-Meals/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +const mod = 1000000007 + +func Solution(deliciousness []int) int { + cur := int64(1) + cnt := make(map[int64]int) + for _, n := range deliciousness { + cnt[int64(n)]++ + } + ans := 0 + for i := 0; i <= 41; i++ { + skip := map[int64]struct{}{} + for d, n := range cnt { + if _, ok := skip[d]; ok { + continue + } + diff := cur - d + if v, ok := cnt[diff]; ok { + skip[diff] = struct{}{} + if diff == d { + ans = (ans + n*(n-1)/2) % mod + } else { + ans = (ans + n*v) % mod + } + } + } + cur <<= 1 + } + return ans } diff --git a/leetcode/1701-1800/1711.Count-Good-Meals/Solution_test.go b/leetcode/1701-1800/1711.Count-Good-Meals/Solution_test.go index 14ff50eb4..1b7baf11a 100644 --- a/leetcode/1701-1800/1711.Count-Good-Meals/Solution_test.go +++ b/leetcode/1701-1800/1711.Count-Good-Meals/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, 3, 5, 7, 9}, 4}, + {"TestCase2", []int{1, 1, 1, 3, 3, 3, 7}, 15}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 60d09e7f0a9df900bcd594af918f3b4c28742905 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Feb 2025 16:29:59 +0800 Subject: [PATCH 209/450] Add solution and test-cases for problem 889 --- .../1.jpg | Bin 0 -> 15330 bytes .../README.md | 27 ++++++------- .../Solution.go | 38 +++++++++++++++++- .../Solution_test.go | 37 ++++++++++++----- 4 files changed, 74 insertions(+), 28 deletions(-) create mode 100644 leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/1.jpg diff --git a/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/1.jpg b/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ae97b5f8b861dc00107d780077aac42b4fabecc GIT binary patch literal 15330 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 literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/README.md b/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/README.md index 5d6551c82..59c80e988 100644 --- a/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/README.md +++ b/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/README.md @@ -1,28 +1,25 @@ # [889.Construct Binary Tree from Preorder and Postorder Traversal][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 +Given two integer arrays, `preorder` and `postorder` where preorder is the preorder traversal of a binary tree of **distinct** values and `postorder` is the postorder traversal of the same tree, reconstruct and return the binary tree. + +If there exist multiple answers, you can **return any** of them. + +**Example 1:** -**Example 1:** +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: preorder = [1,2,4,5,3,6,7], postorder = [4,5,2,6,7,3,1] +Output: [1,2,3,4,5,6,7] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Construct Binary Tree from Preorder and Postorder Traversal -```go ``` - +Input: preorder = [1], postorder = [1] +Output: [1] +``` ## 结语 diff --git a/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution.go b/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution.go index d115ccf5e..6eb9d9c2e 100644 --- a/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution.go +++ b/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(preorder []int, postorder []int) *TreeNode { + if len(preorder) == 0 { + return nil + } + root := &TreeNode{ + Val: preorder[0], + } + if len(preorder) == 1 { + return root + } + + postIndex := 0 + next := preorder[1] + for i := range postorder { + if postorder[i] == next { + postIndex = i + break + } + } + preIndex := 0 + m := map[int]int{} + for i, n := range preorder { + m[n] = i + } + for i := 0; i <= postIndex; i++ { + preIndex = max(preIndex, m[postorder[i]]) + } + root.Left = Solution(preorder[1:preIndex+1], postorder[:postIndex+1]) + root.Right = Solution(preorder[preIndex+1:], postorder[postIndex+1:len(postorder)-1]) + return root } diff --git a/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution_test.go b/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution_test.go index 14ff50eb4..a9526eb30 100644 --- a/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution_test.go +++ b/leetcode/801-900/0889.Construct-Binary-Tree-from-Preorder-and-Postorder-Traversal/Solution_test.go @@ -9,31 +9,46 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + preorder, postorder []int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 4, 5, 3, 6, 7}, []int{4, 5, 2, 6, 7, 3, 1}, &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 4, + }, + Right: &TreeNode{Val: 5}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 6, + }, + Right: &TreeNode{Val: 7}, + }, + }}, + {"TestCase2", []int{1}, []int{1}, &TreeNode{Val: 1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.preorder, c.postorder) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.preorder, c.postorder) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a3d339700ae44bbacd50ed3d9e555ffa663ea313 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 26 Feb 2025 09:21:18 +0800 Subject: [PATCH 210/450] Add solution and test-cases for problem 1138 --- .../1101-1200/1138.Alphabet-Board-Path/1.png | Bin 0 -> 18720 bytes .../1138.Alphabet-Board-Path/README.md | 37 ++++++---- .../1138.Alphabet-Board-Path/Solution.go | 67 +++++++++++++++++- .../1138.Alphabet-Board-Path/Solution_test.go | 13 ++-- 4 files changed, 94 insertions(+), 23 deletions(-) create mode 100644 leetcode/1101-1200/1138.Alphabet-Board-Path/1.png diff --git a/leetcode/1101-1200/1138.Alphabet-Board-Path/1.png b/leetcode/1101-1200/1138.Alphabet-Board-Path/1.png new file mode 100644 index 0000000000000000000000000000000000000000..db370622ed22af5448b72829ad90715d6dca6373 GIT binary patch literal 18720 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 [!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 +On an alphabet board, we start at position `(0, 0)`, corresponding to character `board[0][0]`. + +Here, `board = ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"]`, as shown in the diagram below. + +![1](./1.png) + +We may make the following moves: + +- `'U'` moves our position up one row, if the position exists on the board; +- `'D'` moves our position down one row, if the position exists on the board; +- `'L'` moves our position left one column, if the position exists on the board; +- `'R'` moves our position right one column, if the position exists on the board; +- `'!'` adds the character `board[r][c]` at our current position `(r, c)` to the answer. + +(Here, the only positions that exist on the board are positions with letters on them.) + +Return a sequence of moves that makes our answer equal to `target` in the minimum number of moves. You may return any path that does so. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: target = "leet" +Output: "DDR!UURRR!!DDD!" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Alphabet Board Path -```go ``` - +Input: target = "code" +Output: "RR!DDRR!UUL!R!" +``` ## 结语 diff --git a/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution.go b/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution.go index d115ccf5e..f63db5a9e 100644 --- a/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution.go +++ b/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution.go @@ -1,5 +1,68 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(target string) string { + pos := [26][2]int{ + {0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 4}, + {1, 0}, {1, 1}, {1, 2}, {1, 3}, {1, 4}, + {2, 0}, {2, 1}, {2, 2}, {2, 3}, {2, 4}, + {3, 0}, {3, 1}, {3, 2}, {3, 3}, {3, 4}, + {4, 0}, {4, 1}, {4, 2}, {4, 3}, {4, 4}, + {5, 0}, + } + buf := strings.Builder{} + x, y := 0, 0 + for _, b := range target { + bp := pos[b-'a'] + if bp[0] == x && bp[1] == y { + buf.WriteByte('!') + continue + } + dx, dy := bp[0]-x, bp[1]-y + sx, sy := x, y + x, y = bp[0], bp[1] + if sx == 5 && sy == 0 { + if dx < 0 { + for ; dx < 0; dx++ { + buf.WriteByte('U') + } + } else { + for ; dx > 0; dx-- { + buf.WriteByte('D') + } + } + if dy < 0 { + for ; dy < 0; dy++ { + buf.WriteByte('L') + } + } else { + for ; dy > 0; dy-- { + buf.WriteByte('R') + } + } + buf.WriteByte('!') + continue + } + if dy < 0 { + for ; dy < 0; dy++ { + buf.WriteByte('L') + } + } else { + for ; dy > 0; dy-- { + buf.WriteByte('R') + } + } + if dx < 0 { + for ; dx < 0; dx++ { + buf.WriteByte('U') + } + } else { + for ; dx > 0; dx-- { + buf.WriteByte('D') + } + } + buf.WriteByte('!') + } + return buf.String() } diff --git a/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution_test.go b/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution_test.go index 14ff50eb4..3027be314 100644 --- a/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution_test.go +++ b/leetcode/1101-1200/1138.Alphabet-Board-Path/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "leet", "RDD!RRRUU!!DDD!"}, + {"TestCase2", "code", "RR!RRDD!LUU!R!"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 69bb8e2255070ef45ca410cabb52feceef597fc6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 26 Feb 2025 09:25:13 +0800 Subject: [PATCH 211/450] Add solution and test-cases for problem 1749 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 23 ++++++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md index c701fd665..608e9e72f 100755 --- a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md +++ b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md @@ -1,28 +1,30 @@ # [1749.Maximum Absolute Sum of Any Subarray][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 integer array nums. The **absolute sum** of a subarray `[numsl, numsl+1, ..., numsr-1, numsr]` is `abs(numsl + numsl+1 + ... + numsr-1 + numsr)`. + +Return the **maximum** absolute sum of any **(possibly empty)** subarray of `nums`. + +Note that `abs(x)` is defined as follows: + +- If `x` is a negative integer, then `abx(x) = -x`. +- If `x` is a non-negative integer, then `abs(x) = x`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,-3,2,3,-4] +Output: 5 +Explanation: The subarray [2,3] has absolute sum = abs(2+3) = abs(5) = 5. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Absolute Sum of Any Subarray -```go ``` - +Input: nums = [2,-5,1,-4,3,-2] +Output: 8 +Explanation: The subarray [-5,1,-4] has absolute sum = abs(-5+1-4) = abs(-8) = 8. +``` ## 结语 diff --git a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go index d115ccf5e..49f4d11f5 100644 --- a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go +++ b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + ans := 0 + _max, _min := 0, 0 //最大的正数,最小的负数 + sum := 0 + for _, n := range nums { + cur := n + if cur < 0 { + cur = -n + } + ans = max(ans, cur) + sum += n + if sum >= 0 { + cur = sum - _min + _max = max(_max, sum) + } else { + cur = -(sum - _max) + _min = min(_min, sum) + } + ans = max(ans, cur) + } + return ans } diff --git a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution_test.go b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution_test.go index 14ff50eb4..3e14fac92 100644 --- a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution_test.go +++ b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/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, -3, 2, 3, -4}, 5}, + {"TestCase2", []int{2, -5, 1, -4, 3, -2}, 8}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f915f6aab8e02397f0517abe6196cfc52088ea8c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 27 Feb 2025 09:21:38 +0800 Subject: [PATCH 212/450] Add solution and test-cases for problem 2606 --- .../README.md | 43 +++++++++++++++++++ .../Solution.go | 25 ++++++++++- .../Solution_test.go | 22 +++++----- 3 files changed, 77 insertions(+), 13 deletions(-) create mode 100644 leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/README.md diff --git a/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/README.md b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/README.md new file mode 100644 index 000000000..38a985a11 --- /dev/null +++ b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/README.md @@ -0,0 +1,43 @@ +# [2606.Find the Substring With Maximum Cost][title] + +## Description +You are given a string `s`, a string `chars` of **distinct** characters and an integer array `vals` of the same length as `chars`. + +The **cost of the substring** is the sum of the values of each character in the substring. The cost of an empty string is considered `0`. + +The **value of the character** is defined in the following way: + +- If the character is not in the string `chars`, then its value is its corresponding position **(1-indexed)** in the alphabet. + + - For example, the value of `'a'` is `1`, the value of `'b'` is `2`, and so on. The value of `'z'` is `26`. + +- Otherwise, assuming `i` is the index where the character occurs in the string `chars`, then its value is `vals[i]`. + +Return the maximum cost among all substrings of the string `s`. + +**Example 1:** + +``` +Input: s = "adaa", chars = "d", vals = [-1000] +Output: 2 +Explanation: The value of the characters "a" and "d" is 1 and -1000 respectively. +The substring with the maximum cost is "aa" and its cost is 1 + 1 = 2. +It can be proven that 2 is the maximum cost. +``` + +**Example 2:** + +``` +Input: s = "abc", chars = "abc", vals = [-1,-1,-1] +Output: 0 +Explanation: The value of the characters "a", "b" and "c" is -1, -1, and -1 respectively. +The substring with the maximum cost is the empty substring "" and its cost is 0. +It can be proven that 0 is the maximum cost. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-substring-with-maximum-cost/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go index d115ccf5e..9d9f978d5 100755 --- a/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go +++ b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, chars string, vals []int) int { + value := [26]int{} + for i := range 26 { + value[i] = i + 1 + } + for i, c := range chars { + value[c-'a'] = vals[i] + } + vv := make([]int, len(s)) + for i := range s { + vv[i] = value[s[i]-'a'] + } + + ans, minSum, sum := 0, 0, 0 + for i := 0; i < len(vv); i++ { + ans = max(ans, vv[i]) + sum += vv[i] + ans = max(ans, sum-minSum) + if sum < minSum { + minSum = sum + } + } + return ans } diff --git a/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go index 14ff50eb4..56e6a9a2b 100755 --- a/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go +++ b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + s, chars string + vals []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "adaa", "d", []int{-1000}, 2}, + {"TestCase2", "abc", "abc", []int{-1, -1, -1}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.chars, c.vals) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.s, c.chars, c.vals) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 99dcf12fb21864bf56d657c8946c45fd57d9723a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 28 Feb 2025 09:16:14 +0800 Subject: [PATCH 213/450] Add solution and test-cases for problem 917 --- .../0917.Reverse-Only-Letters/README.md | 31 +++++++++++-------- .../0917.Reverse-Only-Letters/Solution.go | 19 ++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0917.Reverse-Only-Letters/README.md b/leetcode/901-1000/0917.Reverse-Only-Letters/README.md index 4be05757a..eba615bd7 100644 --- a/leetcode/901-1000/0917.Reverse-Only-Letters/README.md +++ b/leetcode/901-1000/0917.Reverse-Only-Letters/README.md @@ -1,28 +1,33 @@ # [917.Reverse Only Letters][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 +Given a string `s`, reverse the string according to the following rules: + +- All the characters that are not English letters remain in the same position. +- All the English letters (lowercase or uppercase) should be reversed. + +Return `s` after reversing it. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "ab-cd" +Output: "dc-ba" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reverse Only Letters -```go ``` +Input: s = "a-bC-dEf-ghIj" +Output: "j-Ih-gfE-dCba" +``` + +**Example 3:** +``` +Input: s = "Test1ng-Leet=code-Q!" +Output: "Qedo1ct-eeLg=ntse-T!" +``` ## 结语 diff --git a/leetcode/901-1000/0917.Reverse-Only-Letters/Solution.go b/leetcode/901-1000/0917.Reverse-Only-Letters/Solution.go index d115ccf5e..ea9f5a7e0 100644 --- a/leetcode/901-1000/0917.Reverse-Only-Letters/Solution.go +++ b/leetcode/901-1000/0917.Reverse-Only-Letters/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func ok(b byte) bool { + return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') +} + +func Solution(s string) string { + bs := []byte(s) + l, r := 0, len(bs)-1 + for l < r { + for ; l < r && !ok(bs[l]); l++ { + + } + for ; r > l && !ok(bs[r]); r-- { + } + bs[l], bs[r] = bs[r], bs[l] + l, r = l+1, r-1 + } + return string(bs) } diff --git a/leetcode/901-1000/0917.Reverse-Only-Letters/Solution_test.go b/leetcode/901-1000/0917.Reverse-Only-Letters/Solution_test.go index 14ff50eb4..c4355d8c1 100644 --- a/leetcode/901-1000/0917.Reverse-Only-Letters/Solution_test.go +++ b/leetcode/901-1000/0917.Reverse-Only-Letters/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ab-cd", "dc-ba"}, + {"TestCase2", "a-bC-dEf-ghIj", "j-Ih-gfE-dCba"}, + {"TestCase3", "Test1ng-Leet=code-Q!", "Qedo1ct-eeLg=ntse-T!"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From dff85b9a2774d61fbb3878ac7a36132eda9d8860 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 1 Mar 2025 20:44:14 +0800 Subject: [PATCH 214/450] Add solution and test-cases for problem 2460 --- .../README.md | 42 ++++++++++++------- .../Solution.go | 18 +++++++- .../Solution_test.go | 13 +++--- 3 files changed, 50 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/README.md b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/README.md index 41b22c020..d18184c44 100755 --- a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/README.md +++ b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/README.md @@ -1,28 +1,42 @@ # [2460.Apply Operations to an Array][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 a **0-indexed** array `nums` of size `n` consisting of **non-negative** integers. + +You need to apply `n - 1` operations to this array where, in the `ith` operation (**0-indexed**), you will apply the following on the `ith` element of `nums`: + +- If `nums[i] == nums[i + 1]`, then multiply `nums[i]` by `2` and set `nums[i + 1]` to `0`. Otherwise, you skip this operation. + +After performing **all** the operations, **shift** all the `0`'s to the **end** of the array. + +- For example, the array `[1,0,2,0,0,1]` after shifting all its 0's to the end, is `[1,2,1,0,0,0]`. + +Return the resulting array. + +**Note** that the operations are applied **sequentially**, not all at once. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,2,1,1,0] +Output: [1,4,2,0,0,0] +Explanation: We do the following operations: +- i = 0: nums[0] and nums[1] are not equal, so we skip this operation. +- i = 1: nums[1] and nums[2] are equal, we multiply nums[1] by 2 and change nums[2] to 0. The array becomes [1,4,0,1,1,0]. +- i = 2: nums[2] and nums[3] are not equal, so we skip this operation. +- i = 3: nums[3] and nums[4] are equal, we multiply nums[3] by 2 and change nums[4] to 0. The array becomes [1,4,0,2,0,0]. +- i = 4: nums[4] and nums[5] are equal, we multiply nums[4] by 2 and change nums[5] to 0. The array becomes [1,4,0,2,0,0]. +After that, we shift the 0's to the end, which gives the array [1,4,2,0,0,0]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Apply Operations to an Array -```go ``` - +Input: nums = [0,1] +Output: [1,0] +Explanation: No operation can be applied, we just shift the 0 to the end. +``` ## 结语 diff --git a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go index d115ccf5e..38f54ad9f 100644 --- a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go +++ b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + ans := make([]int, len(nums)) + for i := 0; i < len(nums)-1; i++ { + if nums[i] == nums[i+1] { + nums[i], nums[i+1] = nums[i]*2, 0 + continue + } + } + index := 0 + for i := range nums { + if nums[i] != 0 { + ans[index] = nums[i] + index++ + } + } + return ans } diff --git a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution_test.go b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution_test.go index 14ff50eb4..fd9e5abc4 100644 --- a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution_test.go +++ b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/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, 1, 1, 0}, []int{1, 4, 2, 0, 0, 0}}, + {"TestCase2", []int{0, 1}, []int{1, 0}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 099bb573961018f682d7493eb17bbdd2e73cd4ec Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 2 Mar 2025 15:53:09 +0800 Subject: [PATCH 215/450] Add solution and test-cases for problem 2570 --- .../README.md | 44 +++++++++++++++++++ .../Solution.go | 25 ++++++++++- .../Solution_test.go | 19 ++++---- 3 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/README.md diff --git a/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/README.md b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/README.md new file mode 100644 index 000000000..7e1af32e6 --- /dev/null +++ b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/README.md @@ -0,0 +1,44 @@ +# [2570. Merge Two 2D Arrays by Summing Values][title] + +## Description + +You are given two **2D** integer arrays `nums1` and `nums2`. + +- `nums1[i] = [idi, vali]` indicate that the number with the id `idi` has a value equal to `vali`. +- `nums2[i] = [idi, vali]` indicate that the number with the id `idi` has a value equal to `vali`. + +Each array contains **unique** ids and is sorted in **ascending** order by id. + +Merge the two arrays into one array that is sorted in ascending order by id, respecting the following conditions: + +- Only ids that appear in at least one of the two arrays should be included in the resulting array. +- Each id should be included **only once** and its value should be the sum of the values of this id in the two arrays. If the id does not exist in one of the two arrays, then assume its value in that array to be `0`. + +Return the resulting array. The returned array must be sorted in ascending order by id. + +**Example 1:** + +``` +Input: nums1 = [[1,2],[2,3],[4,5]], nums2 = [[1,4],[3,2],[4,1]] +Output: [[1,6],[2,3],[3,2],[4,6]] +Explanation: The resulting array contains the following: +- id = 1, the value of this id is 2 + 4 = 6. +- id = 2, the value of this id is 3. +- id = 3, the value of this id is 2. +- id = 4, the value of this id is 5 + 1 = 6. +``` + +**Example 2:** + +``` +Input: nums1 = [[2,4],[3,6],[5,5]], nums2 = [[1,3],[4,3]] +Output: [[1,3],[2,4],[3,6],[4,3],[5,5]] +Explanation: There are no common ids, so we just include each id with its value in the resulting list. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-two-2d-arrays-by-summing-values +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go index d115ccf5e..709f6aad9 100755 --- a/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go +++ b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 [][]int, nums2 [][]int) [][]int { + if len(nums1) == 0 { + return nums2 + } + if len(nums2) == 0 { + return nums1 + } + res := [][]int{} + if nums1[0][0] == nums2[0][0] { + res = append(res, []int{nums1[0][0], nums1[0][1] + nums2[0][1]}) + nums1 = nums1[1:] + nums2 = nums2[1:] + } else { + if nums1[0][0] < nums2[0][0] { + res = append(res, nums1[0]) + nums1 = nums1[1:] + } else { + res = append(res, nums2[0]) + nums2 = nums2[1:] + } + } + res = append(res, Solution(nums1, nums2)...) + return res } diff --git a/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution_test.go b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution_test.go index 14ff50eb4..b1df1dff6 100755 --- a/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution_test.go +++ b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n1, n2 [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}, {2, 3}, {4, 5}}, [][]int{{1, 4}, {3, 2}, {4, 1}}, [][]int{{1, 6}, {2, 3}, {3, 2}, {4, 6}}}, + {"TestCase2", [][]int{{2, 4}, {3, 6}, {5, 5}}, [][]int{{1, 3}, {4, 3}}, [][]int{{1, 3}, {2, 4}, {3, 6}, {4, 3}, {5, 5}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n1, c.n2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n1, c.n2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From dd78e33e392c556c44c017ef35335412d7aaba19 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 3 Mar 2025 09:24:03 +0800 Subject: [PATCH 216/450] Add solution and test-cases for problem 1828 --- .../1.png | Bin 0 -> 54096 bytes .../2.png | Bin 0 -> 98429 bytes .../README.md | 35 +++++++++++------- .../Solution.go | 15 +++++++- .../Solution_test.go | 21 +++++------ 5 files changed, 44 insertions(+), 27 deletions(-) create mode 100644 leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/1.png create mode 100644 leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/2.png diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/1.png b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/1.png new file mode 100644 index 0000000000000000000000000000000000000000..75c438f49d48b6ec4f4bd090ace5b70805173465 GIT binary patch literal 54096 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 literal 0 HcmV?d00001 diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/2.png b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/2.png new file mode 100644 index 0000000000000000000000000000000000000000..52e3549d88110d9dff183d81d86d09b29fef8f26 GIT binary patch literal 98429 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

  2. DdQ!lThn6 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 D08vzP literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/3.png b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/3.png new file mode 100644 index 0000000000000000000000000000000000000000..d8c7ecc708a4c98328d58a9595b7338a6c1eb4b7 GIT binary patch literal 2502 zcmd5;dsNa{9tYD9Eqo<43Yw+4ldoEbEXpi2DH+Y&3=q+@On1J3cw!D2u>0b)`uXojBjJP86-F?3gh zwA3;*>NJrG0>PebF0k>RJW|v;(iyjt=i>vWW!F059XnE8X9rBbeSkou zP`$MW;@|5dQhh|PprW+&0*ii-X>&RUuPSIO3b=bqQ?xjaVmY?;KQRZTt_3YSoUmnY z8HOVD&ni>mF_7m*=-mY(@P{hsjSB$M*F#y{67Q(UXR}2CDtAb0K_AC)SU%L)#4^J&6Js2ZG2JKQjq8RO zujxBI0%z)fXtxL4+EhIoFTaMCF}PEnsnp4IqE=RktN3uRZ?gXwyMc+0*L|!?f$v~xL zM$W8qgQ@L8tN6T=NVWg!w8mjPVX^8xTBG4iC z`jX~oD$PlmuUpdU4x7m89R5<_y}a+qpW`u7d$#(;0dYaEyl(h7@OIzPqw#i074Mf; zb@H9|?#Z}GdNS-&I7`ZmxJ$rUtawC%NnH{T%6E0^qWXzz){e&Bm^iXk~r*ePoA)1|SL!WRXN8wBv zlNg{K$gI(jscY@j(PLvqz^!m-9xKjt!d6{%!JZ2DtCCBa4q2k~D0)HH(#t)x4618D z7r$FwgjA!PgQ{f{@=SMPrt?$<37<}o(11RF1HO)BD_V7LWrT+wN zjYD>;gOg^rf)X^3%`FH&k^aCw(dp@`<$g!VNygW zcZeY00!QZWH{hQu6}Cx#i|3kSDy}DCec~xEFnKK^p>|N{vUb>cd1huLR*yjIF)b{n zo;`ojna%C(Xt|A4XOzvC(}f%BgB=JiOkx0hpR`Tp^Daf2#?!#&C@ z2U)@I`$7t#WUWkFM=mVD2uSs?x8uT|8Ud{Qs$a^`i%gMmOvkh8DMcIx-{KP`@DIi{ z-|xLC0weW-JJ|%P-UZ}KBf!*uX}mSN*{Rk;X@CCp57kr3T#@mG;Amp(Y_5o0+^!YU zBer4NJRW_ewxka8M0ZywrwEIQt1kJQtg15S_)ooJQ}$lLu8(+gtL~(AhPnS)rC04- zanq-jkfw3~&cMy`oPK2~4RY)+i3Me$r=k|S3LjzLW;e{$6>cz+m*(py#mO!kb0c$M zg*F1uPKvk9of*r-$ZF@C3I9;34x4NZOBc1?77)_&gg9vyf{4WiJ~bnz;{(@UIk0kg zuAX4OglmaC*S<{J{>^1^e(}%NUc*^U^`?K1O`CBW@m!cH`jIbOTNP&&MH=Rn%rQse zFxWiFLyH)x5gLeAakwGA3#XOey?NnLJ^n%;4a7(})#Ec(wC9{8J0f*V8!7*?iC4y7 zfg;7%0`cWkQN7G;fcIB1j z2W!TsENPW=loZaUclP<#?>MsQX0x>~DtgrH*=I?cb*ufj?fp*FG6&XnK#c=|Yr#qa z&$}z6e0sH_ZVcU%e5^cx?ntB^xD=tCpzF^445dm%kDvOw1uZ?h;fO3{HrHuy!}(`R zk!!nTYS@XuZ2HauDFd%LZGa{O-R&QtFZ>46w;wxj58|4VD#Q1}B3%3C%+c&b{Zp1nY4PI (0, 1) --> (0, 2) --> (0, 3) change the arrow to down with cost = 1 --> (1, 3) --> (1, 2) --> (1, 1) --> (1, 0) change the arrow to down with cost = 1 --> (2, 0) --> (2, 1) --> (2, 2) --> (2, 3) change the arrow to down with cost = 1 --> (3, 3) +The total cost = 3. +``` + +**Example 2:** + +![2](./2.png) + +``` +Input: grid = [[1,1,3],[3,2,2],[1,1,4]] +Output: 0 +Explanation: You can follow the path from (0, 0) to (2, 2). +``` + +**Example 3:** + +![3](./3.png) + +``` +Input: grid = [[1,2],[4,3]] +Output: 1 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-make-at-least-one-valid-path-in-a-grid +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go index d115ccf5e..9547a6294 100755 --- a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go +++ b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go @@ -1,5 +1,78 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +// x, y, cost, dir +type heap1368 [][4]int + +func (h *heap1368) Len() int { + return len(*h) +} +func (h *heap1368) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap1368) Less(i, j int) bool { + return (*h)[i][2] < (*h)[j][2] +} +func (h *heap1368) Push(x any) { + *h = append(*h, x.([4]int)) +} + +func (h *heap1368) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +var dir1368 = [4][2]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, +} + +func Solution(grid [][]int) int { + m, n := len(grid), len(grid[0]) + if m == 1 && n == 1 { + return 0 + } + inf := m*n + 1 + dp := make([][]int, m) + for i := range m { + dp[i] = make([]int, n) + for j := range n { + dp[i][j] = inf + } + } + // 就是优先队列 + dp[0][0] = 0 + h := &heap1368{} + if grid[0][0]&1 == 0 { + dp[0][0] = 1 + heap.Push(h, [4]int{0, 0, 1, 1}) + heap.Push(h, [4]int{0, 0, 1, 3}) + } else { + heap.Push(h, [4]int{0, 0, 0, grid[0][0]}) + } + for h.Len() > 0 { + cur := heap.Pop(h).([4]int) + if cur[0] == m-1 && cur[1] == n-1 { + return cur[2] + } + for i, d := range dir1368 { + nx, ny := cur[0]+d[0], cur[1]+d[1] + if nx < m && nx >= 0 && ny < n && ny >= 0 { + cost := cur[2] + if i != cur[3]-1 { + cost++ + } + if dp[nx][ny] > cost { + dp[nx][ny] = cost + heap.Push(h, [4]int{nx, ny, cost, grid[nx][ny]}) + } + } + } + } + + return -1 +} diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go index 14ff50eb4..fc46755fc 100755 --- a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go +++ b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go @@ -10,12 +10,12 @@ 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, 1, 1, 1}, {2, 2, 2, 2}, {1, 1, 1, 1}, {2, 2, 2, 2}}, 3}, + {"TestCase2", [][]int{{1, 1, 3}, {3, 2, 2}, {1, 1, 4}}, 0}, + {"TestCase3", [][]int{{1, 2}, {4, 3}}, 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0dbc19121cf4c8da189064871f2b5f9a51ac181b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 20 Jan 2025 09:20:37 +0800 Subject: [PATCH 177/450] Add solution and test-cases for problem 2661 --- .../1.jpg | Bin 0 -> 5292 bytes .../2.jpg | Bin 0 -> 12112 bytes .../README.md | 35 ++++++++++++++++++ .../Solution.go | 20 +++++++++- .../Solution_test.go | 20 +++++----- 5 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/1.jpg create mode 100644 leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/2.jpg create mode 100644 leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/README.md diff --git a/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/1.jpg b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1606a3a4594e12a70edca32fcea840b50aeaa854 GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/README.md b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/README.md new file mode 100644 index 000000000..169163cb8 --- /dev/null +++ b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/README.md @@ -0,0 +1,35 @@ +# [2661.First Completely Painted Row or Column][title] + +## Description +You are given a **0-indexed** integer array `arr`, and an `m x n` integer **matrix** `mat`. `arr` and `mat` both contain **all** the integers in the range `[1, m * n]`. + +Go through each index `i` in `arr` starting from index `0` and paint the cell in `mat` containing the integer `arr[i]`. + +Return the smallest index `i` at which either a row or a column will be completely painted in `mat`. + +**Example 1:** + +![1](./1.jpg) + +``` +Input: arr = [1,3,4,2], mat = [[1,4],[2,3]] +Output: 2 +Explanation: The moves are shown in order, and both the first row and second column of the matrix become fully painted at arr[2]. +``` + +**EXample 2:** + +![2](./2.jpg) + +``` +Input: arr = [2,8,7,4,1,3,5,6,9], mat = [[3,2,5],[1,4,6],[8,7,9]] +Output: 3 +Explanation: The second column becomes fully painted at arr[3]. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/first-completely-painted-row-or-column +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go index d115ccf5e..572b4598c 100755 --- a/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go +++ b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, mat [][]int) int { + m, n := len(mat), len(mat[0]) + rows, cols := make([]int, m), make([]int, n) + key := make(map[int][2]int) + for i := range m { + for j := range n { + key[mat[i][j]] = [2]int{i, j} + } + } + for i := range arr { + pos := key[arr[i]] + rows[pos[0]]++ + cols[pos[1]]++ + if rows[pos[0]] == n || cols[pos[1]] == m { + return i + } + } + return len(arr) - 1 } diff --git a/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go index 14ff50eb4..0f23ccc98 100755 --- a/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go +++ b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + arr []int + mat [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 4, 2}, [][]int{{1, 4}, {2, 3}}, 2}, + {"TestCase2", []int{2, 8, 7, 4, 1, 3, 5, 6, 9}, [][]int{{3, 2, 5}, {1, 4, 6}, {8, 7, 9}}, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.arr, c.mat) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.arr, c.mat) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From da41c5f243e8a5938860b50b862951392de957b1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 21 Jan 2025 09:26:27 +0800 Subject: [PATCH 178/450] Add solution and test-cases for problem 1664 --- .../1664.Ways-to-Make-a-Fair-Array/README.md | 44 +++++++++++++------ .../Solution.go | 34 +++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 70 insertions(+), 22 deletions(-) diff --git a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md index 06a8715f3..77fed5068 100755 --- a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md +++ b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md @@ -1,28 +1,46 @@ # [1664.Ways to Make a Fair Array][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 integer array `nums`. You can choose **exactly one** index (**0-indexed**) and remove the element. Notice that the index of the elements may change after the removal. + +For example, if `nums = [6,1,7,4,1]`: + +- Choosing to remove index `1` results in `nums = [6,7,4,1]`. +- Choosing to remove index `2` results in `nums = [6,1,4,1]`. +- Choosing to remove index `4` results in `nums = [6,1,7,4]`. + +An array is **fair** if the sum of the odd-indexed values equals the sum of the even-indexed values. + +Return the **number** of indices that you could choose such that after the removal, `nums` is **fair**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,1,6,4] +Output: 1 +Explanation: +Remove index 0: [1,6,4] -> Even sum: 1 + 4 = 5. Odd sum: 6. Not fair. +Remove index 1: [2,6,4] -> Even sum: 2 + 4 = 6. Odd sum: 6. Fair. +Remove index 2: [2,1,4] -> Even sum: 2 + 4 = 6. Odd sum: 1. Not fair. +Remove index 3: [2,1,6] -> Even sum: 2 + 6 = 8. Odd sum: 1. Not fair. +There is 1 index that you can remove to make nums fair. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Ways to Make a Fair Array -```go ``` +Input: nums = [1,1,1] +Output: 3 +Explanation: You can remove any index and the remaining array is fair. +``` + +**Example 3:** +``` +Input: nums = [1,2,3] +Output: 0 +Explanation: You cannot make a fair array after removing any index. +``` ## 结语 diff --git a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go index d115ccf5e..2b84a6bbe 100644 --- a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go +++ b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + l := len(nums) + sum := make([][2]int, l) + if (l-1)&1 == 0 { + sum[l-1][0] += nums[l-1] + } else { + sum[l-1][1] += nums[l-1] + } + for i := l - 2; i >= 0; i-- { + sum[i] = sum[i+1] + if i&1 == 0 { + sum[i][0] += nums[i] + continue + } + sum[i][1] += nums[i] + } + odd, even := 0, 0 + ans := 0 + for i := range l - 1 { + if odd+sum[i+1][0] == even+sum[i+1][1] { + ans++ + } + if i&1 == 1 { + odd += nums[i] + continue + } + even += nums[i] + } + if odd == even { + ans++ + } + return ans } diff --git a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution_test.go b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution_test.go index 14ff50eb4..fb4f47a2c 100644 --- a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution_test.go +++ b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution_test.go @@ -10,12 +10,12 @@ 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{2, 1, 6, 4}, 1}, + {"TestCase2", []int{1, 1, 1}, 3}, + {"TestCase3", []int{1, 2, 3}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 11e68c139900f607c0d1085e3badd4761507bd3e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 22 Jan 2025 09:18:09 +0800 Subject: [PATCH 179/450] Add solution and test-cases for problem 1765 --- .../1701-1800/1765.Map-of-Highest-Peak/1.png | Bin 0 -> 44037 bytes .../1701-1800/1765.Map-of-Highest-Peak/2.png | Bin 0 -> 74405 bytes .../1765.Map-of-Highest-Peak/README.md | 42 ++++++++++++------ .../1765.Map-of-Highest-Peak/Solution.go | 40 ++++++++++++++++- .../1765.Map-of-Highest-Peak/Solution_test.go | 13 +++--- 5 files changed, 72 insertions(+), 23 deletions(-) create mode 100644 leetcode/1701-1800/1765.Map-of-Highest-Peak/1.png create mode 100644 leetcode/1701-1800/1765.Map-of-Highest-Peak/2.png diff --git a/leetcode/1701-1800/1765.Map-of-Highest-Peak/1.png b/leetcode/1701-1800/1765.Map-of-Highest-Peak/1.png new file mode 100644 index 0000000000000000000000000000000000000000..4402cd710b7c84b4178d01f867804ba057016f89 GIT binary patch literal 44037 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Ξ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 MR!yc#$~@q|0FQn+#sB~S literal 0 HcmV?d00001 diff --git a/leetcode/1701-1800/1765.Map-of-Highest-Peak/2.png b/leetcode/1701-1800/1765.Map-of-Highest-Peak/2.png new file mode 100644 index 0000000000000000000000000000000000000000..215f2c0f9a7c73ea28810a71be5b80f67681055e GIT binary patch literal 74405 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

`=@_Jj=LbtIh^e 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 literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md index 8a124eb7a..7e5fc0761 100755 --- a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md +++ b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md @@ -1,28 +1,35 @@ # [2368.Reachable Nodes With Restrictions][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 +There is an undirected tree with `n` nodes labeled from `0` to `n - 1` and `n - 1` edges. + +You are given a 2D integer array `edges` of length `n - 1` where `edges[i] = [ai, bi]` indicates that there is an edge between nodes `ai` and `bi` in the tree. You are also given an integer array `restricted` which represents **restricted** nodes. + +Return the **maximum** number of nodes you can reach from node 0 without visiting a restricted node. + +Note that node `0` will **not** be a restricted node. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 7, edges = [[0,1],[1,2],[3,1],[4,0],[0,5],[5,6]], restricted = [4,5] +Output: 4 +Explanation: The diagram above shows the tree. +We have that [0,1,2,3] are the only nodes that can be reached from node 0 without visiting a restricted node. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Reachable Nodes With Restrictions -```go ``` - +Input: n = 7, edges = [[0,1],[0,2],[0,5],[0,4],[3,2],[6,5]], restricted = [4,2,1] +Output: 3 +Explanation: The diagram above shows the tree. +We have that [0,5,6] are the only nodes that can be reached from node 0 without visiting a restricted node. +``` ## 结语 diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go index d115ccf5e..6ba125424 100644 --- a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go +++ b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, edges [][]int, restricted []int) int { + restrictedMap := make(map[int]struct{}) + for _, n := range restricted { + restrictedMap[n] = struct{}{} + } + adj := make([][]int, n) + for _, e := range edges { + adj[e[0]] = append(adj[e[0]], e[1]) + adj[e[1]] = append(adj[e[1]], e[0]) + } + ans := 0 + q := []int{0} + v := make([]bool, n) + v[0] = true + for len(q) > 0 { + nq := make([]int, 0) + ans += len(q) + for _, cur := range q { + for _, next := range adj[cur] { + if v[next] { + continue + } + if _, ok := restrictedMap[next]; ok { + continue + } + nq = append(nq, next) + v[next] = true + } + } + q = nq + } + return ans } diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go index 14ff50eb4..a0b27e3c3 100644 --- a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go +++ b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + edges [][]int + restricted []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 7, [][]int{{0, 1}, {1, 2}, {3, 1}, {4, 0}, {0, 5}, {5, 6}}, []int{4, 5}, 4}, + {"TestCase", 7, [][]int{{0, 1}, {0, 2}, {0, 5}, {0, 4}, {3, 2}, {6, 5}}, []int{4, 2, 1}, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.edges, c.restricted) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.edges, c.restricted) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6475ef8be5d78638740116163212a9689cac648b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 30 Jul 2024 09:34:07 +0800 Subject: [PATCH 023/450] Add solution and test-cases for problem 1653 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 26 +++++++++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md index eeafab258..528e731a4 100755 --- a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md +++ b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md @@ -1,28 +1,29 @@ # [1653.Minimum Deletions to Make String Balanced][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 a string `s` consisting only of characters `'a'` and `'b'`. + +You can delete any number of characters in `s` to make `s` **balanced**. `s` is **balanced** if there is no pair of indices `(i,j)` such that `i < j` and `s[i] = 'b'` and `s[j]= 'a'`. + +Return the **minimum** number of deletions needed to make `s` **balanced**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aababbab" +Output: 2 +Explanation: You can either: +Delete the characters at 0-indexed positions 2 and 6 ("aababbab" -> "aaabbb"), or +Delete the characters at 0-indexed positions 3 and 6 ("aababbab" -> "aabbbb"). ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Deletions to Make String Balanced -```go ``` - +Input: s = "bbaaaaabb" +Output: 2 +Explanation: The only solution is to delete the first two characters. +``` ## 结语 diff --git a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go index d115ccf5e..42980b230 100644 --- a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go +++ b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func Solution(s string) int { + l := len(s) + ac, bc := make([]int, l), make([]int, l) + b := 0 + for i := 0; i < l; i++ { + if s[i] == 'b' { + b++ + } + bc[i] = b + } + a := 0 + for i := l - 1; i >= 0; i-- { + if s[i] == 'a' { + a++ + } + ac[i] = a + } + ans := math.MaxInt + for i := 0; i < l; i++ { + ans = min(ans, ac[i]+bc[i]) + } + return ans - 1 } diff --git a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go index 14ff50eb4..ef1de19a1 100644 --- a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go +++ b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "aababbab", 2}, + {"TestCase2", "bbaaaaabb", 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4f4914a1371c91ec4b7a5b613dd5e8003e0aab71 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 31 Jul 2024 09:16:21 +0800 Subject: [PATCH 024/450] Add solution and test-cases for problem 993 --- .../0993.Cousins-in-Binary-Tree/1.png | Bin 0 -> 15157 bytes .../0993.Cousins-in-Binary-Tree/2.png | Bin 0 -> 19341 bytes .../0993.Cousins-in-Binary-Tree/3.png | Bin 0 -> 14999 bytes .../0993.Cousins-in-Binary-Tree/README.md | 36 +++++++++----- .../0993.Cousins-in-Binary-Tree/Solution.go | 34 ++++++++++++- .../Solution_test.go | 45 ++++++++++++++---- 6 files changed, 91 insertions(+), 24 deletions(-) create mode 100644 leetcode/901-1000/0993.Cousins-in-Binary-Tree/1.png create mode 100644 leetcode/901-1000/0993.Cousins-in-Binary-Tree/2.png create mode 100644 leetcode/901-1000/0993.Cousins-in-Binary-Tree/3.png diff --git a/leetcode/901-1000/0993.Cousins-in-Binary-Tree/1.png b/leetcode/901-1000/0993.Cousins-in-Binary-Tree/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d4c50ae450f32b6c900f504b96dfe2051ea90fb GIT binary patch literal 15157 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 z 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 Dyh(F# literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0993.Cousins-in-Binary-Tree/README.md b/leetcode/901-1000/0993.Cousins-in-Binary-Tree/README.md index 452ed5ecd..fac67ce16 100644 --- a/leetcode/901-1000/0993.Cousins-in-Binary-Tree/README.md +++ b/leetcode/901-1000/0993.Cousins-in-Binary-Tree/README.md @@ -1,28 +1,38 @@ # [993.Cousins in Binary Tree][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 +Given the `root` of a binary tree with unique values and the values of two different nodes of the tree `x` and `y`, return `true` if the nodes corresponding to the values `x` and `y` in the tree are **cousins**, or `false` otherwise. + +Two nodes of a binary tree are **cousins** if they have the same depth with different parents. + +Note that in a binary tree, the root node is at the depth `0`, and children of each depth `k` node are at the depth `k + 1`. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,4], x = 4, y = 3 +Output: false ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Cousins in Binary Tree -```go +``` +Input: root = [1,2,3,null,4,null,5], x = 5, y = 4 +Output: true ``` +**Example 3:** + +![3](./3.png) + +``` +Input: root = [1,2,3,null,4], x = 2, y = 3 +Output: false +``` ## 结语 diff --git a/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution.go b/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution.go index d115ccf5e..beb38ed9f 100644 --- a/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution.go +++ b/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, x int, y int) bool { + var ( + xnode *TreeNode + ynode *TreeNode + xd, yd int + ) + var dfs func(*TreeNode, *TreeNode, int) + dfs = func(fa, tree *TreeNode, dep int) { + if tree == nil { + return + } + if tree.Val == x { + xnode = fa + xd = dep + } + if tree.Val == y { + ynode = fa + yd = dep + } + dfs(tree, tree.Left, dep+1) + dfs(tree, tree.Right, dep+1) + } + dfs(nil, root, 0) + if xd != yd { + return false + } + return xnode != ynode } diff --git a/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution_test.go b/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution_test.go index 14ff50eb4..7921dae51 100644 --- a/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution_test.go +++ b/leetcode/901-1000/0993.Cousins-in-Binary-Tree/Solution_test.go @@ -10,30 +10,57 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + tree *TreeNode + x, y int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + }, + Right: &TreeNode{Val: 3}, + }, 4, 3, false}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 5}, + }, + }, 5, 4, true}, + {"TestCase3", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 4, + }, + }, + Right: &TreeNode{Val: 3}, + }, 2, 3, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.tree, c.x, c.y) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.tree, c.x, c.y) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ebcb18843046c026eb84ea6a332280ef6da78739 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 1 Aug 2024 08:54:42 +0800 Subject: [PATCH 025/450] Add solution and test-cases for problem 2678 --- .../2678.Number-of-Senior-Citizens/README.md | 34 +++++++++++++++++++ .../Solution.go | 13 +++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2678.Number-of-Senior-Citizens/README.md diff --git a/leetcode/2601-2700/2678.Number-of-Senior-Citizens/README.md b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/README.md new file mode 100644 index 000000000..17fe447d2 --- /dev/null +++ b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/README.md @@ -0,0 +1,34 @@ +# [2678.Number of Senior Citizens][title] + +## Description +You are given a **0-indexed** array of strings `details`. Each element of `details` provides information about a given passenger compressed into a string of length `15`. The system is such that: + +- The first ten characters consist of the phone number of passengers. +- The next character denotes the gender of the person. +- The following two characters are used to indicate the age of the person. +- The last two characters determine the seat allotted to that person. + +Return the number of passengers who are **strictly more than 60 years old**. + +**Example 1:** + +``` +Input: details = ["7868190130M7522","5303914400F9211","9273338290F4010"] +Output: 2 +Explanation: The passengers at indices 0, 1, and 2 have ages 75, 92, and 40. Thus, there are 2 people who are over 60 years old. +``` + +**Example 2:** + +``` +Input: details = ["1313579440F2036","2921522980M5644"] +Output: 0 +Explanation: None of the passengers are older than 60. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-senior-citizens +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go index d115ccf5e..ca88a7bbc 100755 --- a/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go +++ b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +import "strconv" + +func Solution(details []string) int { + ans := 0 + for _, d := range details { + age, _ := strconv.Atoi(d[11:13]) + if age > 60 { + ans++ + } + } + return ans } diff --git a/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go index 14ff50eb4..dbf300d22 100755 --- a/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go +++ b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"7868190130M7522", "5303914400F9211", "9273338290F4010"}, 2}, + {"TestCase2", []string{"1313579440F2036", "2921522980M5644"}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 911193c50d4caaba9da7702c9565cb58575aa796 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 2 Aug 2024 09:47:05 +0800 Subject: [PATCH 026/450] Add solution and test-cases for problem 2134 --- .../README.md | 43 +++++++++++++------ .../Solution.go | 42 +++++++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 77 insertions(+), 22 deletions(-) diff --git a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md index 91f579e13..ad4f1c94a 100755 --- a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md +++ b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md @@ -1,28 +1,45 @@ # [2134.Minimum Swaps to Group All 1's Together II][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 +A **swap** is defined as taking two **distinct** positions in an array and swapping the values in them. + +A **circular** array is defined as an array where we consider the **first** element and the **last** element to be **adjacent**. + +Given a **binary circular** array `nums`, return the minimum number of swaps required to group all `1`'s present in the array together at **any location**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,1,0,1,1,0,0] +Output: 1 +Explanation: Here are a few of the ways to group all the 1's together: +[0,0,1,1,1,0,0] using 1 swap. +[0,1,1,1,0,0,0] using 1 swap. +[1,1,0,0,0,0,1] using 2 swaps (using the circular property of the array). +There is no way to group all 1's together with 0 swaps. +Thus, the minimum number of swaps required is 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Swaps to Group All 1's Together II -```go ``` +Input: nums = [0,1,1,1,0,0,1,1,0] +Output: 2 +Explanation: Here are a few of the ways to group all the 1's together: +[1,1,1,0,0,0,0,1,1] using 2 swaps (using the circular property of the array). +[1,1,1,1,1,0,0,0,0] using 2 swaps. +There is no way to group all 1's together with 0 or 1 swaps. +Thus, the minimum number of swaps required is 2. +``` + +**Example 3:** +``` +Input: nums = [1,1,0,0,1] +Output: 0 +Explanation: All the 1's are already grouped together due to the circular property of the array. +Thus, the minimum number of swaps required is 0. +``` ## 结语 diff --git a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go index d115ccf5e..91e5c1acb 100644 --- a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go +++ b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + one := 0 + for _, n := range nums { + if n == 1 { + one++ + } + } + l := len(nums) + // 全是1, 0 + if one == l || one == 0 { + return 0 + } + // 0, 0, 1, 1, 0, 1 + // (0, 2), (1,3),(2,4),(3,5),(4,0),(5,1) + // 0, 1, 2, 3, 4, 5 + start, end := l-one+1, 0 + ones := 0 + + for i := start; i != end+1; i = (i + 1) % l { + if nums[i] == 1 { + ones++ + } + } + cur := ones + if nums[start] == 1 { + ones-- + } + start, end = (start+1)%l, end+1 + for end < l { + if nums[end] == 1 { + ones++ + } + cur = max(cur, ones) + if nums[start] == 1 { + ones-- + } + start, end = (start+1)%l, end+1 + } + + return one - cur } diff --git a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution_test.go b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution_test.go index 14ff50eb4..1c5b793da 100644 --- a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution_test.go +++ b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution_test.go @@ -10,12 +10,12 @@ 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{0, 1, 0, 1, 1, 0, 0}, 1}, + {"TestCase2", []int{0, 1, 1, 1, 0, 0, 1, 1, 0}, 2}, + {"TestCase3", []int{1, 1, 0, 0, 1}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9744592d993bb90064f0e0bb649bd3a7da0b877f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 3 Aug 2024 17:40:20 +0800 Subject: [PATCH 027/450] Add solution and test-cases for problem 282 --- .../0282.Expression-Add-Operators/README.md | 31 ++++--- .../0282.Expression-Add-Operators/Solution.go | 90 ++++++++++++++++++- .../Solution_test.go | 21 ++--- 3 files changed, 117 insertions(+), 25 deletions(-) diff --git a/leetcode/201-300/0282.Expression-Add-Operators/README.md b/leetcode/201-300/0282.Expression-Add-Operators/README.md index fb4a67077..c9f16b1ae 100644 --- a/leetcode/201-300/0282.Expression-Add-Operators/README.md +++ b/leetcode/201-300/0282.Expression-Add-Operators/README.md @@ -1,28 +1,33 @@ # [282.Expression Add Operators][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 +Given a string `num` that contains only digits and an integer `target`, return **all possibilities** to insert the binary operators `'+'`, `'-'`, and/or `'*'` between the digits of `num` so that the resultant expression evaluates to the `target` value. + +Note that operands in the returned expressions **should not** contain leading zeros. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = "123", target = 6 +Output: ["1*2*3","1+2+3"] +Explanation: Both "1*2*3" and "1+2+3" evaluate to 6. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Expression Add Operators -```go +``` +Input: num = "232", target = 8 +Output: ["2*3+2","2+3*2"] +Explanation: Both "2*3+2" and "2+3*2" evaluate to 8. ``` +**Example 3:** + +``` +Input: num = "3456237490", target = 9191 +Output: [] +Explanation: There are no expressions that can be created from "3456237490" to evaluate to 9191. +``` ## 结语 diff --git a/leetcode/201-300/0282.Expression-Add-Operators/Solution.go b/leetcode/201-300/0282.Expression-Add-Operators/Solution.go index d115ccf5e..fc0258b0e 100644 --- a/leetcode/201-300/0282.Expression-Add-Operators/Solution.go +++ b/leetcode/201-300/0282.Expression-Add-Operators/Solution.go @@ -1,5 +1,91 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num string, target int) []string { + ans := make([]string, 0) + in := make(map[string]struct{}) + var dfs func(int, string) + dfs = func(start int, cur string) { + if start >= len(num) { + r := cur[:len(cur)-1] + if _, ok := in[r]; !ok { + ans = append(ans, r) + } + in[r] = struct{}{} + return + } + if num[start] == '0' { + cur += "0" + dfs(start+1, cur+"+") + dfs(start+1, cur+"-") + dfs(start+1, cur+"*") + return + } + + for end := start; end < len(num); end++ { + now := cur + num[start:end+1] + dfs(end+1, now+"+") + dfs(end+1, now+"-") + dfs(end+1, now+"*") + } + } + dfs(0, "") + var cal func(string) int + result := make([]string, 0) + cal = func(str string) int { + n := 0 + nstack := make([]int, 0) + cstack := make([]byte, 0) + for i := range str { + if str[i] >= '0' && str[i] <= '9' { + n = n*10 + int(str[i]-'0') + continue + } + nstack = append(nstack, n) + n = 0 + if str[i] != '*' { + for len(cstack) > 0 && len(nstack) >= 2 { + l := len(nstack) + a, b := nstack[l-2], nstack[l-1] + nstack = nstack[:l-2] + top := cstack[len(cstack)-1] + cstack = cstack[:len(cstack)-1] + if top == '*' { + nstack = append(nstack, a*b) + } + if top == '+' { + nstack = append(nstack, a+b) + } + if top == '-' { + nstack = append(nstack, a-b) + } + } + } + cstack = append(cstack, str[i]) + } + nstack = append(nstack, n) + + for len(cstack) > 0 && len(nstack) >= 2 { + l := len(nstack) + a, b := nstack[l-2], nstack[l-1] + nstack = nstack[:l-2] + top := cstack[len(cstack)-1] + cstack = cstack[:len(cstack)-1] + if top == '*' { + nstack = append(nstack, a*b) + } + if top == '+' { + nstack = append(nstack, a+b) + } + if top == '-' { + nstack = append(nstack, a-b) + } + } + return nstack[0] + } + for _, s := range ans { + if r := cal(s); r == target { + result = append(result, s) + } + } + return result } diff --git a/leetcode/201-300/0282.Expression-Add-Operators/Solution_test.go b/leetcode/201-300/0282.Expression-Add-Operators/Solution_test.go index 14ff50eb4..1573b0eb6 100644 --- a/leetcode/201-300/0282.Expression-Add-Operators/Solution_test.go +++ b/leetcode/201-300/0282.Expression-Add-Operators/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + num string + target int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "123", 6, []string{"1+2+3", "1*2*3"}}, + {"TestCase2", "232", 8, []string{"2+3*2", "2*3+2"}}, + {"TestCase3", "3456237490", 9191, []string{}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.num, c.target) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.num, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 830cd7b5b9c839bc4555bf119f3e8f04659eb038 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 4 Aug 2024 10:54:42 +0800 Subject: [PATCH 028/450] Add solution and test-cases for problem 220 --- .../0220.Contains-Duplicate-III/README.md | 35 +++++++++++-------- .../0220.Contains-Duplicate-III/Solution.go | 34 ++++++++++++++++-- .../Solution_test.go | 18 +++++----- 3 files changed, 62 insertions(+), 25 deletions(-) diff --git a/leetcode/201-300/0220.Contains-Duplicate-III/README.md b/leetcode/201-300/0220.Contains-Duplicate-III/README.md index dce10d811..fc05629b2 100644 --- a/leetcode/201-300/0220.Contains-Duplicate-III/README.md +++ b/leetcode/201-300/0220.Contains-Duplicate-III/README.md @@ -1,28 +1,35 @@ # [220.Contains Duplicate III][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 integer array `nums` and two integers `indexDiff` and `valueDiff`. + +Find a pair of indices `(i, j)` such that: + +- `i != j`, +- `abs(i - j) <= indexDiff`. +- `abs(nums[i] - nums[j]) <= valueDiff`, and + +Return `true` if such pair exists or `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,1], indexDiff = 3, valueDiff = 0 +Output: true +Explanation: We can choose (i, j) = (0, 3). +We satisfy the three conditions: +i != j --> 0 != 3 +abs(i - j) <= indexDiff --> abs(0 - 3) <= 3 +abs(nums[i] - nums[j]) <= valueDiff --> abs(1 - 1) <= 0 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Contains Duplicate III -```go ``` - +Input: nums = [1,5,9,1,5,9], indexDiff = 2, valueDiff = 3 +Output: false +Explanation: After trying all the possible pairs (i, j), we cannot satisfy the three conditions, so we return false. +``` ## 结语 diff --git a/leetcode/201-300/0220.Contains-Duplicate-III/Solution.go b/leetcode/201-300/0220.Contains-Duplicate-III/Solution.go index d115ccf5e..e1c3fd40a 100644 --- a/leetcode/201-300/0220.Contains-Duplicate-III/Solution.go +++ b/leetcode/201-300/0220.Contains-Duplicate-III/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, indexDiff int, valueDiff int) bool { + indies := make([]int, len(nums)) + for i := range nums { + indies[i] = i + } + sort.Slice(indies, func(i, j int) bool { + a, b := nums[indies[i]], nums[indies[j]] + if a == b { + return indies[i] < indies[j] + } + return a < b + }) + + start, end := 0, 1 + for ; end < len(nums); end++ { + v := nums[indies[end]] - nums[indies[start]] + if v > valueDiff { + start++ + end = start + continue + } + i := indies[end] - indies[start] + if i < 0 { + i = -i + } + if i <= indexDiff { + return true + } + } + return false } diff --git a/leetcode/201-300/0220.Contains-Duplicate-III/Solution_test.go b/leetcode/201-300/0220.Contains-Duplicate-III/Solution_test.go index 14ff50eb4..321e16e7d 100644 --- a/leetcode/201-300/0220.Contains-Duplicate-III/Solution_test.go +++ b/leetcode/201-300/0220.Contains-Duplicate-III/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + nums []int + a, b int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 1}, 3, 0, true}, + {"TestCase2", []int{1, 5, 9, 1, 5, 9}, 2, 3, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.a, c.b) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.nums, c.a, c.b) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8e0c800dd7450ff89d2ba7ab190c1bfbaf122f11 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 5 Aug 2024 08:57:55 +0800 Subject: [PATCH 029/450] Add solution and test-cases for problem 2053 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 18 ++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md index 4676e1ea8..026126bb3 100755 --- a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md +++ b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md @@ -1,28 +1,41 @@ # [2053.Kth Distinct String in an Array][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 +A **distinct string** is a string that is present only **once** in an array. + +Given an array of strings `arr`, and an integer `k`, return the `kth` **distinct string** present in `arr`. If there are **fewer** than `k` distinct strings, return an **empty string** `""`. + +Note that the strings are considered in the **order in which they appear** in the array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = ["d","b","c","b","c","a"], k = 2 +Output: "a" +Explanation: +The only distinct strings in arr are "d" and "a". +"d" appears 1st, so it is the 1st distinct string. +"a" appears 2nd, so it is the 2nd distinct string. +Since k == 2, "a" is returned. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Kth Distinct String in an Array -```go ``` +Input: arr = ["aaa","aa","a"], k = 1 +Output: "aaa" +Explanation: +All strings in arr are distinct, so the 1st string "aaa" is returned. +``` + +**Example 3:** +``` +Input: arr = ["a","b","a"], k = 3 +Output: "" +Explanation: +The only distinct string is "b". Since there are fewer than 3 distinct strings, we return an empty string "". +``` ## 结语 diff --git a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go index d115ccf5e..cf6023928 100644 --- a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go +++ b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []string, k int) string { + count := make(map[string]int) + for _, s := range arr { + count[s]++ + } + + for i := range arr { + if count[arr[i]] > 1 { + continue + } + k-- + if k == 0 { + return arr[i] + } + } + return "" } diff --git a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go index 14ff50eb4..8cf12bfbf 100644 --- a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go +++ b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + arr []string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"d", "b", "c", "b", "c", "a"}, 2, "a"}, + {"TestCase2", []string{"aaa", "aa", "a"}, 1, "aaa"}, + {"TestCase3", []string{"a", "b", "a"}, 3, ""}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.arr, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.arr, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9a48488943cbb4e4455bc1220922ddc4fc7e5604 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 6 Aug 2024 09:07:43 +0800 Subject: [PATCH 030/450] Add solution and test-cases for problem 3016 --- go.sum | 7 -- .../1.png | Bin 0 -> 36156 bytes .../2.png | Bin 0 -> 36196 bytes .../3.png | Bin 0 -> 36331 bytes .../4.png | Bin 0 -> 36278 bytes .../README.md | 69 ++++++++++++++---- .../Solution.go | 36 ++++++++- .../Solution_test.go | 14 ++-- 8 files changed, 97 insertions(+), 29 deletions(-) create mode 100644 leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/1.png create mode 100644 leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/2.png create mode 100644 leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/3.png create mode 100644 leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/4.png diff --git a/go.sum b/go.sum index 9c9430e1c..bca5ad9ba 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,11 @@ github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/cloudflare/circl v1.3.8 h1:j+V8jJt09PoeMFIu2uh5JUyEaIHTXVOHslFoLNAKqwI= -github.com/cloudflare/circl v1.3.8/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE= github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -22,8 +19,6 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA= github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= @@ -44,8 +39,6 @@ go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= diff --git a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/1.png b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/1.png new file mode 100644 index 0000000000000000000000000000000000000000..b30425f143d6ef6f255c9343174d612b4b616702 GIT binary patch literal 36156 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 SPiN49KiG3-`jxs45&s8$=Dvvl literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/2.png b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/2.png new file mode 100644 index 0000000000000000000000000000000000000000..8cdb83db9a559e84d0e9120297cda781838adb3b GIT binary patch literal 36196 zcmeFY1z42b);CV0geWSFfDGM3hcvos|+sYp1;N}8cK6nKD;o%0vywboGa6^Fa=jD@M7tXFg z)jVJxPHq;UguEHl#sR45;wj*V2N2!2ayBz}cmfE2EA_K^S2Jf9D+l|_-hw%KIC+4w z7XvYan^^o5>p97|SnBdTaR!_7C?OEWwiXbnpJm|gj%Gj0z|35&pk^0RUO5JC;P%A; z0KHu*2>4=eVs}|q6&N$eWh+*fijsNcqKV*@M(FS=Seocq*r+MX+x%s1zv{GmBJXVC zXsO}=GqVLMhCTV&1s-l*zMtKKx&M^#@e2GDSUCS`2k6$t;4TCjR!=WG1We6ODZ&b7 z=5krvPZ8X~!4_`i_~$~XgT1{O^m5iN2V&yvd@)tOS;nQv+`;y8be950VBmjN;zFPS zHL?9`skRjiZuzsU5dUTOE=ntySy@>AY8jZ?pS?6Sf!bI&J0R>Y+p~AD|7|V+b2Rx? z&1F#+OB2ARe%Ab(==byWQ^UXX?CjtGwDh~_{Qd1;h3uZlnAu)T!(V6^Fth*rXaA%p z=RYlq%WnUFst%axi^+C1u|-^J_@}@H?*2>VzbWmv)q1hC+$^o&W*UwrfF<+Fx&cN8 z$SmP@w!k+Y;L-)|>|kRi<6!IH3`l-c^2Kuetqn70xY;j5{3&uY`L9v@Hn9I*mH(ws zc{2w)Gq|%m(Dh$63i5IC|E%?wX$$=lxc!%<@PdVZ7P9=EmGJWL{uG*ATBpUIs=w&? zKcZNm%;hxy_d~dV$-l6M%eMcqDY($_|1bpr9^3w!00uCxfbhi!c+A4q#N}dq7qj>$ z6Thg>!r2671z6MX9^#X_`26mkEP#wq_)i$TC~g8wxU`8g^b#QifNwul2%zOZahAcq zaOiT5g)VLXcQXv;7yRoP2LA$x|CJfO#N7XGh5>*8AQV_r|Ch5XEp+kuS7{%7Ig(55 z3tytg@3b#)xt;uedGTG!{#SH=i3xvr-Scu^YVi-G`^z5x@pUgG^b=D4K)SyK!9Tq2 z!GD1{JbafM_`fsgT$;-tUip6sI)4b|U)skXU-^H5I)4b||MJiN@Y)B1d4Gium#7cs z{sSP-FKXfsuYX={{y(JtFJ0n4zW#*-|B(9s2cqdeWUK`SV))-^lz(Txhv)y5NcS%t zpFf87|DTC<|HAY6V`%?xMY{sF06i>i?f{%$fVuyRQx$MRT=2%f-QaNfjby(#58x4S z1lUY~Nc(jkxU#q?2mJr7BGX?2fGqtf0eHth34bU1+2XHQ^pOWFSlXT|fkg7<%xDFFlhk175B*ye(w|LgMw-e2DTuV_H-a}8j92*YU>NJKngGc9b9nk&=J)?&$hx$vUv?&R zxvT$M+u7gZT>e>r1)OR9&XoSM`vKVXcOXmn^04@qDg6;3>jH@{7XP0G(Elt`x@gG6 z+~Pmx1StJ?KYz!Zxc_vZerZsD2xkg>xd{Fx1_dA!x2dJoFM~352Cn|hga41e{?pL@ zj*0yRV*N1;3_y{88Daqh3pdmn$osnV;{Ib`zr(Hn8Nxa5_P2=Jf0ow;5M|tE_CV_G&j$XpCI0tY zBKKcXSbqqE`deJ|Kg*y1Oy_oVa(4NTMg93^__rYn{8ywX_!r^$Z@mltEBSSRH{*sQ zT>oQG|A;~T6*c;YFsDmL@Lv)Z0`wTS+Y|Sv|FNfk$e#Wp3jBA1CtexAUHLn2ef)Os z&)&TG{ks6a-Tn2h&(9l|4_v%J_47rL1l=p+XlS%(5Lu~5PmI=6aCZgd5a*;XcjK-o zs3zfHDtH$RJiEubPD_>a_Bz80XWF-)Ty7cZT``RL+Lfq#j=#(A z{%zBu=ll%3iK=z6s1!RE>rHV<-C^rpTibB65PxQ|(33(geyGvGo`{j_!}1vK7Av=( z)PQvWaG8KHk4FY7aZR|mqnhC(HBcD%n-~XDg!xK=~MfaOa5VNdR(P+A*pwUE|n43&(2GkDC^pSE_zVmi67kC_~ zDpL7#cQ_bZ`8khT6Rj{K(YXC*;PHW5+zPqN=JG)Qni7~FM^Z)O+ErNrk6Qtq`wTD7 zQbyN!tPB(iZ}+R5-~%4#!zMsl)r_eD{orN<3boEjP1q%2;8QV+Q&`b`vNB z-A-Q@P(jzARYCXrUmOMj1IYNvH~+QVWc!ZN#pV}pHvE)Tln@sWl&yNV&LvCI(8@gMFr%#QiA?wuS}F!?*~u>F&rUePU! zWV=e+{V|JP^F*^a+hJXcb!jfqi#f!)^*y_PjJN5z+5WnC0H*2i|TDdHy7Nmie-kAthRm1IW#pyCk9Id?I)! zBi^Ul`%~wqQ)9twr3oodW`eFIeT;lc)K2M8$1`D-mxAK*KJ3J4rOQ_{Yg%0yAS^ay zN%2aZI@_-zPwV7r6gxf|X-qXzm6zYAKr+2@ly=?im$y*jdFFF z)ij_s3DXNY_`RtnHy2Z%aUOp?Xo#nFY(no&OMg%N3?IVYX6QP`pl@A}g8~Ne`n`T- zrs*v*En4f%{-y%W!b6YO_4`Sb(zR=-&Zl;2`^3mlsnW`E>oM(y?c3$F$*+@R8C4cCeB+0F>Ov$9TR#zoh@HloB;4}(ThKeFM-=ZhbJ=_c(U`bz{X zhuw*5pyX)=kDp_s($04CYA{85hC~%+7IsP;JlT@@tkhf8LwlE3J``_k`Ki}%eqXsG zk$-$AVCO-K2>l6Cp&c>6@uU9_# zD<=zZJlp9OoLuxiTlD@ibuzcpFHiGsUK@T}hoYUhJ<%dn__)hLd{!KECb3z!Q`4)= z+dbG(-;Bn>=&)o8?KrxypsUpVVU33`!!4IqU&dMfu<+iuAYU{gFI;Ln=PQ6%HpkqK z)^?%sN;S!kC_9k#(whBlK%Q*iJ|C+QY&oA`Bt;ybCUL$a(YpXNr)96Dza+X@H%q}Q zF@M12wH4B15zRmA(#;=#+$FsD>htMYtHfFVe0-X-81EjizIwl~Vp0f0Ils_1YCK5E z_Ky)T9;)~hx3xdvAWD50L{j|CPEmg4st6t*V0`u!p(<#~`T;s%fUk7LV)b8?{+;+{O*J3I{iJu?#79n;w z1#g@4v^LLC=N^$2z8>E+n^^$H;&*~iXlPI@a^IDLBdn2`MT{6w$j?&3mljhAx4Hs zGFv7hO&`Z$j2CVP7KrCs>LUnhrZL*EuHC~X$Q929%r%6ga!HnymA-r#J|^(>3G|>~ zVz0#I8@wQ&>JhP*vBy?3)8hjFc!4wn3){2IW0}^elLbNhrRO~J4NGkyxYWyE^FF9= z2$Cd?pLjKx6hJ-geWg#kIM`ucRWVyte^ECL%e z<$dm1_41DV-o5=%XnrOhPZYdgj`ZD_Q)!yQ+V~)dOqfZe13^$89*Qu@iO-4L%R_&x zIkwdHY4Xj8JmY*Jd~jI95B5TxZzZ=Cv{efuA!pL`J-B8A7*!Dpm`o9U`*-uc;gvj& zg9~OvbZGCo1ttjU!$%BU!ahfN>PWNTBqY@hw&tZiwFben#W9W;sT;eI1cPn4bU|!* zgvZlu!!&z>(dT1X~Keqt+r^C9mG{o6NLT?ut_77OQFtu!>k)MNM28nx{PBvm_D zJCr;TS7sA!Bbh4*2BU|se_ zgqmiDKjPSC<2IP*bEkQ^lH3t|)fE+KZh`#D8pC7%K3 z_+ZN0dohA+W#v;7Pg*?ZK7e&X+ajf9Efk*-^%ZE@MpoMc&8c9sj<(e{R`L_dRgfPH zHxkD2ojyVgxn4P8UmwD#p0_<0QNPn8TJF*#-1;2csGfI?Y+kJRN4iObU--r9#bFN7 z60@S!8EU>SZ!|iaPQQ0U)p}%zv;z0H+K}e4np*9^?wQ7zIM|8m5kIyS)T#!yjhfZZ zAJn2F%6NSVLZiboZr{;+d~}%VvE5!)7!h%AU#G-`+z-|n2|Ed87F}Bw@a)u5|zCZLT6&X~Jz>Dy=ougN&{9sCvpN{C_z76X;On%zYjQyr<)FgQT zi;S#0J6h%SU^><0(GyY>->^E}8+kaOR(y{J@I&?0NDb5VcBzTvAJfh6NQAo|&c_?N zp*mLZ?is-A0QCEkG#A;-Y&O4hZ>NiQ42RM-G8=k!#D})K)7PB0$`NG$I+XATZ9({0 zhD_XtzgHz|mfG!06vw+cWJd94Plrg`tH|QsmbBNMv?&-6*7)4J@S_(3Lk*j^WQL=yP0(C)8%c9i(FD*?>%{vgp+^_ zBwYZUNJD-3^E;lSvCrQYkGGX!K+@as+a8|bH(XW7q7^7K>^m-zBc;--=GuE+@#J6A=Ln3_m` zAx9*tw%B$bkh>+ZeJ@nT5}>T09o4=%gKc-&)`a{~_s0Tekd6v}_F7c@eR7azXZ@8A z89P?++tl62!Tj4%O#G>!)zFJ|JPwt-5iepmEDoTdy@<2$tK zG_(-y#Q7KFW1sFuqH@qk9tDS=*?PD6##qGQW;zTJSSzc;4FI1xw@8uajjX(Rga*8; zR=pWs)yeMIk7`S-<4_`|UQV25Baglqv-(Nd%QB&tgSZO8-o~0IU6K9}Nu0R3oTUV} zANy%CV|YZ3HmTnBnvo!f{cFR~9I zm9m+G8~f?nUv|-vpV-*-S%`hJ#2#n`iyg0(_p{j-wve#YT9X@i;l$rVZSAl*EB1;; zAE(cW`aZIZo7B`ahJT`XU4Bj|B7X42r61T*=l2LW=#{skW6Z+sbdkjdGjca6UyQJ~ z$FW0#n_G!ivr6WzIqFF%SmN$~P?yF?J%ZrNOH5%BiE+Q-|E|Z=Q8S-WR;zlr)TS=I zRYj;9dRV5==y6w_kTp(nNqpk$4)xf#=&h|$SfuR@Bp+4f3RP=98@qS1P3b$v%n{3J zojBa{%Bm?ZQPIP>Xy~e2-eFPAfmtay17EiF-C}C3qYF17_o*1MO2MW`03YP=4z)!J zLMsF#=C09F!r(?_j3{Dduq@24x<_O+-@Jk!t=WGbhzvrEIBq;`Q1Ld#>UbonDApdi z`jCJx51*)q-jA8%tWiztq}Q%*<7=g!3xkjv9G2xx575(@)_@*z1fYh zqYRF_oBKg+*K~>sXZq?O_lgK{pRXNdM;tsrQU_ZJ4xWeyRTW~_e;U+VTJ!fcV zalHEU$G1RUkBa;5Q+5=tUo~?$sZQlzu;I^IXO+&5+q_Qc7M${Ue_+MR-oJHryh-Cu zZ8x?4_;z7h##JTt(iyDmd3%#7a;O4odlpFfUB3P3o32fb148rawrHY*J{wF98O7?6F=k z^6KN6>x7-)uE^IXvtjlq8(_|e#5=BEk%==qdjf}{>}~5%^3EQ<*@r6kc5CMQ@^$K)_PDCPIFGHB_ihBQ;f0^Q8%2?-65Bo1LBMRV z(SpJ$&^mTL&y{q{dIyI4AQy#;MNFT(@rW*gCM)B#qf4njP7!AXHofySV?(FXRofJiD3To2jbI&!EY8*tMp2QiR`kyl}ITR zZse`ex}%k%Qs*AtUa>KNQdwbi#ky~&=~L)z1yb(%;&r@!ZLY55^!@iot7`c7>>9+1 zb$KKF!(EeYQIOa0Ik_uTW>rnsM^6^Bx{Lfx+Mb%_$s36*jpiLanXs#Rck~ihlJw&v zoc24CU?M+lBX@i!GGGvUM-Fah^J;hzA0^^&ao3Vo4T ze#owAU)fR(zg~7FsUNJDRu>1aroo}%Fc+WvzBZ=d-4>k0q2`V(B@j)E#gCMUdbm7-_jwVf?`XmaTaCKseM{@AD=u9$=P0)b2qU z^w%~l6%L3d`{7^R7f)kC%ffV{8y}>`lnS@163NMUIn;<}(#(cg>hR6QG}?#Z;Iu!& z#<|kY$_5^s&QnQVNQcPHyA22K&!>1 zdeGW_mg$&h_|Lg^Jr(FxVkHG7A@uT%bpcB+pM@^9RhC+|KJ1SPAfVM4#%<->Q2i=0 z)v6bJc(SBmC@bG6u4u?!7?DX=vn9G0MG7~PFPSH+@mBFsvB#|bC zVu}n!k0S9H_fWwAW2M$i1)>@33&||1ScxS;)hS9A5>!(MH=#ba@P|1i$!i?Cc{>+* z6t1Bm^`0Q2Ub9IC&}tqWpFjy>;|Fw-gcvJt1a6NUHmK0Xp})0KweBq1StCGF%b@VT zTlMziN(MY8Ir{4D!Q;Nlmy{b$h~6XdklBHzb~Fn^(QnR&ZmiYbwTs`srm^6rsNS^I z&h2{(BCRB`q!_xInxF4X@DV_3yLhHU+KVc#R1Ck?df1KMOFKpfsvt2UJ?xk!!E6&i z%SVrAd}v%V#S*6JqOAR9P@09L5|OU6s6%+mP8qDuKru(6Z+pZ2k<-4%>@Y@wmE|=y zTIe)cbX8Pf5xXp=BnxYdn}JjTwwr>)Jbh;ua;*(%OAJSJP~4)`DCtpk^P*}2$%Ng* zjw@@md_NcYRdDx97cP604V$xD%AgH4DMsfl_2=Fp{hTk|SIDY_ z`BkU7S6RN-u=7-A1Z?N|pa|m1%x=$H2+kOf*GDJ)QvKNcx%6Sms(m*8k3`zRvEZ@5*oqu4i`UOw8P zIp3lwbw(PeClWc{z^@xUq3cxNsXr$x>WK(IY3Wn&qjUB}5mv7(z4Wq_kHl}%y)}Jz zxI@|B?B;Y4ig_MeCGz@VefyC@vfcm@5RBidb&Fl=8JDJyEoJzc(*r6njbgM0MyCCGnuuP}a@{`q)Dszpz2Z;W*Ahu=P$syOW3JOXP zz5W$K;pT_x_%|eI9J8f94~+tRrvYeP+;&P5JEt~$$lt%9zDfXH7h7lg#}}90cU#i% zxzD)NW)tY_I^Ge^jf&P3&f4jpOku}3{bdjLqUh+2rZGANN+9JReH3UXtQwCU?Ircf zlKN)NYU#CbPbFI{S74_X^}$r45gB*VdY3nPGQM@c#d=W z?`YOe<-NM-1MOi$TuECOC93X*5%~ZxZ7pWc$c+1jq%Yl7 zG34)-5G9BEpe#LfF?&?mz)C1=C3UErDL)wUVOns))wOI@KObz_*lM-_97Q<$t+2hW zLrs`#LDzH8z;hq`hT2AH40S4_sP9vkd6BbqujW^{DDRgK2Bph6qhpfD3^Y6{8d{P6lf6 zKkN0Ix%0n?6|+@no*MuH?R&c-MnLR(E#~m*RSxEMQcNWYE)ntVHhTJu*&%J?6b`^4 z>Pg{nV2D4ZwpKHT2-rdbiWR=7rUHi+YriP54|9zc#v3;u2)*ZbG%(yQAY6?CCr&^8 z{vNm7@0y5ZHvD8oyHPJ6pm564VJ#F&9)P=d1v5T_QPL`M?K<+202VDJL=sCp(5|wmPejzGpr3Ft^LJRVOCYzg&NTdF4qLPpgo^4ERwtL^*zf zc8nHORFecR+u9KUc(F;6+^o1!b;SAULGQ&7NA~RTBdZ~k?u#j7z~PF(fQUU1>6NZd zk}xlu@_rUy5gGWHv1(|6(MmgZ7leJQ7&lj`e8Rp~xb?f5O4BM}uH6EokNrN}W@PD^ zJ>x0DqEy3h6eL|;&6hfSD7ut%<6 zVYA5ZX<{4IvnUmTG0;<66hS^P=}NAnCV^oo;jJ{@9^bC3bg@?wbzG2B>WC-@K+9Y1@Qk-wA_ZV-}GP8@f%7cgr(+ zJP=vV*4vP=c;$58^|OkgSu~?chhsGD2mBEQQxzvQ2E}(jo^8Biss);oKx~%zfFuBV zZ4IRq6JA}xO%nSMYqgKjn6lrnW74JfUio^}l#%`;XK^@;oY@Fdj-@3tn|;`{by(gT zrM9B7O-Q&Txsh_zjaQ~)GeA2=401Z8^ToSeXHWb_t>=v-(k4ghB5=4_J#n^lB}$A<#bqyDnM-I2Dg($4q3JBBvS&j-*x0z!QRdQ@T%3sv_ReIKK$e-QIL>Kw$Hsxvm z@K5Xp{h`;4^k6gm z9l(}KAr*rpj8haww-<83JmCs>Qm8In!*F~l;t-jpNIh~nb*d#6C;(t5F&*P&5L%^} zY%*$3?)D%VpAJm0_j@`85>5K)$j$A%P_xWgf70YkyqaIR07eNV6~lTr^MbG$j7WGy zj)sNCA*c9=iq4v)GyD-6@s8C6%!-x7?-(J}`f~ClqTE=p$YN;Ce0T{8R8*XGyxBN) zc%QTG`-gUI`lc+Kti);-6xwN(z^sC1Bs=OAlI!dtF7ftxpA1pAz?8?%a&SKe($Bu( zaDhNDfsDG7(XOy&Dl;T4&yrn8!f6(ucWyYH4kYZ zGl$S>`R;`5smZvlhwJC2@RM&u-b=2gT}*b+Mu4i%gzs+FTPmZ9JG9& zF3FoNqh48OfujXwal0^jNul?CfHwh>t~q9^6<+0u#{KQhX2bFQu$*=V&9Jc_4s$0Q zFC-<;Sd|876o|sUS$Av zc`9oG+b%%t8eeCLEPmR)5a=VMeFrJKVKt7FmEX5Q4msdJRM@oU0MyphPBu-PWc+fw zzZI&%3JPff?P#f3&ftVF!#FHA19f#73CNfqqJtK{nPF0y!f#CnJ-PJt z_DV+kz8h@d*H8jxr~BU9?Mzu(U*>AxpHMravx?+)JXF`(xTS(@-?8s_h`jw+wkKlp zyyXH%pErFZl34TjYj*ku^XpkH2Y%uh1i7MCGF~Ol4DAzUkf< zmAITxF=6&SMzYqkFv4(|s|@Re4u92NFxyMbP5*OSJH49E(RBpF6kR)# zrYRfrO;W?fAdSbmZpA#ZlrxaHW~srt#~!D1212p35BMypWe&d19c0p%N+9{dYTBfc z=aT^C1TCO1YJ2-&PHsa(=UX;7q@jJWl*J}M!f=i$Db#STUk9m4m^QiO$c#%di+sZJ zMleJoLl;$1BX;)C>M~Cd+dfyx7L;B-ExV34##4E%*d3IWf9M^JBOH;_qed*ad z2nchgThR|D zA34X@H9#EnLi1`dGg<5lZ#v9bSz(Zka-C`_OXzc8%rl6Z7E2osBcA{ua<8nYJ zdCxiTje&J{@f^r{xdWjF9KRj+UO#;VvTZiV4=HI2Az1B^(}FbIEr#Mt|kLVGwu zCUK7*i?r;T+2_}hL!(%HR$oHZ!jr!Gp*6*|?mFIAk>7u3?D!trkp3zn zPsSaHr~8mG8vT3bjZwhKDCdMpAoY<{?TeynARVC`$j<2xJ8ZMQPKcJ=Av2O}sRTHQ z>k3P4ad`u8pe}u*KhlX$Om4yJz6DTz0TJqJ#t>@0*ln``&XLHFbZm+(V;31j zp<|r@2=Uw{W z)@xr^e*e^@;M+_H*Tzat+KNuNd!L@0Xl5-nMtbgZ?b!EZlv?u!F5R(qHOsm7rh!wq zu|9$~d8@y0i#6dT0ohf|?`$R+`8?MXsi4e$8*HU~o&#H_2UBj2>`90rJt>N5tL+z( z(rf5XMF!uCFSiYJ0RGCzd$ljw(g(yx4T@ZTun1ZfLTa6c3r10iB9Z@sM9#XaIO5Oh z_v1$&&ogB~9PT5>m~9!Zu)YHpuGmay#~CiWQ|$-CE7W5%+LYhwN&~1iS6}KAm7h12 zb7qc`e3FmeNGYH}7ZDUxR?$EBz#y9LT2tvs4C`o-yL!0d**XTg=NFDO`4OGf8 z9zdAHDM0@W=kw%VtMQ6}WsR1{8;UngIw`c`<|t=Ith!rlWhKzt2 zbcr5d=VWe+(tO?Z5C>>m3-|5HR%&0OxGwhcu9>f&wnd|H9^Lmgw9$Bs_ukkgH3rN# zf23zxf~n$x-LJAc>$WQ+U;L1QT_lr^B1ykbr4loyNp3b9D>v+< z`!#b#0}I5l#%BmsNd@Rq_4}0HuT4ISUVO{bj?)T)ntZ-5==!Qd8QqSZPi9kF1*-g9 zQ@i!W<7j8NLx%t7TO?xPvhQk8ziAg-89?%CZ6=BOJnmRd;5(lkc^}arhuQ2#m$2oyy9c`v+OV}?PAD%RY(`t zW~j^|;ROuj7&@eJ7B?kVXT+s7L0BOIlH-9cu2=H~N^DEwfD-Q*fZ~*rHd$SLo-Z0k z3^el9_R#Mb`n)4L7@OxO0}&!Wv-Dvp*D%w=!$&s>k>}ckHE4EA{x^@l(&`F;@2s4^ z{eGIS^5rdhgm?`3GeVY+c%IhPW|MuKXd?{i#kGb67362T=@M4Y-5_!lpz;>O7kpa! zhD$k;Z)_`Ti)UV>k72)&9_hpB8)xQ))A$Vz)J#CXPTnDT?4LgN$@5lh1~%;Gv}IVtjzgx(bCJNXkg;YxK-VUnyP;#RzK!NQ9RD(y8 zd8U9xD_!W1Hn@9Wht4rCa`jLSi`FaHOZH4kBNJ_l4g!43Op|?dHzxjte2Cpr#)*ng zdJtH8r2Sw}9w=~=TH@>nlvJvqP`n55p&uxDDPqwEeWDSu&^~B(2l{{pVI?3;(?}??E^*A_#mjN5QL{j4-;V?7r=I>d9lEJo zgh60owe+z_+i(7)JpfT%7G!6?Dvi3@S#}L%#zufKOH4*WefTzqzJIbm>g62PZfyNq znPD|j+I&o-$3T3}Wqxs#SQIhXEPw!9G$un3yz*McgN0R(;?#n}Zsb}bLwoWqZsM(^ z(ksV7-`h8r)o?>KTTRP47L4J^7pZ);Ee{-ZAqXE$t@~F#m8Cb&;5?G8$rTL@SaagN zLcQ#aqQ+_3Js1wRdy7D0stN2#l)yy~M5m`Ii16!+>Tb-BsB=VPyyw$b&$kCGdZtL2 za+E#g1WR%K{`lBJvcpEDIT`Heu-7~FbdE`)eWPZTvx<%^j$Fh5n6gy47m0Z{3db&SJm!@NdRtLX?%a{k;22k3`XPD-1G$R zjEnRy82J^Ld?SG3MfPd4xiteS=y9Bf4DklYN$>MhdrS@=a{TuK#l3Z@Yy2{#VbrI9 zmsw@B+Qz8Iw++UBeRVn~?)@7qXvttJkoZs^FJc6w3YLnSrhNW<6&%q6>z!xSJgMSL6xS#}@Cr2R+^QWx40&=6Xq~n8VQF#Q!PkpZ!f^`$ua)s7 zuk&eK3CEi>ri9IUaY>}Xj6|Yq{T26H0U8Om1Q!GLCq~9OAP(jU6Un7wiLY<(cfKIM z6sZd$;P0QC1rO;ULZzJ1B4Ne25_R53dEU-ipST%|tFj`*#}DxzB=Ie4Oga!wueiRa zai6=fII|mZ{v$%>HT_L!QAwqq)j@68Mz+s4fCzIGmA+ORK6QR}kaA1`J*2BQH4?#T zzed-djj=)3)u%>h_VLK%1!#m|37uiGMN>;RC%VK+7~na9Brp4fnf$D93UcZ#Q5Y4s zM8W5`W}v+=-Ge|HuhDl;!-9c>-VMR%P@ZTJbI5SIYG@iPcJEX2>U&(8u3;T$m~G?f zevy;hsb~!6>|lXLN=TRkbwJHDg$-{SuKa?&Lp{GfVo0-m(_>Ne^k!De?TlF&qI+`z z#vXxZWJU55L%Cf*!rI4WA?v-U(t{Wl4HQ7SdS;3Tuq*k&!h-d&Au9Bws?%{FeoQ{c zy`wX0ee`SzpfKZj*c7v(V+K;LSp{PU(eI$+QuP`0SR0Uw%uKX*K2lG?F~U(XvJRaJ zbM}N0;Fphp_=UDDeYL6L0QrdBRGL@>hQx09oxlujAvTmgF=pR*#v&45#1itF(a#rt>7Y5n_?mARbN!;lF(2q-~rp4 z29*qp9Ap4&0vYlUr-!%^;EUS`+ahF4zw7}y_dN|~d#?qpRW2y%QX3(Ak&Ddg&zi}R za<^9WE?hNe-Yk$#-3VKK-RQOaT~2}bB9{+V&$j$yHi8CM{J|G`-h(c76h-D$8{~Xa zakDr;bGAH?7o!CtwhFQ$3NdJltS5y$_0}gHAn9RHB#D8%f6%lQ?Eziv2M zS*zRWNfv7U7D$s?0;H?c6$H#2Hy$Q8I-Rx4J`e5>OD^AVoxZV1SFkMZOi)AyqbAB4&(mCheJ2JjkH7LhJLFuFRu%!y4$1-O>EhTE1wt9q zYwMaum2smN)awOY&eZVr%)6&6&V~&|IVZfYU(QW7puJWsPm^SZwnhn(YX$gOFX`61 zl1Gv;pap!y7ay|?XzcoF#JeZw=`;R()~xf zlcrZRmadt=K0ts*L^<7k{W`js^#<83seut`yc;SZ;WvG>=eOR!!lQ(L(wBsXR^086 z5>d~Ej`4Sta}5+OC7|LXi5?d`ljB|x1M_`Q>W%<2jC^n+FgyH+;Wghzvk0V$d}`_9 z!o4Q-nRW~V!j z+nr3WctfLH^~%A{Is_M5?1}o~Nxak9QAYqy^$4p1n6v$>jJwS^ZQ?*p9h47>bZ5IN z*#qSEb6WZcTdmKU<#>C zlSjv7V}lOKqO;wyN+O)YS@9oi|M*IVaX(Qf!)v?oMCq;s7BY=sH;|)p)D-_9vwd-^ zvoAbKgT|flEFoJ8oMSd0&O#9lQi>JDFQ34I_Vskc=?0j^8}l*h@|82kehIW{c&2U+ zIhwzE9Xbh3Q2FBA$uU`Miw8=KJ-v7*sv_LIe(o%Uy}eNPC^KHkt1H|kR#&FMKZ_iC zO;ZDY0=&c}z*DPoMy8NC3*@#L0BD7;x^%Q-XyG&%pK+&jC@{hJ^%KsSL^XkAj`1H; z$BUtRm2JKDlpvXkhg+WHAenRkEk%dCkUX0 zLRiv2p;vb_zFxVZHR(O{Bli4m)H9CHzB`M1%t`Z_k19T}XVT-}R4-N##*t`eZJb1j z+(r$YkmkMilSo}3DLM%$>f#z5c~ji_2&6;KC)Y|SFq;0T6@0F-YL9E}zzSM6UjtIw z3S;jUM0OoRNV+!;)6x9&<9LdR7wue>Fo;q($Fl4I6h96p#P%|>4 zMneK#czh4ab(b*QdcSv`hKm@&FCsvqoFTs7Nvy0Ql|5qfq>)aE@kUPzoY!4v7*uqS zEH^Rq0`~@OqG!KDKAPn)2bdEu2dP1JlXTKP*NjZX&-O=IDvsM(bV>$?+Zv0piv)P+ zLDPt8B|FB~!69F0$%|IbducEs*S63lZ_)bp2~cA*yAphE+~cHWQS*8EEf3q&Nc5d~ zIN&=?vim6x8+lS(6kREoa8sk@zKdSwnjSDYC8W%o)4nr<%T zc@?moUDcLC<(nL<(x!sWkSed=Z-|1HuR%snSbyAx7-MN>jjvdd>=;sEH?DW?@+q)BD#e5ZTPWLoxf`A4+`-bb z{_!D#Lvi?hgg(p}zDr-Htt+KTl6_7^#&k!JIw*!FI1?86sOb&65<6%o?q-8m@sr1& zbDTzJ1NPdLhkv}kDmx*P9#gN|A}1eUHOj+7BM)x&-CY&9d6xh)EF^re_2iDA-T_O0 zcg+NU?L-Er;MC`ClliuSyi`5RkyD8n!!uy-ytXK5g!QS$(81U6O&BK0Ff-E_N7OVe zqIT3h1r6&x=T{(Th#HBSBo6vf4y0vjt>~D^>AC6m4@k#l;~?kWC!KU?Hz3y=&(DI( zuNjln7+IZNI-A~(+YFLoWP0iSyR=9qcraylBz@r z;It>zL7u~Ov+|PtS|v8FWW^*rpZ^M+sMjw~kK!;F^tpX;k`I`g&R?nSzfY->2fgw{ zZrD`qbi4DLo9i}}9JOwX2#}lmLHA^|v{Dy|r*1`CP{FwD%=@hM$s}+y2cT)Xg=%lU?VS@RH1& zy6h<#4ZF>#ieLGaCRu$`?;VrjsM|(hNY=VmU<-XoZAnug338mXis7^>U)1uqlEgc7E1d9suAkXDZ_d%>82MNTkpNJ$(pDJ9HMJs;aG-f;njyPC~RyG z^lTu9Xy)V`TvVy6ZC&fTtPOHS@K1ON9BYHbIYi->?>_Ru~m2AVFjTpMU zE9Kv~#oNsn{q&w|Xl&x^H*xod28-upl4_hno^-dFpKmpx?#_o<9Lrb-!x%l2n@9yydou~Y-)R|{dM3) zt%Yc?s$eyK2&&7pcS=lT#-UA%qKm`<;EYpNnYqYx1-r(-)rHFuaSReFKer&DJ++aR zH~LaMDAg)8EMLb$hBr+wlKWL#0a^~CcO>Rz)HNrxnpTSmER&!Rz8xdTWXRX@<_F&p zLmpcgcF2$|-3vI=*&A=nj}L<++yu|98xfdjXu>lnlUOxWP@DN>pqkOEd@H{6|KGZBfaXc`G#F zWt7G4h16#o1MLYl>BYWA9WNfV6>^mKCA>;6E3b=+CnCAp1Pgdq8m>&$7da-AW3A3M z*at1?9EGGLocy0=&iozfzu)7sZxcmh-)ihb_MH@Bvdc0wgt2c~1}P&(wrDWcEZLPc zyQrjW*~-`n$yls4yIzhS-?2y@TkIqw5&a@H{VjtxqHG1UxzM(~6v#3EYhem?yMrUEKiCA( zg1Lwa?#y5V&dV9+pm0j<1esR}A`vGDqrUqUbG(e*Du13ZPLE=j|UtldMvza5mpm zq%3DCOD6}$P|re8O4oN!sT2)CZN4{B*!AGmfZUk2(&}+#XV%6f8zt)7$tfvmSio3g znt7Ia%ui0!}taN*s1W*$lDSmQM`_nT+6!0(H38rB;CT?zjGHKab_cj{O`D@zjAlBso@xG&cH z6uJjVwV~iP_l<9VANRKhX;}Sn(JM~ zh2GOE_C513oIeeYapcIoV(GxBag!p!Z(L7n94te=fPDw|4Q%OC3l4^vIJ~ir{Dl-= zcXGM+X8ZiZV#-ISFcDZrYUi`=tFXYA-PiU=h@Ds6DSK!{poT2P%xa`#lcfnmzDWJ4 zZYEMN*3tU+eTaWmWO6Kpxr0o%E{yfE+WD9_c)W));NxFr6V8{&Q`cKE$y<_dcG?y! zM7$X`Jm+~b85nOMI}B>I8hWHV(^a0$ZZgh?GQuGQ%_tXhQlEs2B;699^GY2_GnSR5e zANw9P!ztg3z&?Ts=VH~Gi*<|7G0r{(Io$lVWW%giRm@XY^p`7pBRVr=3fwqfZNhg& zJKdN2ep=zUwlww4zxN*PG)%xBb8oslR-E)dnZwkOd|T%;ji1Q%*jD-Q4fdG|E%q!! zGBPMl@kLYb26Jk7Xzc}DCFvfVAcv;EP}< zM3>X<^WO{iFMoE;vcFeFqTxU-VyH7+KWlk#W9Kzo`${f#UB*1WsdI zvJ6yfh*@2?S2$2!%s-rL?bxp=8c*$S$gpu}Gt<94B_e2NO{=E$=a6L5=TwsnM#z71 z-VCF2;>byJcQ7ut9xV3V)VG^%4()DOEmYOEOS}SM7O$9Vvfp1yo%ywq-$i~Z=$90M zpy|xd0Nz+WLjtSrV8>e7?`d?hD_FA+k8IxEpRiHyD)C7EKHiHacgu&)@ARr4E=J#1 zb%WkY&7M~M`j9P8xCsaY*!lT!PTx*0{#+W}1#GiB9Uo@IVErYa($%txSbsXhhbkLJ zQaOg7Pw2LksPZL$=3*cfDh8R@s08ao2{z?EozJD&Xs(~Za;1*9>l39H0XWi!t*099~caPVf zRdH)~3m;sRT$}~-LnDZ0s{&DGRPQS_Fc5OUzXj^UJf3`0w(j{Be4Fo6Nw&clkWoGk z$9BuP)0pPFWV+C0!Zwj0lTY<&oev4Ze=W)R4(94DP?QZWWUi4xLMU|%~wd>SaMoA!)B_HTJv)0 z(f0>JoUt8Qxc%{ptzp@pH&|mal1ijlu15>7^&rj$ZCLFcsMVIvqv0Q> zUU`5mZtg`pf08=-(YD6lD)DS%yCzC_#p$v9`b0BcL)`%b>;363xvrLg*Og@~W7Q@G z08sV^N}u=jCt&w5+PJvi=&eaiRotDGb-3;QFYJ0H?w7!%YH0p31>*Y?TMyjK`N$TD z7*qt(6s(vyLM2LA3{(TAAh$kBszGbKE}GKgm)`|%06cROrT-Dz%jNE(Jda6>X0ICd zM}7J4nr+9J`;8H{-hQ+_j!eN47`d@lXX;NWI z?R!lYImz&Hs%8AUzV;<0Hb{1Y(89o>==pnz7ua8F8eCcvJ*s_kVE3DxHM|%$%n>^w zS6#FHf0fX9IwH;xk`aO;(zBC94qbRb4N%)$lO$qTp{!~Rr)daD2xnVXxR$jZ_{)Eb z#jAYm-*ysz;nlx?$V3J9KR^Bt9KLNZ4e)-a>xXg(1s~js1)^uC4OE6i3lZA4m#$^@ z$R<^4Mh#WVETQyB+IGk#o;J`yY_2VNAgQMfr*u!Vv&s-w8=Yq5&tp+)G=F6*`6&6OQ9Bb6yONa?EaeL7r~!H z9kQbHlL03>Zi_8!6X}n>vIX<9gA3b}@Y>L@A$i`HNQC#tB2u_%;`avu?0Cl=?HQ)+tjY-IigV$zv*m1z z70wmI%L>BdFIXd;mLAB~Eekqd50P!z^d4zV;31k%c6mRw;V(_v4yiy32#KR#)oY6X ziym1&Aou;HXM;YAvltW_wBmZD8|R`agzYuB4QG6cX|sn0V zn+_4N@M#I;(w9EMYiZ10!Oeoae(Zy>;`Y+@h>}Zb@%9_vOlRxzDRYkftbAJ&!;e-) zX9!Cb^V`xkbBCF*c^`>r*cq|ER{-jv9`H|UP-A)uy;Ai{BJ#0b82wrG=NT8V$jtc6 zZy!t|k1`Cw4Uiw>a#%K)VJPPrtrM|O=~K~W4ILa1=H2n_G49#`x!z!>GNh_DF@q+O zK&#Cj{3Wm}f%oRM2a80{pSMrcj)vN%J+yR5`3REVja^)LwM;12n$ zv;A;d4{Ovu17#s7{`_J6XD?V-~h5NJLApmnpN>dO$pXNFLE z7f!h(A*ZFfk)Y`pU((;vcT^hV%7qlqYW_(oMMp3jGxcil{^R~`L6uZmvK=rc7rbFd zK=I#^<+Tl1?FkLEWP2ri9+g2GzmLjvc3h`Qv;Xr=8uaHE&_HvcGa^fyWaXc}7KN{- z=gB($ur-$sS_5WB%0O5^ zP0j&ODYG4)`LbO=9vk@Na>rqDZbi=nc!;MZU29G_WB8&7;AEs4K3puA9lOqS)mKZJ z;K;9w;j-f6iXO)o^t>lN_>hz(PtvSZYoNcndBMzz+^_gRNFOs3F94R4bxJ5~tb&g2 zJT5W#E5;Lw@_%=|eVW_xe0AjhuZYDs{tv0)48@nC46gY}*vWXcFTD2QEa6q;OK`fO zdm;khVE}2XwX2z4`KKvSq@(Msy23ABIt$u&;lQFm%MtdvMmpqzjIG`^f3&j~9)~vy z$q25`r7p3AzTF&7yl=Td8a2GUy@CF}M7Cd7_0d|v+Y0yDd#Yf)S$WHt>RUw$8DGP! zjU#cqg~MwcU@VZj@3~0fh72y{mpPRK-UHJ)FJ|`L5hkn1;)aUkyH3pau`qgr4z1Wd zdZ6$C^@WutT_$HAkG1^Jk0Ai?8rkJO{0$;+&k)dud}+Ui%(BmL76el^eGV96jAB_9 z>(=9As|QV@ip$lvy~|YTHkY|}0qfeaY5=Q5~{n6`keXuH8US-f>%tMoK^f7D294g`c}mxtP+5T+)E&g=%gNHR}- zNr5vrf8SWYvn#Wl30|i?zWeA5`X*Fl|J>&57yIW_LS&6xQ?|~*u*lI7vNn&b#u)IiwQ^Uu?OG1X7GSPG~{-c~WusQ|y7Q z@~xo_>Nzuyk)sTG?mEw%!zupUD+fqS_x?unltYl3oGLK`f4KgY+p3uoK~-JpK2K|u zIIxAr`cy(JGr-AO7WR)}$>s^D=Cr3cVX(IEqJ!V_zgM`{zOv(#m-yuf;ebyiEr*_x zA}`L1<5HI7-uZ=-%ZQbUFKBX=3g*0lL95TkiZ(!*m|EcRj_J8L$Q@ZoE#HtWtzq!- zN8e>zn0+IBJ31!%l$<EsPLtW#YSm}q7wyT#-rC9v%Vp8!9sf47h4B&D zIg8N|*gB{R_x8=fQT}JcHX$|GiezpnAXWq-!nvj1RRs2lW&T%FjswKdGqT#8_F|V1H8a#MWVl3E`$(MWO`X}>GgQK6pn5=dJ+5}&F^Av9pFhz(Ly|7QK$jg==Qf-1z8NaOwunq_1K-4@R6ffgEu%Bj>6 zG^AMi9_aj>&PiYJujqp$O55KS)f#|b_(M#NST=b~r!$b*?$tl_dqlsLwIE@n2XPer#nLZk7ch%-C`|% zqG$WtTsic#4mTD#jpBQL>pT=@z7#s+nzaRV6RWxbaF}gC&xK9smv6t`#KL}2m}>5i zZ{7cL@|5R8v+Th20<2^Vgu9UTy*0mgNsJsVqAsfhujch0w@jU+2g+9c!L29h_aKOe z?_qC2Qrig1gZ zW=zSzHlJ6cwPUh`OxZhs)RF8dCMXUS<}o{0xwVpYJEZgV-#;h$Wr#y5Xx}Ze>@-45 z+dy69wv3DQZS1}euzyI;v~<(gF6GYcy9z%(Krk!9nw33|fKU~PTCISnwK9*-9hg?p z!2KEs=Wm<`l2*o22_R~<`iPeY@4em(h+3h^Gk!qQN@H;Wh*~Aw`^chJBw5s&*yp26 z7PVFY2kXs@MiN=n3MY$Nd(bVpWKpXnaIjVk%mk1>7L+V%U6TE5Ocu3P0#U2w%9aXQ z)XGE_wf@T979opTt$?VtGB6|$ypN<9@S^&=Lm_G4*HbEiZ`Mjx{Ug~odky$zks5BV f5dXhE#vcKPPYE;M%_)v3zz;&tM7Q>uBksQdL!kGz literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/3.png b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/3.png new file mode 100644 index 0000000000000000000000000000000000000000..d20bd100731c8c2564c5449bdd5b11d279a28be0 GIT binary patch literal 36331 zcmeFY1z1(xwl_|9NS6r6rldP1h0P|U1PLkkrW-b;G=g+&8l+2P3lfq7Cf%Ka(jiDl z$A6)C?t9KX_kQ=g&vVZ`@Ap5CsEe`YnrqH6$NJ4Neq+pV&AVViJX$;y6cj>;@*Qmy z6jTWCR~!cmkkCILv_U};4umV}!yUXVZR{;jSOgV*U9kx8Sv$GGSp@H}2nd)vJM+M7 z%&lC_9o%>vE#QC%xbNTuv$3?XfcU=;uEoJi?;lhQHdI zTUj_>b*S$2$j08@oJBxMn1>JOiv7NgBh1Ou4Y<5}5BP_l4-gB=16RNe5usm~UcWC~ zJ%IlC1^9XRIDi&l3#gqF(9`8pzz;tlQnGQiuypbQgg;yTdcB8*tDB9JbLPH!i_Mjy9Go;YxK)J(M7{Lom0jW7iZ1$!f7{#dJ{`Qk zuIA3x>P|2Vd!S>O*RLV)^9c(58Wzm^mqbWVt{QlMk==xRW~()^OT z+rTW`u6p|=f;&0c!)=`ZS_pM=bhLn8t=iQ@%w1hCm+GfwT!}25?5}2bC2$5N{#Pw7 z1v*f3`+qOJZv%r{|7t5Hd^Nnw*2)$(R@T4Y3@q)hQ9d+>+F7|exjSCH&(X>8=UM>f zX#TsKtEO(&=73H8>iMVWkL&eI!@u?H>f{8x=?}~K$J@UfId~~p*k3Ng-)I;xv;X^N z|Dq??zkC!|!~Sn|2dwnvVtbg|yI*Pem%t6~{afWfmG<*%z5KL1t!>~II?m>RB@5p1 z1dI%jS;HOdf#3LnOEh-s2i~SaO{+p!;3W)z|Wc>##5#$&AB{aXXPOHCk ze>w2~ieiB_SIhjLPvH_K|Hc}w-u+)&f=eC$AC>^XWBcC=z#}6Tj>afM=KuU`>B`NJ#GT&mZpH0gw?2{{@4W&CP)Ymp6BXULk}C@Y^pH0%-X^ zxXJ>*ap-D|#jb4s4=XGnEc)+PSl~B6{I9I=73ThDD+~Yx0HMG)^?$j#@?w{N{!!W& zxSGk8_QkKz;}6;wx!O+t_<0Fk$^KV#e}xHudff~1U1{-8r2DH8|M_(MAM?gjn^bNGd>Ht>ID(77^~KfUt*7Igj;%D=LYKfm(-26g@v%Kz=3{pqzYARzcV ze7Hh=0lq&0^8BVI{`C46i^0m{`2c!O!QBw|NlZX{ilqz1b`U+CynyY?Dz2h zzY^*Gt>g3O(Ek53vF_h^K7S7F|Gj8e#2%oB-u0z}&H`@ogeWjo;ipB+8?Eda>UUlM?K{EP4pvR`lf{qQA;`EM^50QkAf zPXAA=?H_r>DBYyfs%?&^kv4Geb48~#vFAe+XSD z0OXPWDs=x#KH!fqdPO4sk+TxKlKro6R{Vc2c>kX=C19feGNnJJZ7wPLf1h6v{O$e! zjs`@p7U`ebkp3PK@fRrh119_daIT=~H`4sJj{ho#35x#*7vZp_VFC}pG4g5pw2>>QOZ`f~pdguyV{gwaz zFK_*qo&5(E_BVL-=ddpTL;hiS1<)&ek1Wg|+WyPLe%H_a5xD+%{r62wK;W;vEB@cb zBLB?Z)uq4l4>K{q+vKyfvv+X(mx=xNOib|K?~{KDBl~;Q?f;bD1yE&tR!+_?|FW_F zrj3d7{VlKcr?9cVM^OJy*%$!yeAcdRaQA;1*?-T-1pXa)D)5__{HNY6|B*aAz_0Py zcz8bgZDap(@c&Z>|8F_eKZQMAd5r&%021KQe&ON2V#hx^^MAbl`;NWf-^7mpOi(2V z90gMP4^E2wy!Th9b^dsM;OE`n=YxLTxO(97(ABTQBejKAy(lP*D3CjH_q9VHldj zIIT}!ke75sUid6sw6t8jIoaHtPUG&A?sHpywtU(tDA{;2lh*e+t=?@}(EoTg(LexG z4OQnYIs3giK`clqO;G@c8D1i%SzPs`IbJGSk!%PWAinWaObvQT1c(AS;)((c5H<}H zTEI0QD;_ndZ9#6zAsuL)j)v7CG_%1D^hiyHNq~UvX{-4O6E#x<8pU)3*Gvfkj|%}K{NI}fUt*lk(PB!KkyDd!<7!bxUr_$N6xYV9p1?=J3ISmS1c-Tor4|HPaa zhVTmlFJt3|z}K9GLw&m$v!|@{ZX>$)Elf`)#|H7&R@zMzb`}yedSfIv>+DMklRKBP z{m)}S6+=(RsfBP9#_sPop$h5NFU97coPCYtwY*eTRWPx1-4U6P{zE6GaLoFX%|%;o};JN!jkVlaReav?6wYi!nT-PqgKz#~zsEH~olhabx4u zk=uTnDr1-?GxON)vmcy4bLbSoW-rbUsxm!4*L$W+Nh+6BcHW{%8kqJ;f5};5rh2<< zqSUFp`rh}#8)Kg{2|PRMuzmLiz!PK|Qt>^~CmT%-X(n=rB%#B*FI&!!n@DZ+d08=? zIob$Hr4`3A(OMFrN|36e&5+IgXwlE94)u%4>J$^o;!Qyd;>*txGX0KMd)WrH)6pv8 zB6}FzbRCkvnSwLoBDf_*{G+n+vr=%U=sm`nB=^UmRo=^)wW76CoXU<3t3?xA{ud`3 zyysteA2DB}5^!G|-uPBK>ydqNzIEZ@znjpphH%m$Sys6jQ&>?e5`=ynQUdFR zsCwtv)4SsC2ukfqAKfuhqt?c)=5_c2o8ha_S`PXWwiWjNXLe=v!vZ3xd=4}~8!8#K zA6jSE@C2H7dnG6QPuu)qDaIZKHLbLEd#pDU${E9l4kI|r#ICu#vZR)3eMixC&8%y= z{Cur^P3puZ=Ip4?KWjVJZX3`}w?XE#D4Fg<@6fxH=%uM|&b@VF6~N)$PjttVV)QeS zoyVukGUcNKEwlGhKV7Fv@JwBUK5w>dNeRzjI9mZvq%`lb9B`e)0h*v?l}3~h3Mpzn zGpN|}3V!)|)X=e?8oXaddbiqh+65en|1mF;XYKS;XR?{C`@mAyEOgB!arbz=ym52T z$^T?3a9vrM2Q4?pLM0;50MEL#lcDH1HP2y$eh<7hgR#SlDLS3!$BoAu zUufND2YnA_QjFmPie-6R&4*u!WGy%-;T1<+4Rb5X4>TH-Kjbjahz@AsSKRD@#u6@q z+f2{a?ki|9qy-R+v^6+D7&|a}8`jH=YU`9@7&w*BcT!s56t2Lkb$CoU)GA@vSH%HK z%-VRm)0L^4#y}MvVw`Z~za42RCQFnNBVaR(dAhUA9>hXR1og#8RF4@tF~kKO&4$uB zj$7_(r`)EDJN^EFc;@D#>mvuBA8+MG-1>NDurS4B&9bfD?`DOaPJ-FOvlaF+{%#3@ z(U2sQWckr-tN>k$d}cDw4<-z0iKT;DMjC_&5|x4H88;F>ZXpa{&+g%VmPD>j+LiZ| z0ibFhLZOEvG1>Z7D6Y>4=$2cn) z@KX_00ZrzNP*54W(8dQMNn{E%HWw@XA`8_4jikJKP-UndY;6us%P#@xGn4| zQ5lWmS3X$~n3JfRm~wo$H>45!Ear`Ky6YIfvIkBF0HmLe)+;`SJHC4k3MGt@IrqBH z;o?4krjgM%77ld|XnXmTa9l|X%-BI~WIu?ev-1Ta=X+h3etY**$V*27We*I9p2wWO z*QkM&c=527D#1PjykD-Dfq!@;JP<0)YrFxz;SF1GfAIL*>*Cc%cBsltgA0X`x4m~3 z;>Y531r9|=Ay^$mj2(t^Z4CZWQ*M2?A5*Cp++FNoc-(jU0Jfa%-;8eIS9q76uhUz9 zTkgXRYs!mkxw=3} ziUk18-i}CTV59aND-OwLWq?{?&``6{D{x9xzunutz1uAa)n&-`+37I+Ab{18%+zs6 zqvbI^hEGVWBXzta4f#6XE%?s`VhhZ1Qm(PDkT+lt@OvbI zDfk$CzQ3zL#ytgZW z-j!|@#1LyF4^HNZkc=FCc&FIMVVc5!@G#rD-D*V z!Y~*E-{&xP+$MtsIq<&Fi+_R=(M4RrgZs#k?TC=a^zN)&cnngtY>*#AZJ@%@w;Nr% z8pd8=1I>XbyJiA#{dhmc|0rdENA9xMjwd}gBe@U*#%ltL=6uS^S>8)&y{nDZUzsq# z15vnio4I8%Vrqh29W`&oniF7d#lR=SHf2+s+2Et5wJZy^}t zr$;`0G8aBI+pTnCqx_}@3be^`iJQC$9L+I1GNuYUacds69O(30%_p0e4pW4!+s`Q< z+n*ja5Dap}6`bhb!_Buu#ImIyA{y~_y-A7zqmXzLQ zF!o0rpK=WbB)Rv?5IE)WwG!gEf=I8ABw&mKu5vVXRH4cK0S2Q|+5|4zuD!-&zxm`) zE=p?(sfTM%R`f-diUV2X5;BJQ%T*~pMwloKI;6};gev%~zrj_`oB#5ZVN*}w6DSy_ z8h1zE5@nt1X@qy&(Hq}@h2m_#^a>~M3CoAH>j)n0A&KJ|>*&`h*~ss?lS`@3q;v-2 z2`67@Q*b#oA1$@IFBsnGdSOoA!OTlllA$>Np*iI9UMfg}R8mf7%O{f%Sh+#2j&Aiy zGsrQerah*^Bw{bHIP=vuotu!48K;z?pymwM55)qXJZ%gwhS>Zb;Y$as(XI& zVLQSWZPcWB`34C77aTi9tqHKqZB*>*{o~YeU$u)n2C-EU{EW0j6|B&?mF2>yqE-(m zw=#*4%+iXHq_M0vJdq!weqdNOa}bX#&6lZW9Id8=NmE-0wAQvqGEP*pa6lU?zWnG$ z*modc9*+~$MO+55u;Y(WAPt>dY{R{*l!1xdn6Gly)>cHtUSh6#vK`TLBFg+HqLBL9 zihLzH*mv51o##>d!-r>w zH*0oxN6xG9OuCdG=}PGKo-a5({Mvd7GP-o5!(-9c)SBm79NNf8Kq+MXrs?)TbgjCNE9KUJK(*Ws&|8 z^w!bTegbTflsA2x@r@;<1_sgQlJ*lyE=sX`y(ev5t$#~O6&KfQjg9;InGdnd>G!vz zZ$)pZ$eXXUYs+uf5*kFgM&$Y2DWJW_g<8hB;FZM~dwdNJd#cge22GHwR8)TW?v?Jc zn3A#i(bO}yUU8BpCG@sRsl(bPAhwtQaDmdO<*BrcL@y9Igk%KU1gtK{TdNqar!vG? z=dE8qF&l76Hn4=?AEjkk`qJ!(skJn2rUkjsr3R!Gtj*T+mCYee-PBi@r z34P%I(5&N*;h4m+0*Qkn!HY+ZE7sc}BjiL06yXX{o10Vf9fYvG_DVXtm7bBoSG*Boo^bg9 z0$<*cqa*73kAaPOCR8u~IWzCTCrYF4nFg$&bRWgVYhfu8;xB%XEPGGTJ-_=+RJD>> zRr_u*T`RC9t)t1jQnMc?>w0rn`Utk%Mpd<%f)%6d9RPwR<`*%)qw1us!Ai}QI@$^Z zK|KJ;`ZU!8=XXl!DRPxiW!Hwwkd4O9WPR*;=_W^giEq81?*~rl)!Fab%#{auks4R6Q*KS)rbAm&D4)YI}G>hbpCBV(d ziJ2t8>Ohr6=zN9U6?OkaaUb5*D>Sb$`E=4lnwFxJs_vXZPoF8np=M&5qcJGopQmO6 zGx1Kw4L$k^LsZ$ke5`;SA7Ss(ox|B&=9~p@qS6@Z8(g!n^>Nk&Iak@Z#352{98(n! z*OOM!=7EJOhe9N0S>4UX zd*<6@8{$L5Xg+1kq|aqE<|eVsruyX=Ie*=)JD$6K0YN6AciV}ZPvNNg)g2jD_rr;U z<92NYR{Vjgm$0}ER1l_!)0^$k(r18c=UD?RZ(TTjpq3Fu&Wi`MxMYH!Gwvzq;!bw{ zd{QHihUGOfc!}*syP>)HGfNpxpE>EhNzlL#wGr}WyVdJ>pxzPnYi)N!#8w% z-v9xdvF}IpoJjLq!7yURw5RXZ%UiNg)f&DW(mU2nSY|4TwQbY4IbV-KokzpxisP>C zmmgx+#d>wm`8dSx3w0+p*EZ|ir{LfdM)v|v9BRxM#gQ^x9NSz&kFvar7C@^s4Djo4 z-;X^6G7r`YJnC}G0?p&D^MN918%|@BNQ7Lk`^x}CjA+LPYRdUQpL7*{W1q08cD*{} z&f7MEl&sVwL3dP|Ad}~hO^dK4z6#t?uzHWgr+3+vmuv{KHmGqe+DI3Ei_BodN_@Zu z-2aGwnjb5@b_eihOD ?mg_USZNS8EU2LhhV?NTVBs}113P*RK8@0SbkUowSZO1l zI`dUQ46Rm&nb`}A`qJlHPZ-c6^s(zyzk67EBn1?}4^ltM}%6p;XMbu z;kKrLSIH?xj`bjV@9++@n?l}F9ZMI)7pdgX4wCL5MiY$AtiKOe_0zN z^+N1%vx{Beu#nJGia37fsE(=j54x0js5#^moswla!$Fb-**ozTmJkmZLK^Uf5GmXHT_3Z>HtC>)2%?dko z_N;YcBW><6S?eYhqB?O+KYZDE%X#cI`|E2%3qvN6N<%NK9>&?zAk@*ic_S^%D!Jkd z!%lmi&K_M02q0cJJ$kjFnjEM_)U~0{(8bn5p!T>&cht=GKmwzp|KO;NrZd*^j-i#! z%|}PHm5DJI9XodcPsXs9?*oBjQzLSs%rKdHN>kxTN7ewVYrHaIr|OwbGK-3DB1_iM zaac@cHCazTiLt@WE>evFe*YVUVmh1rduT$+9t0itI1!9!q;v8?_}Auwp3B}z>%gvU z$FBPxY;du#r4| zg{KIvw$}k8-QPAIevM37qYg5oc)sRS{JQhhP5HSHuK1XTFRYKYX7TMB$PZ*lX|O)| zc)&KZ+z5!ZnMy+NG(l!uMiNMXp_%~p$O-R$<2)ISEUAeQC?_6eX;aEA*&0Idz8G5! zXjH)HHK}pNOQ%K^3|>ll+y+j5iOAk^hqo1!4>!DET1Uf*^6R;aIq*00F_M)4wOVJr z@G)sGc+<9V+%TFD5zqZ3^x0Rol8~@$VzI%TRa<)?Hse8fFw{8Z1PvOut-XIg{MjfY z0Ex!s41~H=GhR#*JFCGlmETY(kuBhQQx;*udQQ!U{FT1JE91q-?QtZ$&Vd#gqXh;C zZUe-T(gRFNl#fL2@REaZC^2?hGm8jX<4RuS^|yhA#Pr|9N~d+~{l0lILtn!O#=%(h zfzVk}2@~K=cV$}T&bDic%u48sIoHe38EfiUVk~FZnH6Z?A|92X7A~>Cl3}n?NCoJ1 zGUd@Y7KQ9)Wf#wcW8*hUZ}%CimZfyN$}Zj(sS|+8+Q`dmL*o_k$3gDghTe}V0Vpf` zuEs$X&Lrt}&HOU_k5cS`%<-d7)xoj`Ld{52tLGGHEE7R2B^5U-XwyLE-!mK}8^?ce z-=nFXofmKe(g_W6KSuP7dK?5xEB3WfXk5R%vxRNM@^DSH6XnO~w?ri^xepsAs|S$M z1B?Z(D2EtQqLP7#*Adxu>zh39jVjP<(4qfP`YX^bVdk|16xWk)wS68l?qltoYa07@ z~q3Ld)JG=8h0dqnS4_XP{P^YqCR%EX1p zz`|@QdItZ~?fCv}fXM68(>KRl?oF;mbe$8uX0HO#)qoWAK#uGhGG}m)ar37?TsQdd zneWV2@g8)rWpB`mmGK-6hyGAbQ**w()6P7R`}Br{wuIjzrzyv<7Jiq$rT{dWMcP(E z;7MSYCRq;fUE)A)f#Rf=QlSrOE$@*+0~1))JIBdr?o&b3(X~4hT&A@~NR~ZXeRM1< zpj;}g?gv?xO~d_(NK%_9c({<*+U2 z9P4t|AJt+iPZw;~FK2CZ3-(>Np%mR_vx$_}ZCM%&N<253! z5(MsDftV5kY63(OS%9`3<*+#2h3wu%t|iJwcM5jmapw@ zTf$w566Y{hOUfziMPtty;be&{=l8fYS?B;A#$K?Uz_o5$6-v!E17scYLpawx70GGAM8apU(c3+@e9dLIFhsX6_sA>JK&%A8Aq`!MgX2g+D~+aeWba zuisZQ<(NV5H5WK!(Fo|Zs*9)5zTqSs6LgdY8wVDtm{S$Lt8tgv%mHqII7!$tzcaN8mQiicHuJjP(l0j;!|1syP%IpH|Caf;)`V|HoQns^Md;W!_e%fD0xcXqW%EnF|odbHMlxVMvM?ApO%9A_hw#$vFm zOTOlqBK#=m&DU-f&l0Xhx^H}P+RU8NUa~}OE9A1S1Y{!csa2jMTx<_L?hvledC)@! zJxp1O^^)>r&{#x_Yz*!*>aKylNOWn5Jq}_C0XUf;{N0ZX78Qb>rVF_M!= zM;11;1L~qPiMPMMMem&fjRqyU4HlX@HT@_W(wfs7o$13*+EUrM9bn-a&QnATsTW0c z{@k!{>S(>}sa4puX@o?((aT}61q6x{m+;gh*dxPPj|~TyR_vJ{2yNML;bs7_s7Ap9 ztVJf zp33P_=S}mI% z@>S(PSO0)1e~!?G$;k%oBwnY16k)JB{nGdgJ0&osBp(JWjv#<{Y5kUJWv9fWmE5P# zoE8AuRNG4;4L;LPZI@=|Zi;=#s7wc~p>*iwO8`c_|KJrF}u$k4m*neQF$lzD_gWf;XqBunE<+vA1JW z{zTKN6RA$;SzSAerkaC#r&jm&q$1LV0lv|^mBtEgYWETVHq|(;D$ru!@mxe8>|C8Y z#njSZyXje}wUl;@6FR~k7K*uGgy0WIOi_<#G1wcIm#}4mOc<&PP$2x6c^h~x&ihHg z#{dnWMEFSxMJTy|_+$SQJsQyNch249c80!>+J5$RE10_bQM--@TL4{s|Z*) z4!ei0=|kVeRUU`Mq`Z@7rijh-WkW`hEGw3))QL0vmL63NC^ zeo_N1WBnha>$Vo!OfN?PGi8$LSL6cW+ROQLRvxE*RWpGTXfA$QGJ2xk?bwB1+Nlui zrl&p~mR-OgX9~S^v4aXcK1CD1y(QD}f**WQ7nfadal7ryMo*NZU-Glgvh4(95a~8v z#m&flhXHvVz3G03zG9zweDQfZrZfg#sLzDyi;0gP)w==q`k~^IdlV{5?@FK4uG(q@ zU3JeojVo#=g93dXr;$*New&7XOj;5)%UH+zplculRHcQ}@iV8NX$l-EAe-MS>d?Pl zp^$9fd7ubY@Dqpo8;}{pw+v;qZ+N?)lo`4`b3OauN+2O1NMGgANRUNpU0ZUjFVyiY_L*=VY4~3UG)?bx|+B=xF0+cw`R6gHiulhW$A0b*}>Gmpa z7NkI>pIDsfVW^i9<|TUALXqiK#*cS=b$g86ub9>FJjn<4#CyN6@gYz(b|Jh zdj(QR5P68Yoe+*MD{yNYwAn^MWqzyY<^i(eZRuM`+*4gW0}Fe& z&;EoJ{#eu4H;>EUhI{sU%5m69!Yn#&k2M{LnPUV4G@*kbBZ_7+Cn^3S-1yvibn!+- zz-i)S&wg$=ONSa;^y6XokM!XrUs7lePeJr%FBa^4x2 z_UT#I>VS37hF&1xy^(;#39G8_+*pfTw#|xEZt3c+ zqqXy;siIS)ccE>|=5<0{;#4zsCKbQ9-*P;nye4Kd2%>s$fNy#jbSo}It`aLIy%MxY z8UU(bHLz|OP@)^DtMt3xiDY1^3v*}B@C!k*{@txEg zz0X(Mr4R7AtK%9MH9aK~+W>-@8zN3&?6gle;nGI`vvh``TD30Xl7ekqOg5TMjYVP& zpu8%Pf;SluRsqTGs3$S@-nR%PEu;8h=Am;D#JAotD9N<}1nq?S;459l0aYf&`@yge zaRdfh0=@fyzX$6!DSP!E&rujM!K#6~VS9G1wJJ;{*odgH@3QQMY#AVru;TLK{h2M= z&bDLy;W-6Uw~-P8K5xg<%AuK9H!7ndn!#YbFz(uESA|mM57NWI23DEw4I2qM1d4haP-t~Nq`jMFIz?RRd@gnQtRe#yIv-6nYVa{n@--Oo!jBE^=3B)eG%}Zzumm~!vMVZ!L|!b=Y$`@ zKe`B@c?OAaShnwIysy8$ZQVyw)w)Nk#nd>VCPG*pv~g;IvJ`h{pdVgbCP}KeYsTNJ zZ+t(=A^mRo5G#c)6kA`e>ic_qHqVzjdxP>reQgWW3N&z2m%`PA7zV$?++gScvUC)0 z5Je+_4TJO{asN;*(LMy6tk(>9$V4$;St%M)`VVv;(SROfKx|gt?f`1((I0F_Zd+zJ z=rycAq(iZ|#=sz98N1qwqQns6+Dl$qAHC^KqI|^g>f<*&PbN4la<+1Yb83{N_J-v} zAT;R{S*2|{MhWHhI}>uMCUZ#t8!+F~!Ib6&R$K-1dHDlMXaybUF%G02q^IjFFO`>H=Wl6ZWM~!6Xt&`BwHf;PZtF1x`owZ4Q=-I`Gq(Ex%ApW>rHT^SLgBBZ&(}HKKlfsz6 z!Q1^!rfzuRNb3t+619)Xy0+A4HEAw++J4Bl zM|QmlXj?36O__oCi+m?y zaCp+!iwV{katfsLN__e&kkWY!3~&XFHD+Gxb0XvWL$h=s$sm|YJ`ugn!DB+9hkXNg z(u|X|;8~Ryx@R(`ArS!uA(>cG=~7IZdxcRVbMy@dtbI061ZqGlycTLcq$KL`tWyou zflEkX>%KZvEl~G<+Y_?{SNeSIqUon{mEbsgbY~96@DN|qzTEmU>h%ib3v1alL~%G& z{w?jOTQ%yIz)J!IR)=-*cWK#s=x-BK?zX!Q2UX%8R-*=qbY8~@YkWf-Tp(BJu3Yr? z7RFa{W!o}^7YbUREBV3S^cS9gxKoWkV?`EVmlxIVZs=)bBLEj?EwTB?;J-i9AAi)blctWTNJe@e1 z%=>^PT$E!O2Z-#w$MtoJtLEu?z0gYI7|~3qSY<)1u?E$?uM< z3C5^3Kv+Wb3=s|}FQWw%;?%^8qao*}m{_>%bO~H#A=yW>Pj`wnF~6;yXl2(y0>L=S zxm#0WR%8~GNm_b+lPF+1N<%t}P-HVt@5Co@dk-VXM6*1i-|7zP%~P6qyP~_9Yk4oP z`6}j>IY-_>G7aL%gqOX4`do$-H7w4S>ACQkuaT^3{atxK64bElJcfAx{zP_JA7$Wn z_6i$G63!yamjU_jVQ0;_*Mzh}ml{f9@1TBVlK=`Mi+O^yb$y??w9;fIpC;nSl7`E` zd&@Q>clA9bQM#mM5qJs;tOOM1>$u+(p%#*uH%-V)RK9|bU0CX0=jkI(W1GyzpJhd; zaX}vL56p#QihUpuRLfVv^EpM+ZoQCSRzu}(yHj2bq>9BtL+UzWNs0<77#)dvz%oXLKW00fDB6B94vnmpBkE|z65ES3q#lK3ix zJy#Df_FxBzaS=|=-q*Jwr?Q;CPMY?Nz29EBru}9lERwhR@S{jAlUYc!2C89#MW-G$ zMk@;+m&A^ZDmbq(pP8fscZKt@%~NDPkE|y4o44PS?wfR&_#Ii?XDEquSUUs|q)vIo zo?bq)d+bR6w$3g9m{^d{1p)D4V{pZBjVBs@8nF^)ND0bFU6G5tsXd^$@w2c;P?w7B z2LXH1hzD$xqB%DQg=fTtV6ho;E6OPe-}q39T53J)^IxKid3)r#E%nL0HGkU@idp!w5=#7)jyXSB>4nJg98J%l>01lI%dxoH4LhwCi4L4X45PnVXfeZ z&K*F5|4szi_a$C=Fku>s(>zjjG(dzPKUl-SQ)pmd`{hE@{~VInvIr-?!BPMCw=n9u_X6*3fH1X zUa+^E#^&N8O;}C5ItU_T?3J*%Xa=p{BalW|Mr}KJ=I>$p@HYVaK2uO+FI-Bm7dFtz zD9)(-@b=*A&p^hn64;;f`s|-=POkU?WxKPUWDE}pLvm6dLTqI_i5|mW4!G?0h%!jf z14VPw;kflLHa*qyV>rN_7EZ3!)BYD{Pql%RqOr4C+CyPIdT88r6cEk&JK`;di*1HX z3jQeE^>20aF>dEUfCsh)pK&6b(|)_kunTMwl2pb1hfn>fAJL~#8@cret2WL$z}YYf z0A{v&io|u?{q*xe^YZi3zy;01HOQk=;>F|K*0#G24|0qY%Y=&57kI&*@iexf_K%eo`>t!m;9O>~}rBZc zk`0m+^|X@~pTxiw+e)M_onkUo``4rO#Ojw0bGN8-@*zDy89B=OT_>F{yNvSoUzhv7 z)Uw+F3Sym&Ke!CJJf-(YEt-77m8Utj1LSyUB&6ha zO!%PKcbBg>((0`&<43Nk>nCuH!MOLs*|NkuB)+1)!()5-Nq=OHMv!%FNNg>PtraK+ zc`-V`)e%-iDapF35SXT7Np#i`6{bV%pf|0OS~3GmP{(63!03H(K{7q(biU-&s@=wL zI)~j`ZzL!}gT}G`z2(PCr|80%Wx$dB=xbLkq^vZ@Mu9lAt>|6{Dg-h%?J_|{pmX+%ZUZ^ zr}QH6yah?w47GXEtniNra{4p7D4UIyc0Atb81=O{e^!ehjU8^3Nk7K?&&GOX(%3cm z8?=($Ytc2>h=Ibec&PrTS3okWfnDfm_`Wil`{)K@O`ddR+Gn?iCV{vjIlr8W_h~s$ zQyn64e6$m-)m)0U$On{_O`8Q17L_Qahi)1rV+8lFjDwJ!SsjeB;W1;T{=PLkot)r4 zI32)9fQ&ODc^cX=jd55iNIRY;tzgH*K^tFzGM<2pR5vae(96z-yE+w>crK=J~GBSKhOw*amQdHeZDl1NH*hY0i8^KYQh?w6Sh2rb1&n zvViJXwVZL-Swz#_fq15z{)PMJkAq?Oaj>|caTmnS1@S1|G zncSy>AZ>mFBj3~QHY@3%&)lIAQXps3x-y|_(5itXh8rWc#3tp*j+I;3y$F^dHu)VqLo&qoax>-~Zvdw9%X z(fGml-1I}WwLqbtI#0`x4*2tn`m@=Ww zp;D-Y+n{g`o&~p!idoQW~Sba~q)_%t`?rg@qQ z!uJlScUp#oT+v9Y=!5mZ+;I7$PF6=T$7_JjPVbcNaSjeKPN0D*KoiebBxjHATCASy z-?#QDvj3{Y$T4a$F#hbpo%q5}o)29_2qBEYEa9A*coVKYB6nas)1p8aaJqh3qhXZ(K~TP_DOv7iqW!5vhfLz>u9MgRzQc4Hrn(); zqH=9Tv;-^WO#O_NDGdx2=Oc9I69)?q-qEDbdD43=iK_XE)YdN;=VUuqV9c53xMD$zuWDYz>9@g@dE0dOW^i7 z9ctuSi)ig_t78y^O>xm5NL2_P^z<$9heRNN`(&Gf6 zD7YUqW_ocbxKm5p)FH_~^#cqo|E+M7{B3diTY-sGkui641|21huz+OS$yb+=cwbLv6Wi2{%sV@`%n3^_VZV(^x&reY^AB(mbW*vWQSTjtaHHaV*1(%6>i|M7R^;p$ZaH zp5gH@VMCF76$w=NIxo1xYVX`U=c*Zhm?Qxtu`MCD3=N+*z6=C;zhVVW_DpQ#1QTgL zb3d$nWh%rQ3{bM4jC}||(4DFwhHE!0=+i<>9A1wgPz^?Z>|gXz(jmXnSkN0-B>E4K z+d$)x9U0`x$-<8s#6MPjpf^t>6?`>41$Z}Ngx9A~SSXHx+(++sI^bZ7=nQ6uKE;0Nb%4gbP7!1&$TWJ>VaIB%*d^IM@334%N9 zop00qX>J3@F($AXeCED-5H-d`EtUaCfXH4~ILIC^$^a)?Xx1B_8iVsr`LH^i)zTD! z>V zT^^~mMSt0W_Wa4^alL)uz?LKmH*lJ4hSrk!xX8B>wv~k}fUFwU+8BH- zMB#cW2Yw`Yl$*@@Qn?C50Sd1G0fh?Up*Wx6-YBeg?gj^MfKy|fWv`mJ>bNU}H=7PV zuQ!a=>2!AgAT%;2cUVXYIu{5WtwOP6a0jVK zHqpR`qXcbt5^oa&)hyK@9i~-=rwP0XH}8-PCn(1Smz*q(lv^kf9Z)NEBr=7HWNUC^W)S z%o&XtIU-9H`3go5Fkb{RdN&$k8lhMcXr45(Dx=rxhsqkA$-_hW$Vj5{R#*p!i!W;e zNF@vO=o{#|;|os@Z@p&ZSbyKOUH6EjIz(bZ(U+W_#_6MSDo|HioS*?^vfa6N8>m;+ zU^KwIe?x#UGtlpW@OShNKSFuBybBYeqdGJk(5nbv_bI%YEL_W zGN`h_j?{)6WRS@WPYq?VfVdpg%A1*&fr~VtgTT$0K20o#sp_f9NP%8+XUN=rEM5*a z4{bJ9e;Tv2g)c0i8$1x7cESnHc z#<7x>b*zJoLvJFPAu}ADtVl*i$I2liN!go-%;IfCD6&WRyiT9n?fdx`zJ5MGT<5yD zJYSFJ<9`1hnL9KEju&{>wG2ltX6dBZZt9KD@7LEG=YP>^`BLblM?4X+x?5E!f@t`) zpVS>9MG@Aar_omo?UfL`CoCjmRw#Sx#AYUV53|I43P$PcEWd3vv{Za#G_>rV;9a_+ zXSmLyv_yaL!BL}npUqMJ4xx7-RxH*fx$$@-#Fe;f{f5CU&#b#CD4;B4FF=8TPVmB_ zLGZ%eAz!x&ke+Y1TnTUnAcP&-%p&sSheIwj&>C*u*-|EA*b!>zj)_wJvc1Q<99f1s z4LGFgQv63pxwd;=eQ=z-=&AWM9BRyD|5E|GDU&QmbDd>Y+J9lFV}V5`BW1nDZp2bS zUw=9!TY|QUSScLHRgjh*@cg^~-%TcmqrUpJnlkfVl0+_ZbM5lb14tkAsvBrUb5hp{ zQg9h-3bz?0iZs-Y-{srsFB`>p&Yvb^pi z2)_gMS`uT4<-Q4~xHevJOU5Ft;|Vg6Ol7#0qdinu#vOPHuSh@~u2hfmYDYHhA+UNj z9w=8yTV`g<*Ht%y1`4z5^G*1ZmOAtnEd~C}UDybEk8-^ga%(b8Tw&F7&*H*bDzL zN{lO4Cngx(w-z072xE6w>o70Y53gVn8E%+*k~u?*#PXytzJt2RB-b%|UirFSYj3f= zjHN80%*=oCRy4E9Xmv$ z$3lXKwC|>S^Ek&P)S_G11ttNHx0ykfcAYMm9X%ET=v#m0aMttp_|9VCOAIZqia^c6 zE=U{0O1@{9>l$vyDjP5r$clDB&$-XSO8A|~QG0|V++C8^&9YajsLx#2nEFjaC3Ca< zh)^bNF|DW5Sb?%Ehd1#b994jassWQn`HMWomOVf(pd@KcEcacv3PUA|j%+wnNat{{ zfJ|DG%eVAUXBItRFD#*vJY_W-4PEJnWy}OPs_KdmYk5?c%uO5KS0Vr%Ped@pxX9eJ z{1>$i<9kiPmOpvUH}dSMhz?1$49gWo0qWn6jwk;tYwGE%-28JM%p|fmsnsQhl57#vYErof!IG+0dgzHr(bsFg(4f6(UiZ=pwX}9H4_iIwBNhS^7;> zGX;o-72UBHPkjzFFHy1Py$a>K5zByfLT+5~Iv0CM9I##w34g?|A&<=omu@ku)++Eo z#Zryci_xMVlGvdQ-y~g88;rpScg**7Y8J};M!T3;Z5|sRBx4{PKI921CJ(L&2x#7= zchFFD#WO6Tk8PN=S9mASmn7a|+xcC5snoyEki5qubXBS#u05zh1j^A{1x(h~9Zj;0qZ9r~uO>H(5=qi19;UFX z+rjj+2kz~l@k(FGIDw6_YY&?Ilq|H~7+R?kyJ6tyQMPY5EW1JOvnRVVg~c51PtBZs zfdudR78um#y&TaJ^>cWz$+{J&Z0Rml5V#DI|4{Hg*4cf=>n3ZzIcDiDR`tw@ zF`v@3^92Ly=A;`eBwNX}lS*q>DSvgU?oit==U>6FLe0k`5B`!Sl;wDHke#bUAyjg`GqH;{cDOOXraOx}Pg4`vFz1ObT|# zO1qPI1PS8rw~gc!NIk-(^`1X-?P5pw+t_Z^GnC&8*~&r@`JXzKme*S5;hQS-Ro|2` z`vk2Ji=X3LEfLS)ONTOnS)I~nA1_ew#IDk?U_nyXMXu&%ERB{nj@blyJUHGNyKdOS z{q+PA)d54z=vp`(KwBY6;N16BdzoHnRZlyD$8uL$;yn;PNKS;D_0dfmhG*5#Q^JZh?95ZT$GmJC+1xR#7uY+7& zOQ%!ji+Sr?=EzV^ti4%kB)-u_vs~rBW!!G^e-f`e3Ih0a*(yi8j>GsY$eH~TvbZ|) z3n=ph&pJs(#c_TF(TJ3{qCuu~_m7xfLm^jH%haW@4<|KS2)G7VpwwHXzOP43PG&ep zsOy*4+iOsrM1$>oS_$P%YX^xcs*1;F6osq+UL?{9k>M%pL5*#In5t_4q`1jnyudw? z7$u2cQg~siMNV-hxA zx#m@K)T(o7pnmIF*-YEaE_l#zfl6rR}3EgA|3%m|%-{pm$7x7IZbU z4c@_>9`7McRSc%bfQ2Jn`FQ*DM32bpwG+;8`{lqZ89|LM8Auo>Jjee#m*0oXg0Pn< zt;qh8(h5acMeh&3QFY*ah9Z!v!NKa<^~DrpY2RSv<|RaN7 z=3*~9`*0o?kYK%=(_jn31!NO&IRHEVSWy$bR7hcFknj>uX4I|xUJ$^=s1sz`2In-45+zQ<~OkFv#b>9j|_c#?WUPq=JfL=jqnLf$8eg2JPcD%UeE<{f!Ue$Hpef zRc5aP`#;gX1DIm4@e6e3$h51a$t~C6O-FoTvjzK{?4D(6BZFz**0ilBc#YD`F1B!f z|9`Rr06%bjEcrfJ!9Z@SuJE+GNnIM-1Ls*B$jDc=pRsO7cx{@e^N`DcjxABSH9qML z2Kyqc!tv5Vx`g}lz1o~-J6#e+%~R-3b*U))i2P=BSaW1co4r0&zuJ#jd|OA~^$hn} zA&|yx;4mvfJ2r2q2@a-`;*-9E6mZvc5}Q032S+2>9X3c6_5C-gogHH8Bu`=^zBxc3 zo@a-<4$w`Ydft4z{*n4DZi^t;(*z_$l7iNMT-0FZMxhH>)|lA1THkHR`QE$W4?g>o zjx;<15`h;zbsW~A*8C-qlW2Myv$FibrAOFmOyVCOAe(wuU6^JmTypX^TwbmIz2ttK zbypzWnsB~JkCi3M?yZRtDG02IN*G*NKc&|vIe9U^bi2hPB@!=xXGlJYBW+)kTqP`D zU7pc7e=hFhM1h&9Q!L(R4@G3oFB|-2)TyG*3b$B0x5^6;TLuEy>BMX$6!d;|o&Cmu^p#Gd8p8zF~qNF{6jPT3O^ogZp@y*mU2x!{3gp=uO7BEI$PO z@^|G*4u9!qKGDaczG)~|ZloIHcxNQ$tXF+eR!+2F80O$yQ1~o^uNlIn0=+p)A3UJ2 zM3XM0bHZo$?csbv_VV~$z=`8x7K_h8j~jht-n~jZIOH`u$i3`QFYbeUpuXJx`~w~N zNw4(~wj~eJNh zjATsw&qLU@$DF25%FagSQYsyQ$uTSATG~D1p14~*fDjf%H@wfnRmH~bPCw|OW)&JP z&n5MW?(wLiITJgKWV2pT3RYLexBKS3R4Q(IOOeMvl&D@^Wy(?1=Lvovm$rlXg74(k zPTjnHFekus4f1Bpj{HdG5+es4rqH4Yg~WQIwm|Bs-%n<-5CSh#Eo0jL9truH34XjZ za`~?J%*>lt;;s!d%Uwu^bj8D`vbf^Vq9!ZTsh@ndO$X@Of`@JZxM!DZ5n%`Rk-K#M2P!MQ?ycrOz4 zCTEj!>V&P_DpK34ycwc{th_!~9ukulBscV1OI976D02%aaX`5BIbM10CSGE(?!)m< z14?vy>Z<+v#T%}6=#U!-cRU@5w&~xJ6qD!6+Oy^a+IXjfBCt7ppuPq+J6~~ebltFr zkAkcN6~V?XrGy$y(f)-r5A}^)yoZC@)^a`NNK@iYTlkmf(WGm!>*`L|0!pjnX-$@; zsanc$>Nl`rC5`@V4e3h#7ehCazPIibKcl6DPD4i#IMUWSy%&ADap(qu{!PYRRyziNO%r>pu#f4of(6;ZtHJX=O5A@7PpORB~m!Z@h!ty;^s#<0d3A(|Ko0S8bcGbx1l}H7M zxLO%E*UoW1DdTtS=WxTUTik4FR<5%zEBHg1AtJk_6&wYGvv4j6fWvsq{5+#qB`Au1 z+ea4B^pDKl;CLrp^4LmW1)}l~8PMSXj-VgAZ-&$jvl8Qw8Fc3{nx!oN&jpk zB}s_>5Pm_fPg>6IAPWVn}t%_*8{fZxKj`7`y_ko z564X;$#~;)*30)Bh=A12pStRPa3$$c)+QVASnO+v@DOuW&2;Hc%iLVxS_tPUKZq2M0Ym8nlAg zP&oABB$(-{KvpWS4P+n3?02k_F~K{do?{AMobD7t={pw0!oLH6J?CF)c^oKltyUT5 zzWQNsWa&E4tmxkn1cU7@JI144clQNJ6=#9M`GScr#ZalfQ6tOT3}7} z)f{#J`W4w8Kzk?7x&!vL#Nf1qCG2}?Hb!!IM6FO=q0vg^L3OnVcYbzf%yy8TrNjAd z@aOXzm4!dZf!R)@!^iQINOW+U;<|e<4Iaa6{I_6;NR!?Mk*0zb7y+w*B(AZVe#x2| zzb+qDZ3AO(8Tb_PhXmAXnwF~$QWtn&b_&)|MDIz>%;PI(^R!-eX`-D`IlD;_%$(}UrR$3m8>6b+q-JT$`+X>lct(>Yxy0A}utUXsCmStkNYrwMEusv9 z*E|}jdeiB;m5Onb;{;M^_FxacY+F|WNpO9|6mWNcHt zDtHe!7LfAdwwqLpg1F$ikZb9C&ZxUFd~Nv*j~!#(;xX5}nwfJ1vZ*ZT-L~2-qZ>-s z?o!yW2PaB{=70iaoi?9==7`-xYr_os6VwyK+lzSHB5R<+gBt+XHyYVu#@$>YN^kt-lkw_eIEs@ zNU+J0O(=0fZEbMM!oPwy8r~rG>K9;U{Rgql^~_y6(ssqGmCssu)+q5J2d1IPASlH` z_)jb1s0-(Z)&WZ6nuSM-#R^}x9ig_ID>o>5h*9W&1QT1YG3!RK2PuZ z**4J@;Al6?eNc{UcakXOQJL$PAo7SX3=L=iaX4%lf zr5Aw}aTwK1Fdl!cw6Zml;Ek0Bukpeu`!j|Eax+1}L+)!8D5ffV_KsZn`pcb%AAS2<^x&KbCl$>$AsU9BaB>YYM7h!zO(rL1 zf}I4pVH5%BW`M?7`;MAo{NCLnjwRg`(%S@O5V7k=Yt@(}>)KQ4y<8R3yu&dgS~F^! zV2>jcDo>Stb?ipas?|&;^zjANs%T?G^p}9MXd1_&EV;pj?x)qDaUq0_Gj5nE+j2%- zZo&WNdc*#?n9+62fst8<(#Df@lwn5e!6Y*2>QMj03jaD14?#;LuODSZQ4t(&S5dO( z_1Fadl%ea3<__qx$c&hA@M;tQ#?<9#s)#q(O$f>v6q0(t>iT`l`?r*iwqn}1y^ zAyS$L!@3f0XKTxPNRB{@+DfFT9&a;uqU&u+Q2Wjf7uN1+XZts^znI=fx253?`6I_> z6s5^+4Y&@0qlNFrh0})WMxHS|+3|j}1|OmHLoNL+YknwF=|u@h%y-mHf0e3k@ERI+ z$!Rl083jH~8wAQxy)YACSta&Nc#&nX9AsJS+_fovvMja)cwkKy*W}5vSSIix?C*@9 zf@E2&DUijMct3bfmc;`9Y&Yp)--D-QS!_wDnxv`1^#QUhRvpM<&6S+rp~#C4wt7POY9N%VI^zvea3-1q4(i=Zt`; zfMgJmoZjIV=Q=b04ezcs_m1z)LZN$~I(6#o+V$1m-`*9esji5RLxY2chK3JOlGjE< zLx%wW#jjuk61u`cdo(m*Yq){|+}YR0-pLw`MNsa?Cl&!dJ6BIQi=aGS$*^|e`8V-nn>&~t)dmDRe*pD^>d;)^p`~utpqIdZDSp;SHM9+Wm^YDp?8vST* zX>09r(V?2_U3(`dOBR9K!aRIHS8V$BE-+UgPvE2a9pD!~A0QT#1wH{6M1+2P^!@q4 z!yD+DUjXQv9cZCw4Rv${dOE)g_{R^3ZrgiU+qn7y!arL5c)Yi@ho`-(%f)B~c=&nv zfwwq+5o@@m?GLeuqHtB|RB=EqR;sHi8N)d@?}G^M8VJ7pefhxL7({ z|F}~Vcsp+3+2{S)U#P^&(?M3=i%-N{+rUFtT-6e84^#cy-hTG!?5pTu>1L0rCHodfCIQJuiCu(Gc$H z>IAoU`)eW8)y2gcdNDs2FJkH8aXu-3*uaIz#?|TK?Jfjvz>EKAaq+-&fezHt>E}3p zJo8+tZx4gp{b(yD{7Y*kYkOO}pHBuR@y8v`mOmR`2t4g90UP<{S-;N84?X_WriZI5 z(BChU_Uq-Jjhubutewu4{Wp39%;x|8-oI$W<1a>jG3@_Vcffp}PpP-1lh=hFe+WF` zem@oK;p*iA`(yQ;FBKm;!xRR->#Z+{4w;TF%wU)dP^Y zxViw%faUeaGps$})<4bdhse$H-`?Vn7yFM@`ELqUw03p2hI{w{L;u;Ms1T3vk6wQo zu-H$5&%fD&pn&*~Ms~m0f*`-(5259S4ch*t`}2YSR}>4hxtQkv_!Z7!?{BQ(;@SVT zDLB{he=-FCzB>J!02Tp35%KdM;5J()OV9K7JDv9=~W`HcEGzrXIq#C|}^Z>0MR5d7_RFYq^*!!LBPf&Vju&V{-B_R9ZT z(D^Nte_uKoE>K^9?>9gmfD-vn1G?YB*A(Ov{w?)? z;S&G$_Ae+V`djM%zYtCT7WV(QevbeU!~e0e|C#+B{{L4Z-M@8weh=;cKNIWzjpy@w zX#dZmT@fdM9+tIn1@aLBeE-I&inx27^TvN%;P(83Na_p*`Ooc3K;W+(EB>E#BLB>e)w!$lKW1Nmqsa&J@%8(c zh5h#|>`%7H-@?ZJjI{knZIJ*;29&{idH>7C{+l)?&iA*B)^A~Be@0FJqihVoc|IFA zcMs2h8QFi&$OQh5HWm0uN&ZuBmj9CsJix5+**d!b2Lk@(?*Hn1{r%@ZcgOyYPyH<{ z?81foA942qPL0pr&cP8lIq)wN`+KwcRr2qc*x&MB|3oGxC6n$bfNS#ctxFXA}7+z)t^H|G19AFwI~nS+_o$%OCoXR9QnHtg>So}HbX zEKK|OEc810?fPX(EZkhs&zzW;-stt;?d{Hx$U2zK(zfX!k;0mOIz5L?7Q2cL@yq*F0$AO%Y{ijOf0np4;;;;$uMcCNJt zF4+UEhv3z@K#vxxWPD19j?kJ(AuQDpAuK$kecgl>&^sS1(5P)rX3{zJkFKyggr-;7 zbehSiNP$MsttV?DYUnx)YUrV`R2T0gU=%Tt7}y>Be*NBQ!0qt`!7>7Bq7t3Jz+2_f zL+4U%+SRK8w=3y1GdwOxqq7Fa0nG`P@ld_~e7XR*J&)ZYUUjGkApnenU#poxoR#o{ z%Mft;ATYxJz1L{gl-FyZbfG6&U!rdZlM^{MS9R zx+qNC-mK!9@5}CvR0Il7+N3#Gy{9lP-Q0$2ebSWKs+n}@LP#DiuD+)cadHg0+$lu)ug@a$+tLe6HwI=QEDJ7WW8 z3=BroUW_c>e|N&R8fYPQv=?;dv*&H(`#CH^8CE~;fF-&8xR1={Nu?nT9oFee(<$fC z#@XqHQ~o2pPIbux*ySEerPmR2J)$$|YgJu56Uj}-)}gaR!-WE$yu6mMN6VAcrTSb0 zx6@+!9_gDs4p?(ESK%$pWxj{sk*E%4m)ISLR_CLPIMRYn4ZIBh{S0`f<`a9^ z{deY5r4Z|TxV#PV0f4f42*8U^zH0PaM7|CKQOvp2uc5eKe;=Ii-|iXv#BHp_kAufa z^kUEM(=f+~f1~I}-*@=grta^_U)QkRy9#M#7&Cyzu2!5KR`lF=YIM;>1dF0Qa4Ruukzi3we}f@1txvS+pvUQvuHKSC)TX$pY0Aj0KuzT_EVJp^%U(0@ z+&;4F6u@TAPWP%aygwBABu`2xl{aj4Qa>7)@=q<}EV59!RX$PTTJikOxBTm4A2aZL zI$mB5_&%UGF&ih9*&}(h`nvA1nGEug(7t+E?Z>;XN$d@HS+U&M+we*x6~;0!nv$Tm zA=L%zVe7m2qEqqCmG3Fk$S0Jrw04qH$)&1;b;8*7^`n#b=En-Im%hjrsAr_U zKG~gI-{e%a(UY8I*=G7p*|t*KI?aEy z3MNYwg;(-hpPXCJ1H@wMjK931(04C+6`|v5siW$c?Pqwp@VTJWVbF7{&Zv%(SAWb=ubawb!muaK0eGk{r=SD5qfMoKjnJD4Es~{L0RRr zie)3KF5kUrpA5vYJnrZ>k$mQzOLSPNo;||JMy;%91>AB#n=cVXlEw70GOa!z{carf zogMeB4yy3>=$QxXd~AU(l7rl7%q_#nv6%=)@j~0gURqIOI2|01n4joo*h=+ON}V0_ z2};7b0|D)bmn0t9Om3XZw5HdtV1T@9Q51L)Qg9_okP~&?^_lRP$q+ux zZ2L#uw~@QMldgSkAqMaPg^VVH2@=&Zo)7*9_f&5oJk0K`36Gf`uDJ$DxY1qhP+%Z? zt_tDjQ$csuJ$QGAUgvok7~9kh9flE+iGi&{uf4(WYDCZ2D+l*c!UVj|Db1y>=xBKD zaP*a1-JLrG99NroD_clNpAElNNz*776bTwQ$)2qUI&l>J-kjoL4xf7;ihytEShDZY z;;K0ZO3m<%w1IbS!dIJ4CYxS)H}88UwpgmMElJ5zY)-a!89cwl3KG^qRsm`FED3alus`?sv^OLqKPf7NPhboXnQ1+Axsx zf&1CU@^QI`=Ni4E6_%n@H-}W2S`{190C_t*ki?{u(#?az4HaAKo(*JX8;Wls4+{@i z%#PUgSmhs<-kuSBqQ>xrT;IeUymy6rl}(V9_u%nC&{oF{MRmm*;^qzAG$Ep-s;Dh( z`mDRlMF~R*lYdc ze>6D=rebIFM5d4nco27Bu`rC~9g|=;-@EapcG=h@ceCYmnJR0g!CN<%3v*eyN{EDR zf4;}HK&mdrXnb$&1+J?i?rrgu0##s>#U|;h7w5bThwAt&ulSaBLdBAEDX0*zse##~Wp|I$9m=glOWz;Ub>S_bM%e=Qf5rqI&l%97NcdhDTHLyNyCDva;7w$gF(1dg0ls>^Kn1gOT z!>4mcf48AOC^G4kNaxm!o=r3b$N{VU=Pjs zxy-8qZ)zxYOO#~M-p@xEBwxDa4E{{t{v=Rx2R~`Cy>52Pf&xXyB9GVOtw-MR@i%8<1k;Cn23q8=K`*ibJG;%Lwuw(Q`M zJ)wx_UE^1;{W0!CM$~7(3!^>aO58qr6elXKH^{)~HybNzv#)+wV)fiD$$x4noYrOh zB?8_=)xEbfAYw*eu=Q-QGe5@1{<;YGBVcGQY98%YNn2Y7fKFdI<;IFQn6w@5P%fqR zB?ieHn0onH+W+xbpJ^}snqh4f1v-a#r>n@)zSgXYE`|*4gJ<`J9tjs0fM7OU#9c8v z?KEN(^Ok+H0lO1VN$G@BA(;)=oEu~M6AUsBHihu{SO|H$0aUHkr91f?U7UQ|kkVAh z88>P1VParu!~>Zs7NsgUL6&6QRH#xa_ROx=fWpn=Z|_3yq4d#{&}d8-*+@<8w1rvO z8RElNMfYn;Ap@087@C+W_gQPpa$`axguV-Jzd+5(kxCWqP|y)dtn$?&*;%PU#`i&Q z1ssiR#qV^7sxIvgvzvRa0`{6(>FPIOV@0!quoO)rJ75SYLK9)eJIP4v2-Q*b7z%7*Wo*1 z{SVXzeDm&P*D$byTjk&PVpij-Xv2vd>${og$v_H<)gWP3b@|L;Uu3D^$Dp$lV>-;@ zy4aeTPMWLKm>AbuQe#4LvyufqT$_xoWQeYtGlkbGC{ia5!z<TXhAEd|77()`Fses8qOR9Uocz{M4MQY?tEY63|B@;kl;S!B9`$0~ zFjCx3bPBm$G`%KM@p1_h6sd1eqYb*G=$BMV=68CqKx^)vXpTs!09!YA$%XhQg+<5C z%sW+au=W}LY8Z-!Bt*_kM=3rdyKre<7E$^vmF`wp~Ve-{4Zb*(lxq2KNjIo75* z<*{3%+oMQGz71;_i5(tXzq^7Koji^4QwsQEWdYtue6J?gi1hQ|+YeLom* zFMsuwW9phJrm9q&ybg^%o$X_5RGzNZc^8lYodQ+rNwJ43Wwn_Odd8TVCI$$xFAo<- zNZzSJB5zQ8oJ5AOklN1{=DtsKs$|JSKss6YHDd&KB5!1lf6?77v1|RRq{3AxKObiQ zNeO-K-sXEsQ^VN;X04VN=+v^$=I*h&^?OdiL2vIZFN;=#jB7yb*Q0|A+ha5kcdg=R z{pAfSOi@B^T%B?^(Fq#{5&T(m|BAqeh+?H>2q>fNyVs7fg zeK~2|8fP}6s1zKa}6XoUu%_7TxL#d8!^1@go0g0 zfu1(AEDk8r_k8oCoe!wBANSLLROj}cp17PVrX;ow0XPLNA~XKmSTj$Hp2@deruTQ7 z^Lido8>(9v7|zNCc@>px9w-jYBGzMX;fXB{y0P{scxEyWk~l>*mlMqc?unEQ#tYyL zJ2;@yzqgd1JQc2&Tgc2i07ReN({fr)1we*a!hZy#dL} z6o9>NZl@;8R6&(I>VU9@6Uxm^tG@PpNImvuy9}Af{3Csv2cO=`jBU{9y(#0lc5>to z;B5N4Qvv{BzJosk;h#&DBVg2olAT0X`U;^+9Xot1Z-Y|%x zDS0TTcP|x`KYNQq-PJ2JtMMV?gSR9Nc?spq)A?j`$u#Ghi7EE_`?*0pHLF-j@@d!g z=q8NNrE_wzgSY&J{Ytj>XR?`}%=rq!wTds zR@{N=GFbd7ItWVy;2!Eq($C|knuD)t^^tTTTE^s0icM&)k_rOx%~MQqSH~c}n24&hLN7?{y;N6Jg zO|&|y0s*C6G^8I@!|n%1>gGIJ#LVY{G?x$d4?M5UxZ|~brsCsy){HSBi_0w(t8I;@ zg7wt=B?TheznR1p!|bNmOG0hMy8FSE4wDnC425A16R)C9&pJ6PVE+B?{X4{>g2!$} zi61_P*I|dtcr?dzIV^5T>D}&ccRxNk=R81!P=lDuTlO55UYm?A%*LOqIx*=5P3~Ih z^$ugfuH4OD4|sfi@nIJce#X^m9(YR+?%EN>SN7gV8c=IV+=f2_MYxkhel%)NG4~jerBm1EVs5 z6NpTP9_%-f2I8?<(S721Gx>Nz7Xvvs&8y5#m&>LE1BMw3Iw`Q)SD0^J_QTO%{? z3F}1o97{Mt>}4+Fv=m%%$nWc8TQD`0wwg64<0iYQCnEcLRQT~nc!0cAEA7BDyLR@V zX&QVyWDyP?5mHwVR`^CE13V&=7}dE^O1PkQ)^Q_CtR#_8k93{L-xm{bz`NIPxY`8X zP-oQqKK7#3J6ETfeUAdeeDNs$b}C1ROEB^_BG3h_^i(|Gw)&p!l;WMewKQunbgMBfi9zs+g`;} zuMroljs$;7??{2=ub?8;5ACPMU=tM1{wX@kB(ZFxdQJ^a}>i)Px;*eOa)g9YF- zskW#-X#6!a(2H-&Oy>H*crwN7dk1Y)9K89JLhh7>l~m$L7R~ISC#hj-8fRi7kZtE^>0p@?c4z3os;tMLKOC(vQ?1oCW=ojn7&8A~H!?LQ08uz$q)JifV&!ZcWt9(sdsF02-c@)!@D1G3992$mX zY0&(;DqchE+u~f+&;YKiV*$Q3VSU5UqUjZ)7TK8vdRsQBRAT##{K&<5$98S->5VQ4 zL&Tz^_&YqompkiKHuVmMR!(yG^BU;Z)LhUmj?O+0bwd=}juy)I>k2ctb5LDKP7!V$ z$)$2rq3zgD=#%QJwtn1xh6#R8zB=Jg7-pkp2@Bg>U7794i0oy)%Bj40?R)vKk==43j6!v~D8<#3%g-2Fl=S zwq}LWM~`v3Sex~&wK{QA85pb zzC`ny6+^Gw*L_mFoiWO>-N%?c2%0mQ+)23QIF7tbTOnsm(z$c+_|Q4 zjf1$s01jF#Z&~C5H`SoG89l6=O;DKEp}blafeIbmJSUS1R3CrINg&l9B&;i0vvL#` zQMz42MB@>al}Eu8DEUb#w4kK2gEj4?(uaWY#tDFJv1s0Ud+bEj0`G3>8atD5CJNSz5@!B;wMy> zciJXX@8^4`mzUNP1do43iKPZq#NpYasVwJXC#5FG8zK|RSl=Uujg01?w0F>6ZTCvp z*00w&&W(6woh+AB^zziNR;_lKpH@XjUB_)0KW2Q^xff%~UjTLjS8;Ddah4k#GRVc& z@epl4xrC56q8Fh)ZPR(5o-MZr ziZ#5ftHt+Zr*)0l}ox*HitC{4Pv`#i{v-`pA2naGZ~{-LX~O*5<`sIPJAMg|<| z_~~WcoDS_Mv$epR9e~TRjkxB~uC%oOsKP&AQ<0ksD$@}ojM^_;YA3?xky8sEWSC$C z6~#+$E#}5~Pp4`@VzAUxh1j7QFcVXdFuoGIMytD`u44Km^|spM_lQb1YFyjeZmr?X zm$L}Z_!jFzrNk7TTA3;tB|R_UC9By5FJPan<5pGVuFPK!xqLmv`Pm!n@|9@{2KU6e zqxJe~!Co>6J-6oIdz*rQVXwRhxv~1*O9+`N1tlCd147kgo48xMZivsh zslj9C1d{Xff!kr6s@myoCs2b;_c2o+aXNQA`jH2SbJ~FRw#DQJsujLr?#mR5?R*_# zi@v~C{tAn_ba(@yCa;z&{{!YrFE_~@Mul6c9fsioifNd??A@J_eMG?F;PR(Zw{SZ z)ORjHv2ML)zwA9m6`K^Nok3_1Xy9dDE&|*+Lg&w}6OwXyzAxz1lXA%}9dL)WeW(OA zDp~Q7+;UsM^mP`lHgvSIe3tTid-Vnk@O=%xkHe@nUF+9sRv$7Ws3hn#Zf>@`WlT*m zbfQlJJi-NoWnaJ&ZG8!-K*mqvTQ#amOL}Om(%~9XC*LW`OJ@|W`+s}GV?veiV2gdU z%Kum@ zA-tJm>e0bs8gDQ4n8h$rGke|JF!x3~XKyJyIaRqK%pE^r*j5GU*m9Y${WDbth7!W^ zZMciXbbbzqN7w7cVhIa77(<-Z&5BD=ikD!2v9KsE=RNz=^e+^*gs^H0Iw8&)!;0Z9 zR^dEi$%aVu_fSUmeh?BTyUsv=NIT$JH@-WLeg5+YERg$?%WMD; z?ZP=6+gL-mw2)D7u4M`b8lOjUO+sQF%+lX!U%@5jj|ZFc2ew4r;*(S7C~YLuyU z$6^tb=Kk(Az2FtqMJin71}YAXU-|yOw zanrs5&HZSt)(8K(W1Q#15q((4TwCl3B_b#Q!#!5`0YYm34dIk}%t4;>Dv(hKE0#P2 zCJur!tk-=_Qm!w=O_Mk*E8zOV(TvBhtUqD=DgeK^N6L914|R6?C*x5fOJ=pSW`|u*WC~ zPeBJ#U<0=bWUK7FjZY&)ZfbCG`ioRL%?J6NZ1X@4DsRp(VaO+u(`?8oaxGW2n!?EE z&)UYQuT194 zSc7hV;H`JK&n@Lnwxuntc>mrf76!;<56WLd@*r=Uq<^^W*!Rhzrmn_ZO3voQu~X21 z8226vc)#w5H@;yvJ6WZ%H;0*5+#SMs_Z8Wa!}OZ;ibfbH5XsfS+-jA`{#`HGQ`akG zvHX*${v2QTrkae-G3Y8h0S9snGDPX;K__m7bHx->#<^0X3_nQD`8UtYFfMGGTKY#n zoY|fsA0das%o(Nn6}UiGokAQF3nUA~5*N(bJm{^Z=k77IRX^h2&AHbX`b_nn8ZD_5 zMCyKHYpM{y?RM1YP1!MaIFsWScFD_*aM|d@gUlH9U;~ZZMs}T1v~_C=?1akraJHwN z8iVGjl*{yOU%5T#{jH&X))ZQgUGst}79Wy79^=PO63eZ=rdj3P4 z(_C{)wv&G0DCujTaT{X>xrKah-1Hfc&mjSYH0Q=iF8dEHbIlJnFdn5uLM5-B)9H=i{SF*v4M#6TSe7PrruV+ z9*H4@(9$0_h!U-_@q89P1CpaONP3!i*8x)l?xrwTpO^ZGX|X-k89scdfRfS9LBp>{ zuxrH6rzmIz3yr=sL|#R~>;`XhF$4;@%OqP)eSx6f%M3SI_@B&ee!7E@7~oq;$r|50 z5sEHmbQd2W9;1h(-Zq6XcATvPPEz(5KLv8JeZPJ*vY|Zyhco?-%|M%(&h&BC!H~jf zr3<4PT}36RghsM{;IpQ>HGOi6O2})&W5X7vZ|{!@UD0z?NV|PZNZzE{rrH-oUfJ-H zfmB;DIV}$tL4oWzv7!g7wlFVsC=7xv<1iD;mX!h~A zLt20QxwPw+75V}Di?lU4QWcV9TAIDWm4}oVljcuyTMvttt&aLas$gS~^e#nHMJBvT z_Ka1qVV=&FR1sEc2EFS@8plF5LLQlhH;MsS&dMPq8EMpxm=6^3)- z@hY{BjG^~69+}x^LE^V))Z(W(G-*H*_d!oBQ79$Q{seJ1{0>QD6kZJJ&Ox;K@fSE^ zR?Q$GFge3rIQ=tqHLU`jJ55^_uPgf36%|uA67e(rro$1XWik6f5T(f;P{MP+v!{*0 zF!Z*XA=2ZjG}0iE>-mh^JA6kILn#95(KsTL7I2bUldK+;v_H>X@V2-ESm2(~*L5Ar zCnM!EsD0X_P=c-#ih@O;^3tQqMUP@vpS>fP0357g!VfGa@6QWt zrqAinZbiLNJGAjT*XusY8#5(Mur0Quo(?{Pwo=Ja*jy>!e?oF>Nd|9NDoC3G;T!9c zy(ZI!3oD7>b;Ogi%sSBndtU46Jdp6+&`V5m-b!jNA0@QB89jpga{k%T)M|B~q!#loGrzkWlW_nZwg1G}Rk(N$4htIxYJw!5g9TRQZl!pQ z8a{QzWON*?n-qRVJUNXByYwV`ya4!OsCmon>;2B4qMmvsbWlS+5I|B20M46<(b#(^vwJsLyR2#@`10)S68wJT+ z5Wt8Ew1)epRgc#5nw>NXwRnNrTL5PCGsmonXAgP$6UYE3dFr*jUWpAc%|Ez1HpeV4 zd8yJG|L2=EPpF`#fWui&trfaIVM{l$7m*(hqz4|9BnL)?SS%_)<4e&y$gbRxN#YkN z?F6b!1SbKlPqz>>5ptlrvf8-4vh)om7XpeF+&sp>3cTDxC;qAk{v??_a{W}vrG3Cr z0E@?r+0O%x*~TX}7wznOR|CxR0a{!!J}I1l%iM4N zQ4C9LH;rrEQo);tgKGDaWc>XXQ*IT|Vp0W&b-vOr{VGzopujL6)J#&#IThBQz#W+O z;k9;dZ3VN-t?pCIHjd~Uuo0oF+T3DSUPYi9nhnoxwjb{2^9FRNk%Yf(4O{1KwGvg@ zB|>^YN@Fa{30ReZ5;JDXw1iusOY4WTys6m6k0Q#+=}WP>`1Ec(jC)*~9*LFHilJJ` zCEPaG*Q1<61XKZ$O;`?bw!zHKS592l{{7?2H(!Lb-E6p&6mq_J)moIwo%Z5 zA5U)tF2FCn^<}g8+zsR?)_tB2OS{MWX@7q6lK1fBbg#*0XA>x3>wdOHrK~iNaM-Sr z`jNCw>jt&!oKLH(+?e6sz0kQU(gHK@t#65uCjqpozwglY0YEWl%y&#)_qifzAOQ4R zeUG$jLzPC8`oycOvLCW`*ReMdLrd+|sW7w*Q_UZ1K<)di&v!Y+QVkj|a1J8{lhi=M zSuUd{*QBJ_aB$kP)zfB?`43Tu>{E2*W#-h*%XD4K%!ivYqTlm?z2)mhznAdIYndu$ zr2?Vletxf}F=^)AYidaoy3`5_>__G!XWP1kSCov#?dw`oZvxbAevHT`y1G5qK6@w< zJ-8KK3$+}&E$W@#sfzB*B_y|@uLe~O(baEzV3FuSm#bYc6>)BCPMB`&43S|0=6%_( z%BfZ=ON;HKA0wYeLS>t2Mm?XSZwQp(A+bB`o_>>*zJuAEl&s$FF?_%3>i%=|`y!p! zEqh+wm{amYMb0x<#y*k=6g{26zR4C_R5JFM6&dNYj%*1H$ z9DPtSy;?)a`0Ub!@rEVtV$5@EDl`EFf5s(qjExfVUq$ zHY9XT2uBD#k*D)Y2JoQXP?_0UlV$%)(~j}(KA9iqm{)9$i=IQKaGW)nqy&KWur~xDh~s8W4Qxp z;eGF&lR}NDyk_Q0dHs9N>D7?}(Vc81w$8!1__*gc>X}n6tbVyBQeT$mWX=d#6wE;* zK8Ol@+)wgNZZI}IL~GF) zh-;U!Qzm1O1VsYhz9&9Zez1l7X2hHbxE3Kyswx(x*gk>|5hDSZyd9a&PS(Sl7Tyd3`Ws~{jC34D0 ziwknvX2$2FuA#t+0`VW&eQUu;w+yE)&|<-o3`A$24a)W`2u4948b1uQgM2d>NMLAX z2Up3_gE4e!NTlW77R)opKNVU|f_`}Bwr!0e{XB8MV6j8xW#r*Q#IRz`$9PI2uk7d} z4$NwqsXHi@0eHTIjA0*ihDwBajhTv0dUSD51Eq$l zQb!YgRrF{3Z4&^oG%Iq6S*S^VhCqgU_lV4~dXWm=!ek?62}Gn_HRD#%W=riK!JHKh zRhYF|sn3|w9+?wZ`>lU?Q_>L zT`E9RNj?U4^{(^KxHg2MIVQ}4cGT8PV>dNBx)l+4UYAwj1taCA@p~LLcIlgTmxaOo zO1x@25;GjcW*w3I7_s;2#lDd{h&wWSBKsOo)?D{AVrcXqAmVOrJ){lXq&tL`UU$|{6WFL*;dwe+ zIHFkhG4X~*?k zeZYC_6d*)5zyN9ny)SgPUVP|!gI5RQMdM2?LM#5CJPh zPY&n<;X@_QOV47z4xP!NQ$iiP{gXqg2*e&6G}A2sd;4k=m2f!`ouQdBrt7Nbg%oheKGgA?kU0Qc8736~)m5Qgwik-3+z} zOB}T-b@&!TO}b-$&8vkJ3M4voSL{$Qd7Wsw#P8Y7sw{#Lr?A^CMG+#LE-c-{E)AQl zVewoTwj*a(T)x!?9o0gMW(fnoVJ=LSQK#XBBzf)69FEquYPSK7{k<=Z!bUV8=5L8O z5dRkjU%l2}EvWm5+~-Nk2Wlej>3l_X$x7pOOc={kP~(gnSlzF#6$ zC$Uezx}LTk+#to`xGlQ=u5L0!?@EZjDQ6bI z+2k^Siysi2226(mGWPX6_as9p3*n$T@Wnj}VLpapl?R09n(!K{d_&Cu)w!%LGP5R` zmx~RA8WD|;B)e z{XjUt^$J`fOFixka*cOFN8*vp0A*^u$iY0K<4&#{9HrM(^jU_AwUc~1#iLnfy7fE);JQ6Vl zHEYYMTavP+f0$DNkKAqx=YoW1}eDTu0m)B$K1-{-%%~b){`2C|2+l8achr z{SZFC&rchy6EEL+%wm==Lwso)ti`jim1t)od`UWR<}G(ULD0=UsmtImPx@$945YOQ z99IkjkYoH1!19h;)qGL}=o{$4Ou5>Sd z+ch3LX|@BD1sj1?!h80!ZQ7JOPnbA0IbON)lgSL$QpxJcP6VF<`zP6LcYzm=}5pbQ@Ux??)zNUYN;$Rzp>T*NU2EDNmaR@?at^wf@ zmwlVZ*nn)w;EvR`UYfbSHbaN_oHa)sWExLK`>sUe4#bZ=US2Wh_CYjQh?lM!gh|GE zA9g+Jpy_d}wGsbG)k0LWztqlKpa50dbPYv6`m}l++00gujw9iIMp8>KiN{4t=g<9t_wz-UYBdk z1XwC*s~YH)5k>aeMJ&)vzVzVbpi}WXGJ{Qh{-RP?$i;_Qc8>xT?gFfBFbD;rB@bAT zm?`4AwJS3g2D{F5fNeaY*+rv1K}9awOGS?Yl}ocfX~AGxCUh4)NxDosb5*FzM7ERR zag!}Rk+`{}xnZ(YP?>dK!|I{DB8{t=B0huobvlS2T?xn2vj#tVAV)Q(8j=^JI-&_l znCBTAf4~AUklHQUt3ARu{G2|+Fo6N0PHf@Dk65nCqf^|DtGJ(MPP}amo%k9s&Q{wE zWGJHoF^fB+F~#oj3$hlyxPIav10jhC>DLeBz)-Wh{ai(5a8I*cPT)PV1wEbZTMR^b z5CaLc(Y{=~41Gea+VDX8h6_xIl>&JRN(ovwzzjXgmHgtm90#ER$!VBv1}OWaO*r4@ zzth8t>S59|MS80WNUiG#70l_6=1e$07XErSimR3>nlosvyYoB?;G!pjh3xJ;KRmSp z2P}>9c z^IYmEemq&VUbdgF#m|x-Omg{CLy&ob1TsChv+uc`9(Dhh3pFJVIzP$^1EnYgt@CrOB82tn)6r=HO#yPGP{a92 zCb#$aPn~Fxeo`GdI2n7yu%i(HDaZ_xEOLu8tQhrxKkWcGu+ko;wynd(1`so53-Os! zKEy9e(AdX5IR@WWb=X(=B&3&nb{u76FBktkE_sDxJCTfTf;E{8DsxyjTN}-(KjOeE z6?8pG7ut7i>=H5&S_gIXn(P#9XcwfR$7l7$I8GBbz;hlv09 zxpcSVjkvJc4WQWYcFq{tEBp>WS(LW&yV83xi!TA5t(d!=!!ePOVHeAxTC#P@^P^F$ z;TDzWbvOuzC~f2sdX=hZXrAm6hZ2Rb6Fp8#VvBiI;YzXC3l0@}#z-$#%k7d+`tVQ% zO_sZ{tKEep`Aj;*Y)4m=Tx7iYl3wSXOb(XM?9xhszwl1j1jP7Bo>tp=_T1Vb4l<6s zVR)%U;1)hI>W0x}Bw1g|hnEVhQb2X(6f8b#*(j+rl)kooZgEl3x1#EPF_+SrIG_4W z7cdFC6q!N?Ls77$A<97MEB6imlay-~L;3FGv*8TyR7c6mvdS@)C(^7<;INc%I?`=- zkPeqplZzmBJ751x;EYB0hI?+tG0C)(ssLI)5lGI|rSWOnyUv6m4XM}Inn(J)TAIDM!w`Oig0bI`QFOn?z$F zKLid4b$+A0rb{O}0ZX)p$1GU^oTuM-hbNgAjCv)BT?fZ@6I%bl2Ew6~9|9vLi$;@4 zP8(s08Kd(W)*8Y(yJMnWQN=f_y3am}O-hkPz2@(LlhoMS-EVcZ66Kc!2S`KF3@moA zo}rjpFex2<(DA0z8!XCe>~vT28om#z*q)ynf$wOo&@R#20UXY%&{YU}>vo^ih6(@p zT`z+ho^I-`j~)=2opOYO69u=}I-662sBZzM@g@ML`;&=vxT#{R2aub4ANgTigyCe% z(C_`>y5(2`n^cU9z%?BkEn1NAvubTd!_j#PG@{03;C!lw`rzr^K?;}bO(u6`)=uF^ zTDuQ+H3l!Sm9(;-Z1{fWBj)c0TkY^k8jR?wpQum127MqoN+YaBlzu}(Xx0KETA9o0 z%bFu7kRNzz35ljcgIT)rfkU2zqLo7nEt+qD06ZPQL}QntYh!dn8KXuI89#k(YP3PhQMt3Zi^2bz)p=KH6w8hNxM{O{>u_z1} zh6`v8GPl22VNw}xbQ-6+?KvqDFJt>yYM~5Q57HDBkMSpzLnpofY-NKd-8>faO1Pm! z`dH;+c352q`?nbMydbs3_UN=n;6<_a!-t|+a_Ii@ZNo=6_N$H-@lI68q9x@u~ zpYsW3>l#8^2MSdadw|o7`HB2qGKN^M>r9=vxvV|zxAtz`Hj^{}p(Rp(tpf|VOUv01 zJ}QQk`9H#aQ-Nout-hM4u6ioaEYR^zC4Ktx!RwC0hvCBt|EHNVe}}q#`?!6VB73$B zA=`v#(lF>YlgPd=G00wo5=vRK4931MS+b-?lADOEGi2Xo$=0BhJwxv2`rO~+dA|R` z<44E*aPgUA=DgnL`}IP)$qZP~Uj599dI1u-GeRSiaN;FCH&Lz>#s%unpx@Fx%Z^*8 zN|k5kwy5uS*0VtR&u)pO{BfnCNyv)Lyai8pxH)HP=uv&cJO8*DS`hT}p8#MsP+;+6 zEG~rX5sL$C(ohn|M*yi&R&^9fKm>`_!oUC#4q`hM54=lQ!#fdZ}W+dVH5 zh=Lx9((|5eFW>oPXE#V+bzloIaWvb%gqBm-Q~SIF?OZW(J=qaX9#({Otb->1Gw-1n zKUgy1w?{w0QxzC|^rI3S0Pl69#nF6QOo%SF6N)W)8#cyzNTay2+XcO#ap{ z-FMQiZH_LP2-;^!m<5JPk7Kz_-~Fm+H1OuvU-hh&P2k1|L&Vvrb;@*zz?)9Z8z%NF z9mcLz+DR;-KQ+2CKTJmrJGbz?iQ4Y6PK1v;*o2K*2MLIJ{M0DHj_s(R1KEfutCWEL z8Ez@?r^zLu<>JPumVRV^t;)kg6rEz+FzcxmnV8dqxZ zZIZ8$)a>z7I@N*olj-kLVP2a^W5LqZ2FsV7G#AI8#S;v2=ZUQJRld%B-%8n~w3Tox%&RuXj<;|6n^Tgh)EFHsC(21i zt*W}A1r&9AGecs#=P*3%d@5A>Pw#w(TUW{PkOX>-Q!X%M6F4Tiz(AowPb~hcn%+c6 z%46V+Cv&}{P?YT7g9j%s;)#MYZtKev&j@mAQKT^%X`UO?ekzA`t+=7a^(+AxBNMSq zt}k8ZGBBUAmS%Go;J#v z?PcAskySlvhnok@@={o_N#$K-_Lm0vnNjCRGs^1k6j@M~o?io!751$D?Npl>!mQbo zJ!3v-8CsmIUJ%jXJU!$QQ}-#FtfFI2EvfTPY@J2q#3I${sb%*iHfs6Z&=bnL!=Z%C z?2wq>;t0wauNa01`(km8A@D?*&;0fB3i7(m`s(Y8bWM}TMcc*;Su|+>7xLRhC(m)m z_U0l(hU?;csg39!q`#Lyc14)7o^g?F3YY51+IE5(9ZbuJ`ubx|E<6dnV6rI6dBxUA zjIsqgv~xmJ2(T;pd|_VqH5IL8$|DR?EFX(qRP=9l8ID@urXa@~`{o%1Xmoh)Wlg~B&&>Ditow_9-SoX3KM;x6p)lE?Q@Z_*lT1mht7qmB>QKT z?EMyOm6d?XIMLek)yn?gYt|6)A)cciRQuL^3Xz^zpw${j6qLD0pMOsKb$Et~jVfCs zl4O4BWS>xML_RSQj6wN@CG~}e$qBd(`lo>DitD|e(CkN)MB|FaA@SBZ#kCp*fUum( zgufZJjMQIA-dLn>_jw-ATP$Y1e_gjep>bLuNpxc zZ$NW4?U{E2?6qf&Nw&8>bWoYn7(~M9>P9(`jSrfUmrB}@zsOVOm(Zv9@E{c8ZdUx{-$1~C5Q=_>ymYmH&vXBBqPsA7yqcU7 z%mQ7Yv|RwHIp70T7D4}83%*~NdadyfD_ep}R7*xJX&WBJDhgtwndHGUhT~aDOsKl= z!S;_p|5K+P{Fc2L2LPm3O6sxuWCL$?z;cTbWyS7((B`;Smw|O9a6f;Z2W%chD=qNv zbNl*Lj4!H1fkr|88o*}U0(-=w<5O`UaB95I&qA%x^{HBhRVZjE-a6Eoi8iB15)XZo zENW5160fZCP5c)x7f@BgUB}RB=?jxw*?1MgKriRfvVX3!JAUL$Mv>ugSe?uOBpCRn zfrtg%yYG9MVBhGvcW@$8WVW?$do105U~@Ctn1&8}XL?&k;fJ@OKA1R7~{lWEj`+JWl@Q>Q}a`=!U;cIc$)k=(Q>tVp(3RZ|GgFOEVO}5yq5lh&@J2# z4>279aAIB_h+Iyk7I8~Tzj5wl4C|0{Ip=Tt z<8vdWHqbrkI~D%saCQB($JD=N;E>#g*8ss%4PLJ(uT3+zCjL>NYacu?Ry=$-q=-?L zM_fJ$t7f%cz5Jh-p*qymbT=jWA)!F_%3~29*+gREIf#wwebN>xvC? zo9YtaFcC1%7~kP*;J7CFpAALs11!C%G%muox7^Z_lN>(iS`NYjLr=Wl78(6pWeCoV z%M}!|@>9bhg#8CmTt-<=1>sN!yY|^rGtrU!*ZpA-MsZHn2wg)EsE|pdV%D@t(~{SyzR&{hU02hF7)x>+HlpOd zaSO$nt0Z5b)7@S`>_NG2jrcd@M)liTpw8(;#g4hE)qqH2ZVGpGb8<~dg3P?MOpr%G zIWaMU9p$+uACULU0%pqRZkP`H)|HVgFN_-!s3J&loMg~ZZ5r!VpXz#pj(FalO_v=$ z%q0Y((+7$Ztw!60;$Np4M~&8--56n=mCm+x8~N0TVR`I@d*ErI@MxKi1+1NK&U1#o zj?;Htj=7kdJ6Tx12$v-9q=Za3JZV0fr)E4ixGJHa8VW(_HyeHrJyU*DLPhL`o#x{8 z-XOD{Pagm!U8SNlHv|(alaSR3u_TQl{)-+`q^h`abm+-Ys#$%F!vgu?gxv!dJ-K(L zrhinSA#wc9(!fL@?0cL-i<)>y7EIuBn_oqV)1fUWsBjI!3Ke|CdKdZr8q3#oHRtoK zDfShWlif=Aa;G5FdSd8f+Idl)r*AQ@DoLC|Yn#!={5n1AY(~&@y+W4w6aFN5fE3j#lkeHN8n4Qc|wZh9;;r)Yw z`v}YX|Z<5q10%4zkgo5-KnSP#NzfEXfikfiOyQkS)XEw^b__qNxmWT&(CRo>tmQU zj~BP>)=w5WwSMUP%KDk>Eg=9($83#m z24-CJ3DLv*TuwvbsZ#$D0W0IYhLfJZt!|*{1VQh!x~o{7E?Q{xMlw=XPe;$+`9kY4 zNrL^H1P9{M@$d>sBCD=VOyjOu{iyB5IF}X9Q-}47WsZ9$VnmmPoG7!2P7;kKhIZ1U z>QxzkaL4m=4y3zJj%M;`@bVWY+UHas54YlvA0x-laX7Juw3|s+s0}5z5@76nz1#X( zmpXq$OkNMY**L|+fmiu;^1ET*AEcd9W{h~M*jL#9km{3)EnZ5Ja4 zd}3Y@Te=TRB3<|`r8D0BS}MUlX47ZwQa|_SPTSm-rIHsvd`B(? ztXt!4h3~@8S^2JZ{#(hE;IvI+h}pAEce=esn__oDmfr*mJ8Y5oMeRX2L%i9&)NfC5 z)l7mJl%8eByp=XrOyF&dAB*iX%WId`kFI0kOI+pjMVAZIC7;y~w}RFt6+eslcMCf? zw1f!al09-AG2JpFl%m@2m%pNidG`^)i0xNKa9 zqC{~h7w|E_VONCg^1uh#_;s#%_wu~#hd5g4@Y^k5rI-?@K4;F`#FANkUaSEQSJ6f3 zN;Z)iC-t8h$;8d?t#)3M+4BX)0^dDCg)>B`UXd_Z^)~@@3H^J=@#CF=`B5eB=3MZ} zJ^QMRde^iEQWj<3_mD-M8eH9B9S~_xZ&toXrBsbD=HPpr1y-?=J}L~cLF7moO{1w% z-4BXU%}7o?evo5BGU#|P#b|pE8{rKqrnDmHguoC zx21eLx#0oZ@rS2!aMeUy!sZL_n-BwwAK}8}VuY&CkB^&2 zu1z2(%XZGxrKv1@D9tK#tgvO9oF;9|UqB4ET0K%_L&yUkltK4o$y2-PfHhi+^(93z zAkZrk2?&oJL0B*q=5M-2g7P+)Ev`cSNjum&s8X67$qEj1KXR8m3mVL)82w!B;-cuM z>2BYgI^PP~A?arX;y?FO%ET8O^+uq;Y(1zmj3CXLLWv2Oo1ieAYxkLhCs_U>7tKXc)&7{TCKJE!^$KD zx>^bPiXNIW-x$+Fs}qgxW(j10rcXqPE$2n?UscYRkHIwRHzO(wf<_;Uf%XAhat?tMCu7=0-18T)~^nAIIpDHIgg9!8ls{A+aU z{eW|0VH<*fL|U?*OW3b)aZd!ubklgtsBS_!a67Jm>(+hjPD#tn%Ezm>c=x+A1>Kbt zme9W!s0H*^SUNNnCGUDoJW9;`@1C`kB!F}faW612rK&)kiyogQLJSM#dA#2`X?0>C! zn*X)tmA(g8NALZ;*H2~>u6WkN*0fUW6EKTaJ&n`8UmR-^qVs4fK#8qkAC;Cx^LHwi zA>c_UQi1C-ubqE#oK#1L5OwKM(j$5domdF>+kB`sEV9d=<%y1TSodu|Z!5E4oG8d+ z*VtkZl4>P$3`BN=c>)|!sdDZ!4V!Z)PF||>eLZvC-d}bbGOTz*0un`1PXgM^4}PO& z4-|7VdVX|Fbv$ym#fu8)(`|V#&IL1Kd}38v`}_!-$NfDVziAx0-`N}gvd(T_g9`Mo@<{F+5Z;rg~MVZin5 z&Rg?5zEaSf!o}HXW`h7@_Kl5$v4YrhH3$rvaXe+%uR0$RI^_AiMw_+Pk-MuHp9 zfuDb<#(gy)Nv=-S~M7supUhL(caF^kms0P351@bSn_HOUj3nt(hqXAxA^WRG~I zKK>W03mg8nLO1AuN6-_Q`QmI{(#&ihG~KG0NYatIxeWw|Dp$c=Z<}OW|Bv!PA=0df zGGWYMPHP|PePl}GgZ!<9{S~rdGoQ^Depa(K+C(IJ{1FF+&bcf{bzqs80vYNQv2iAi z^VK`9+7~|Iw)pF~N6J~;C!AQ=Zcy9%aE>w0>jqB4k`#wNPpympgyHBh3dui@GNWkl zPDZuV+(jgNV9;Rf1Dl&ctL%t*C*Kbez~M=brirM-ZqsYKf+W0e-0s2br{=$@ogL)R zMt*LhM0%ya4gntCxKLkBA~*vTYI_CM+sO_~7slR}1k@_GkPMpC$@Mk+b2*d0-lxVo z=p}#5sj8AY8ojzCj+R$VO1~It8T-VD=EXl)Flgmt8v6A4)AtA3gepM=`j}O1ogic_ z(aynq*sY+$P}?{-C4B%=$UZd%^41E{lrLm><$(;Zi|`qJ$naVT?3yK=Q3GQ4U5!>gsbYZC@CyqW>S zYh|v`9mw!n1PrgT!f$7R-Ib+81{hw=`f*C&90WsPc;!i)@&R^NdSh;2c$K-+4T)+k zAyI8yx0fm;s;vMgG)a5A1c_>8AyI87wmt_E)&BqaGZy}#(p!5oC8%qHr2;>g>jpYC ITDPD550@yY@c;k- literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/README.md b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/README.md index 3e065e714..a5cfd4c8e 100755 --- a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/README.md +++ b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/README.md @@ -1,28 +1,71 @@ # [3016.Minimum Number of Pushes to Type Word II][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 a string `word` containing lowercase English letters. + +Telephone keypads have keys mapped with **distinct** collections of lowercase English letters, which can be used to form words by pushing them. For example, the key `2` is mapped with `["a","b","c"]`, we need to push the key one time to type `"a"`, two times to type `"b"`, and three times to type `"c"`. + +It is allowed to remap the keys numbered `2` to `9` to **distinct** collections of letters. The keys can be remapped to **any** amount of letters, but each letter **must** be mapped to **exactly** one key. You need to find the **minimum** number of times the keys will be pushed to type the string `word`. + +Return the **minimum** number of pushes needed to type `word` after remapping the keys. + +An example mapping of letters to keys on a telephone keypad is given below. Note that `1`, `*`, `#` and `0` do **not** map to any letters. + +![1](./1.png) -**Example 1:** +**Example 1:** + +![2](./2.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: word = "abcde" +Output: 5 +Explanation: The remapped keypad given in the image provides the minimum cost. +"a" -> one push on key 2 +"b" -> one push on key 3 +"c" -> one push on key 4 +"d" -> one push on key 5 +"e" -> one push on key 6 +Total cost is 1 + 1 + 1 + 1 + 1 = 5. +It can be shown that no other mapping can provide a lower cost. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![3](./3.png) -### 思路1 -> ... -Minimum Number of Pushes to Type Word II -```go ``` +Input: word = "xyzxyzxyzxyz" +Output: 12 +Explanation: The remapped keypad given in the image provides the minimum cost. +"x" -> one push on key 2 +"y" -> one push on key 3 +"z" -> one push on key 4 +Total cost is 1 * 4 + 1 * 4 + 1 * 4 = 12 +It can be shown that no other mapping can provide a lower cost. +Note that the key 9 is not mapped to any letter: it is not necessary to map letters to every key, but to map all the letters. +``` + +**Example 3:** +![4](./4.png) + +``` +Input: word = "aabbccddeeffgghhiiiiii" +Output: 24 +Explanation: The remapped keypad given in the image provides the minimum cost. +"a" -> one push on key 2 +"b" -> one push on key 3 +"c" -> one push on key 4 +"d" -> one push on key 5 +"e" -> one push on key 6 +"f" -> one push on key 7 +"g" -> one push on key 8 +"h" -> two pushes on key 9 +"i" -> one push on key 9 +Total cost is 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 1 * 2 + 2 * 2 + 6 * 1 = 24. +It can be shown that no other mapping can provide a lower cost. +``` ## 结语 diff --git a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution.go b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution.go index d115ccf5e..e04cdb409 100644 --- a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution.go +++ b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type char struct { + ch byte + c int +} + +func Solution(word string) int { + chars := [26]int{} + for _, b := range word { + chars[b-'a']++ + } + list := make([]char, 0) + for i := 0; i < 26; i++ { + if chars[i] != 0 { + list = append(list, char{ch: uint8(i) + 'a', c: chars[i]}) + } + } + sort.Slice(list, func(i, j int) bool { + return list[i].c > list[j].c + }) + // 2-9 + cur := 2 + loop := 1 + need := 0 + for _, item := range list { + if cur == 10 { + cur = 2 + loop++ + } + need += item.c * loop + cur++ + } + return need } diff --git a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution_test.go b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution_test.go index 14ff50eb4..266ecc3b6 100644 --- a/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution_test.go +++ b/leetcode/3001-3100/3016.Minimum-Number-of-Pushes-to-Type-Word-II/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcde", 5}, + {"TestCase2", "xyzxyzxyzxyz", 12}, + {"TestCase3", "aabbccddeeffgghhiiiiii", 24}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a7cb7001636dbe5fdaa779edf58d85b9a35a8735 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 7 Aug 2024 09:12:09 +0800 Subject: [PATCH 031/450] Add solution and test-cases for problem 3070 --- .../1.png | Bin 0 -> 30173 bytes .../2.png | Bin 0 -> 63187 bytes .../README.md | 29 +++++++++--------- .../Solution.go | 26 ++++++++++++++-- .../Solution_test.go | 20 ++++++------ 5 files changed, 49 insertions(+), 26 deletions(-) create mode 100644 leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/1.png create mode 100644 leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/2.png diff --git a/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/1.png b/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/1.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc28bda9cb920e3fbab2c556b28a66ccfdbbc52 GIT binary patch literal 30173 zcmeHQ2|U#4|7U4OR)a02HKp=bZE_4@WJx4Nx0}K=Gt6YhOlBMjQK4J4>nN40Y?+ZG zN0GBajzYPwri2`!jL`LezH^k)wo1EO{p@RA`pz@Y_c=b#`}us{pZD{f+5H>V8B7uW zMVOC|Z_4UbD>m`*@dtqGdqO{gzwM#13;FmgqiOmUG?KeLfr#UiRng;I$to-1$yA!G z$_iO!Wi*ANfF+vuFpgw!r?L`K3A~V?XeGfJXHN#Vtz_5Ybcds%9XLb7sjVh@ptf%_ zUG3;h++-lXW)+P)1y`Iil|Xjl&OliKsen|2?pD#4Ray=jhF&Uq+^K^%PG}O2Q+WfJ zjXdZZG6aEZg4J6siA&b#%B$_)LWI3?=p>YM@xXI?+tZlMBWf(Lg%NHADvFb*yRERM=;jZ;J;lZi9}<=sLI z*~tlq;jRa_MYOXs+3nqG_GBV=cHBA?F!6UU#X#Mh?57)39YCrn&`qcE~kJ>+rhIo z22UVj*PwThT_AhX&|8T(-aB1q9L5E}+ZDG7N9Di-fLZsARiQUv&lB~?M6xru*@^4~ zdI9^5-6zhOhT~z9Q$#_(ohp0wAGh~gs~h0RBpl6o2bc=4MIKnW7+2Qd+Rp7QVvs0q z8GZy>G*mcaL32Us@TO^K&|_IhP=||yj}IU6gYUuRgKNYc(8tyYSeyc_AA5B+L5SAH zlbs13WG5P$2+G;3LPI;#xSN^%-i<&aqMg82K||YbWRWhJ?HZsW8kqtX9wWFIW1zyzz0*P1OOUt$%i3>bElx4c*C#}eDan1y&d`#&2prP5D;p1!eLCF0bq?T~q>(>J* zZU7hoDee$Q?t6~+hW7hMm+swlkX2SuTB4+;1mg2M>juiPXdKEO1Ip1vf&&x~F~G0k zfM3vc!xLyYV+tAr_2dSE7AV8hNDy*4F?$UD;)5&7-a6x3QMC{Fh>tDkSbBSlqD>$^ zqMaOoiItT`z-TO;qKUwGPG}lVm+az%rE*~Z_x_33H``0S@tYqXwTj-C_GzlzUHUfe zut|}!(zpTm))955uT76ZYO}q z&dZPxL?HJ&fkZa_1J+=_zPw8u9fAL8RtIq_E~|qs->^F94Ug49*Z(}LR@$eJ|YZbA2FBBO5EXdk+;8 zP<+b*$0p$+N9Vg7FF6v4-=xl}!o$$Fud{N_Wj-#3Pf+r4tE`;8FcvQL*Uat1B%GT; zeLW-`$sN&%2*fQJx$i$$XGN+YHIyNJbfnPr-{`EPk2E?npNh6`)$oyY?_WRH z2<0=F^_Hz>7?V0*#V{bxvefzBGd+1^V>`Oo0q0A+8 zBl6zwOnDtI6vuq5KH(O}>lQ~p>o$t>eIJjwF5!Ukog>Z<3T0p4Bd*G0(8ni;`M8O> zGJ7wKkGy>lQ6JOkAXNVS)9+tA1aTebh!FGzrPr_M5m(OE8Q+>t2wf1({^AfEt^R*0 z>Gf+#2H9@=GqCrGgnUBh8ZQYNeG2fMX|A8`1}8Mvzxhtv7k7(X{eMDp{i5Gp`dn)F z&1h{oFZ+Kk_CAs6O+azHP#k><@V!Z| z)KKarPDD6l-5^oB3- zSku^^dgXmXc*J?smr`KAFGP-+o=-q>ypS9nl_!Yae@FDbc_DVm=tHJ26?DIn^G?oV z4*vk*n~=T6>&v)@N+ZJS1ol4b`%M#2948ccKSMeKir<+6``K>rQ_tEbus8~fY?bye zev6i?;Ewp!-;tq;{VDHvhB+T_ZvbB?0YAJ5JqDoX9LdkeC&gO5V!4UCP50^T#A+As z{N_oz)=QHEPBwL4uMz%3GkS(OHQmr}vYCQ@Oolj2PFynSxbW0%V*Ce#g%_uIxK9#a zyVemyC?<3p?saF_S?w%MahNi%tATMe^{&iMn4`ig>|T1Ox$4tiP{Z4X9zWZ0axi>I zEBsmK%d5-QH#hf)?vqko$~?ZK|0!$e(rnXChYKMJOnI-D;W0y#>wk}Z{n9;TLC`Dm ziS5f#o*rF?)cw{EzgmddJbQ7@_U+qaXYef(3aARy7FejScmH-zXuD~qc9WEF0KVkp zCF6yNQ<0fndnDkJw-!tI2^{=wLv_J?M`LHQlHZ=4`D-Rg_e>$d*A(z4r)coa5nZ(q zp>)b}kuYrfj);qaYpYuCHQ5Qno*g{s#<+~*O+WXi7}(kdJ&V< zV9y>`wB9>|G|ny9sTU@2XFDH>1m`QPLns~H4;q{2`A0IRu`P9o1{M27gYINJ)ov*~ zBCeF5&oWHlN9B$BOr5=f#|IK`f*Kh{VWY?9NX^liAG;8-uXkgGwwfiV;YOfRZiimD z_aHN})b|m}Cshr`hb6%!3s-=NifbFzfr(NnJqjfF$eAHI!z-%BouVd>Ezt z0w>N#QRd_stbSetZhG8!t~6H*6SF(;nZFt=<^f+_9fI#@iiX{ssixE5D+U)5q{A4c zxtSTs8kZePOnUp8e4OCfo{@#SU;Dp)F_@~!c=fV5Z}^ClvzuF*ylqy){Ra=?==5Sk zL&L>#azB|VI#W?Q2N?33FPE)5y%g7WJ3Q^??+faK<*kV=g~yPVJ-ty!nPPq#y029t zy)qk9(T!8pJZM*4q@U-VS=2yuYdRbz(~>D3q_Nvy@6l7o?l$U-n#1bn{Hd%WMYXzp z;xdbOJzQGz(3j}E!NlG^Mq>K(x{?zraZyq87;dj#3?+CRV{R}u#)PSnl5X8vmqB6f zJ}kYg$V1L(Kx|BH3Ra<63e6X6NZnmlJe#XQ}>Dltk-^=aMeIMwe=Q8N!rU;XeON9i3se~ zquju*M-qXx8QD$&YKYpF?)o%qOUn~D2M231IsRNsOx-Z6Q-1DTelwNMBqAQ4FhxqO z##aDFED1#-Z55v+ZkpB#nyZwEw=x}43sdg)ex4LxoiF;^4)?3~W*&sy5`WSp*<{;_ zD9=MbrP7HFF4gtN3(RvBj_3&0wg98iFJ4Ry4xVnbZe8lBQ;6ci!i4+xw_238Q&4V? zH(Rtt>ID!VQGB%U-_*HKjUyEqc&D^I0`S~jyw`~(PYDjmX zo0^$fSzAjnuvNGnF9x@VAu%fly>YCLN-#qiL@3nR6LXv7m}hSFVdS2lyi8d6YV`QH zq%A#OLQf^Y1Z}2Kk1S;Nh6TSI(CzyLPlfr)gdqg=yuGt#X?f5VB4T4>87V0e_SXJjf59N!%S`l-vG3mY>Nrt&8#*zS16s5eLbn`rtV$I z<QY1vYuKH<5K(iH%7~{> zLU_~V-(j_l(pv25IWXj0(?(=_U7?lJ8>?GVs{MI zG0gTnQ(`Fpp&NTUHsHoZuu%u{e1)WCyD`6~Xk2y+0iOL|@clQ6DU$cR_7`rhnAdBt zAgAV!-C|XNLf3!x%_$eS)UsZ?UHy?oQcqAy!foGsF8OKbMtn2E(7KNR@V6m_)3|2V7sE{I}}kHmA~kzXb(F>F4xP--l{PF9yay@ow{zASf<^pg25-GzIx%G75vbWa8NsuLcXQ*Gbnt zX$3+L^`hVk1#NGX-Iy#itdu<%*YiYhUT z&OsG_6{8ykueMR`u1q=G8GQlRSUtq^Aqbqy!vy}-K}8VZjg5_|o z*F*+mu_P?{f*1YS{Tm0(OiZwvu3ZUDO*R&`Fu$^wxJSdSa?Krw^ANe}0VO4CxFb zvb{WwMyu(ny%hK7pD=HNl7CH_$NF&XSpx%w$7F&-LjI&sTAZ6bA6j!N6PvRdi;9XC zYieqGwj4cqa$9G0eA?cn>Tk+{!n<0$D#(!$R=xMbt<0qdKyG#t;8LPU~aIo+IINx;i|iLr&VRU zbeho_jO5hR)KC%7!QlfJFj@%DH+97X^?LK3w3kQgF*lf+;^N}skTc;~l~NMM1slKh!pR64#VF`*B@Laj?RcZ41_&(n)by1*>gl-k9t1c1&W^8XFpjlO|0H z{^JkqufP6kW@F>DfB*gjBSDSpS(Q6mOHTCOMgc<>z-Rx4zjEbDs(atou%#~BN(S5# zl!l5(2ffnOqm&JLDHO*@`mUuO`{KRlrM(X5a48OvfQQCrS?gzQb<2s24OXC=$A;+7j;2#`C^514eaOKZGlBEEkJ-ht*w5K9M_6PzU&hm2 zMTO=Y+jnQE;Hi`XHRW)|-27zSQ%FE1wFk_@xZ5%g@TV&+a*#&>RI-109oV~g-rgm_ z7pM8syq2T@m($AGsDL6?zzB}}kP*CYQ#2A9eyjky8IZ&1bAFg7ruBnxKs#&2f}i=t#rT)<`w3)DTIwUT&qruQ zpikah53Tb3D|7@`_^i`m>X3cm;Ep*zl*>d=_Svkb%>#FcM@-#-DzlCd0C()u=@(jv zh^n4?dX*r!sa|sN|#m`qqhVzc3ZMQ)Nw&XcVZ+#;B1Pzkf2~>mdo&vfHRI@Xi$1+ zBB5m#b>B_lB874UHLbTV=`Ke0P#PZOZ@+l#OUUEjZOQb>U1MAxPK}5xn0!gWXtQ64 zTw+HhM%JtVnXc_*=+WlWH+`+2i)E6qeI=a&^~UiWAmU17Q@8u=p zr%vz+3WB_k8cYm-TtrR;IHS9iql`fGdEkpmZX5^m&3dPQJT(H$>lU!po~KotCQXBz zypY`PCjf%6KGSDz&jZ{AH#j_#RXpRs;z9D@?LczIwT|Z3ae9@-%YK>l;W%lLSy=o8 zxZP9=Q&-ca~LY=e3prVe0()^!p(ZRKeG&n?9E0!QTzP`W8JehMuBX z^R7k4#N-27jXiz(v@0`jlGHNqt3koRbq!ajm?RrB)C$~@qs-ny2BY`P=OVw0H7UBDhM$ zm(R0!S?FQO6bsVO^}Dt}+RdUVTGX1_h71kN`W4Xesk_=QMYLvLUbf)3{6iUcTPdt5u!_HX^6yk-Pt2udq-~eCAVFTa5i)p6ufo-qmDx$D5fcPp@S0F0W^0yB3+CMU67fZdSUH=N*e4`4T;0n7oNfGJY4<0+ z?zt+{MWK{Oq^Bn<^EI~K#-k~=>6L?#;4N`ggxa#SqWmpxnesb4CA#kG1n6ztc+Aw? z+}gO@Z;WEK)CZ`-7F%33k4d9CThrbk1TNlz^9j znd@0T`q7aQpLlwTbd75D{QBb!uoNIQaOQu^-ehn+mOjhvaW?1env(4Gdw?zV0&X$ijkhP0?z++-9#8SHzYhRHwF z`?9E`l8(u;S&2$$6Ow>GjK7Ls+tZV(-rO`}_=Kryg> zw}xnq?X4l}=g)ELmv{PQQ6(8&>hjOK{qC!lwZgZ_T$?N8|Kf$GrbmDK29$}ZsimW% z9OGs?MaU*%ink`AyDo*Pxi53)vwUJ^NvW@v!Fh_%ZswIgLuy|Q+z!Z#L|0pzWn|1` zcNiW$LtRUy7arAEf@85vzlPfzddq(5yf zz0}{|-VIZMb%0%-XQ&cLK{pnK@@ia7?gZWO$w6yk;vzH;fE!*l^dTMu_ z85S)be5A$P32Q-=H)-TJ9UzPAYMX7X(s-e6b=Ta@>*9=AaAH+q@o|uo_Fyu5OMM&h zegYW+POM{LKU1j`qrQ&t#}9D(8~(W1#1ELB8Z6CIrtcA>__*nBJWuN-q6c&`a=D2` zh%DXCEK?W;xo}~ah(qjw*>W4X{ud!U=x*7O_;bGX5+JBe(OO}_Z_XkCd~v8&_z;pqK&mrbM^#6QDnk+yZ%8QxJ>J51u|Khd3ou zr3n++%IOGm-7-WrCSA_df*YRbr64_K`~2oBm-BKpwt{h9H<2K*U3L|2|Alp70tYVz zX0Ps~Ga$m4qT!?SJJteyzQFLT{~j!un3wfrtU|CzXHtLMJN<_VKrzS+M88vM!HXg& z5%&xB$#KCMw!$c_k%G}l!(XxAvwgHP*$~rozfkXev<4j9;cK*tTJ`K@-y8= z%WNwYMjymX%Q~8W@34PSb=&Qg59TcOQ~BZ0t|0{>*vox7i^a>*g0@}=Yu@xzr#fM} znOWxIEzKypjfii~ZD3``lLr*!KajS1Fs_$Ps%;mZIdlMG-5gWQ&A&I}eP*lTy=R8Q z(a6=xfL$|nl%))-42FG%i#9mk@6c$HkWYh;M+B)_1^;K0? z;$&rIgM<9&GqkSHP_#(~>Rx>!CV(|CkT<+^;ogfO=Q_jUJ?ZMgRKaG%>=Qw_A-U?> z%x7A5J$Fs48up0~l%3jKBfI;(mfLau1dDF zf_2lJ9~0hj7|H{gzXxhA?kNw5yYf`>MTO+F75;h#1_7mKwCX)PJn$fNGy5OiLB|;! zK_p(i`kUXL=!?(a=8)<4P3eo8?Tup^$+iQmy1}qb-F>?q7HiMVEtlLflvqfq$@0nw z3JS6WiTB_>Syk1_s(4%Sh|c-D-jeuKj&Ixa`N3@q@?05T=GG;o`X_<(rU~KVjF~TDEKh*~;oi5hJ_MBVdMK6~M+xnOlh5Yy7T8 zo&jQzq!^_rZ` H|TdbD(AIv0h)ktkJ-@VE89O`h}dpaudZfd=KMq=Y;II5~T)n zg*9|s$~$_lGq}}lS9%BTSV23m%Bc&GAm+_Ws)4WK2u&=DoBt!J_h>y}iaKmM#s4vI t)5_R$lm9QL4&ftfXefAU>Y(EJ%mt6n2Vcg6|7|PZYW;O9F6!Ft{(oG+Ck6lj literal 0 HcmV?d00001 diff --git a/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/2.png b/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c8aa61f11bda13edf9bbe5a9b5266af996ff1728 GIT binary patch literal 63187 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⪻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 [!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 a **0-indexed** integer matrix `grid` and an integer `k`. + +Return the **number** of submatrices that contain the top-left element of the `grid`, and have a sum less than or equal to `k`. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[7,6,3],[6,6,1]], k = 18 +Output: 4 +Explanation: There are only 4 submatrices, shown in the image above, that contain the top-left element of grid, and have a sum less than or equal to 18. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Count Submatrices with Top-Left Element and Sum Less Than k -```go ``` - +Input: grid = [[7,2,9],[1,5,0],[2,6,6]], k = 20 +Output: 6 +Explanation: There are only 6 submatrices, shown in the image above, that contain the top-left element of grid, and have a sum less than or equal to 20. +``` ## 结语 diff --git a/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution.go b/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution.go index d115ccf5e..5879e3cd5 100644 --- a/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution.go +++ b/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int, k int) int { + if grid[0][0] > k { + return 0 + } + ans := 1 + for i := 1; i < len(grid[0]); i++ { + grid[0][i] = grid[0][i-1] + grid[0][i] + if grid[0][i] <= k { + ans++ + } + + } + for r := 1; r < len(grid); r++ { + cur := 0 + for c := 0; c < len(grid[0]); c++ { + cur += grid[r][c] + tmp := cur + grid[r-1][c] + if tmp <= k { + ans++ + } + grid[r][c] = tmp + } + } + return ans } diff --git a/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution_test.go b/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution_test.go index 14ff50eb4..e06cc99d1 100644 --- a/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution_test.go +++ b/leetcode/3001-3100/3070.Count-Submatrices-with-Top-Left-Element-and-Sum-Less-Than-k/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{7, 6, 3}, {6, 6, 1}}, 18, 4}, + {"TestCase2", [][]int{{7, 2, 9}, {1, 5, 0}, {2, 6, 6}}, 20, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6e9c7d2c00bf2b31bcdf53c07f9de5225faa4f88 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 8 Aug 2024 09:32:01 +0800 Subject: [PATCH 032/450] Add solution and test-cases for problem 885 --- .../801-900/0885.Spiral-Matrix-III/README.md | 29 ++++++----- .../0885.Spiral-Matrix-III/Solution.go | 49 +++++++++++++++++- .../0885.Spiral-Matrix-III/Solution_test.go | 21 ++++---- .../0885.Spiral-Matrix-III/example_1.png | Bin 0 -> 3594 bytes .../0885.Spiral-Matrix-III/example_2.png | Bin 0 -> 8045 bytes 5 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 leetcode/801-900/0885.Spiral-Matrix-III/example_1.png create mode 100644 leetcode/801-900/0885.Spiral-Matrix-III/example_2.png diff --git a/leetcode/801-900/0885.Spiral-Matrix-III/README.md b/leetcode/801-900/0885.Spiral-Matrix-III/README.md index 7e862a017..9d16009fd 100644 --- a/leetcode/801-900/0885.Spiral-Matrix-III/README.md +++ b/leetcode/801-900/0885.Spiral-Matrix-III/README.md @@ -1,28 +1,29 @@ # [885.Spiral Matrix III][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 start at the cell `(rStart, cStart)` of an `rows x cols` grid facing east. The northwest corner is at the first row and column in the grid, and the southeast corner is at the last row and column. + +You will walk in a clockwise spiral shape to visit every position in this grid. Whenever you move outside the grid's boundary, we continue our walk outside the grid (but may return to the grid boundary later.). Eventually, we reach all `rows * cols` spaces of the grid. + +Return an array of coordinates representing the positions of the grid in the order you visited them. -**Example 1:** +**Example 1:** + +![1](./example_1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: rows = 1, cols = 4, rStart = 0, cStart = 0 +Output: [[0,0],[0,1],[0,2],[0,3]] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./example_2.png) -### 思路1 -> ... -Spiral Matrix III -```go ``` - +Input: rows = 5, cols = 6, rStart = 1, cStart = 4 +Output: [[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3],[0,4],[0,5],[3,5],[3,4],[3,3],[3,2],[2,2],[1,2],[0,2],[4,5],[4,4],[4,3],[4,2],[4,1],[3,1],[2,1],[1,1],[0,1],[4,0],[3,0],[2,0],[1,0],[0,0]] +``` ## 结语 diff --git a/leetcode/801-900/0885.Spiral-Matrix-III/Solution.go b/leetcode/801-900/0885.Spiral-Matrix-III/Solution.go index d115ccf5e..70d387937 100644 --- a/leetcode/801-900/0885.Spiral-Matrix-III/Solution.go +++ b/leetcode/801-900/0885.Spiral-Matrix-III/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(rows int, cols int, rStart int, cStart int) [][]int { + ans := make([][]int, 0) + steps := 1 + first := true + end := rows * cols + for end > 0 { + if rStart >= 0 && rStart < rows && cStart >= 0 && cStart < cols { + ans = append(ans, []int{rStart, cStart}) + end-- + } + //right + if !first { + for s := steps - 1; s > 0 && end > 0; s-- { + rStart-- + if rStart >= 0 && rStart < rows && cStart >= 0 && cStart < cols { + ans = append(ans, []int{rStart, cStart}) + end-- + } + } + } + for s := steps; s > 0 && end > 0; s-- { + cStart++ + if rStart >= 0 && rStart < rows && cStart >= 0 && cStart < cols { + ans = append(ans, []int{rStart, cStart}) + end-- + } + } + for s := steps; s > 0 && end > 0; s-- { + rStart++ + if rStart >= 0 && rStart < rows && cStart >= 0 && cStart < cols { + ans = append(ans, []int{rStart, cStart}) + end-- + } + } + + for s := steps; s > 0 && end > 0; s-- { + cStart-- + if rStart >= 0 && rStart < rows && cStart >= 0 && cStart < cols { + ans = append(ans, []int{rStart, cStart}) + end-- + } + } + cStart-- + steps += 2 + first = false + } + return ans } diff --git a/leetcode/801-900/0885.Spiral-Matrix-III/Solution_test.go b/leetcode/801-900/0885.Spiral-Matrix-III/Solution_test.go index 14ff50eb4..c436faec5 100644 --- a/leetcode/801-900/0885.Spiral-Matrix-III/Solution_test.go +++ b/leetcode/801-900/0885.Spiral-Matrix-III/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + rows, cols, r, c int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 4, 0, 0, [][]int{{0, 0}, {0, 1}, {0, 2}, {0, 3}}}, + {"TestCase2", 5, 6, 1, 4, [][]int{{1, 4}, {1, 5}, {2, 5}, {2, 4}, {2, 3}, {1, 3}, {0, 3}, {0, 4}, {0, 5}, {3, 5}, {3, 4}, {3, 3}, {3, 2}, {2, 2}, {1, 2}, {0, 2}, {4, 5}, {4, 4}, {4, 3}, {4, 2}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.rows, c.cols, c.r, c.c) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.rows, c.cols, c.r, c.c) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0885.Spiral-Matrix-III/example_1.png b/leetcode/801-900/0885.Spiral-Matrix-III/example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b7664fcf55f272304fa3cb3edd37f101dea79ce6 GIT binary patch literal 3594 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 QP5=M^07*qoM6N<$g2;Q>mH+?% literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0885.Spiral-Matrix-III/example_2.png b/leetcode/801-900/0885.Spiral-Matrix-III/example_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6fbd6734d46904c4cb360c689284ad5559a94515 GIT binary patch literal 8045 zcmXY02Q*w=v=+UW7`+c-qGWWUgy`Lj=wb9BMEMiJjGhpT7J|_;dK83r6H|>FNB+@*c&Hi0*is9pTUkC{4WMcJSw~*4%$2%Il&KF2# zMS#?TdVey$!F=9KXVv(uLm#6{e<2uskGC!wB)&H!-Yrg5e{p)XLpyE0)OumQ&TC^XnR#|l=E?Jxi;LES_kRzDTO5Q2elxz5Dw{M~m8n{5K><|s6~&eW+YV{!3`FSfvV95k9W4G z!L3FnM4c01)k=E9RV+y}N6!WKlF?IPJTgCH#|9HoNlwY^_A^=PdM+-z2gBVu38SGbI@=_PBXO@&;;N#36_)<57KZ&@6rz`zU04=4V^R{73=^jghiF_j|NT2Pp>Azt7Xi#M z+$X#Xifg0olwlZd3`{X@vprQZsY43irhWKejRdhOFlHz}U?fCUt5vU(%>dJ9_@3oi zsLvravV@c7u1)yX`?Z9sNgc;Yr_hz!TC=rk@A2d9JnjC#FH^60OnPhM_RC1F{Ks*i z^z@ziwrG>M?95qd9!i0VN!|82L)*?YS#6 z=$|=0zE#yDW{Y%6&Uau#3Tp1_GO$;I)#tRO#$N5!7q1O=ciex~-&;~aDgZH>O+}wD z7_K^@R{e*chkxFO*h={Ui%ITt-(&Zmg(JvR@ANm8SdyGhS)uzPkk)+) zX>+f~%cVleKs(AaBO*B6N#_8*Qg*Cm14T~fqglmxiDcns<(S?9W2pR2e_l*>OW>f5<2k0xBN%CmXWo zTq>|Tgn(+&-=B!+e%@RiUTDynqy@_amUVxAL)I;#C|!^duq7DosO35DiIXmUVwPs1 zTAO{AteT`cJ{g9_oKk}DLp;KwiBbQqPMW^4!AFl)lml8%a?9&FjzLXzFs-Q4QI%Ux z#(M^ziVd@T`UTPU+Y?27qoWpah57k}j6z0VGG#n`zI!%1-2AQ_&fFs$a%tlaTxKU?&P)a!XQP`R?F8ZoQPbDs;=5*c zcGb>hUajlQJ&VFD9 z3EVyq7B+E?u>q25(v;NHh(CxL%E)11`}Tv$2q++d9F0!|P@f+`w|T?p=9^Zt14=OTBH*My^qDY0v@ z`@vp~LpPwuI9KW6fkVK+CL7q+a>8q_&gH*EwGB%f8|vfMB!B1i6X)%CGvbJyz{&yO zNv5nPJF}?enAhZFmQd1J{a_aKtmnhn(Owy44AT0*Dsz&LW4_9^eTAcFt`$K7Fs_4P zwddOXz18~iVdU+q4p$-|P;^v4p>m7+ z@c~l~+WOZ0P;dtta(dPb@!#U&Wz`Z-c?)SFXeBD<)xKl6)WRx;sbRR|?Q}v3s)FOb z)srjBl`2QSSA~Mh+q~-t$Y?oz1UM%MDIW@rBkHo=jE{JnN15Wdnvt7SrGFeL2#!B# zP}f?DU^=>r_eT#F+Q&-#!40^Xd!+9UQ$HFvD32Rm-_jC=ygpr2F;$Y9BghRrc(@?m zROAPy4Hain^xIP%{cGJY#bwZNV$T|`N}i`v5}+%_flMNQgJrmkQ=ViG@2OU;1t4pe z>F3tx)N8mf(mX2B_U^Q5&#W-K+cT9}2Z*l;qGyg!jA;5Ty@GSp(YR3i-4Ow!0Y?{) zoK|vB0#6V}ty_*`v?@WkD&+oS-rIYjH-9$;TaJpeR&L2IbAwpq$Imqs&u;Z;xxVK3 zk1|o>tg}1-;NvbT@Xx2$P5HHsPlC3>Q$%@Z;(WfoOnSMYu}0G=b;Ffa${U4Pg!k^O zz8yq~-!3+}UQ3R&us(EM#QbeP`1!PS@lr``J10esdoB0OOf71&sG-weY`2Hf$^VZ& z7&lcbHLw{vpk_3Fk>od`U&H+6h@Hy>tRGy$3ne13_-zqwf%jfuHXcx#u<8o`>VJ;s^{^Du@8)2Jws-&)H z7Uif^(D}D3Bp~DnoC;q~*yNo+6doTIJAH>(`~efIZIc(n`P*j$)=x5%(Mbzeda&k% zVDI!Z6ELX4<`rCBdc!OVgzvUybDD~&u2p;Kqj0XKlWQsM6YRjm1bfD$(?=YK|Ml!s zJwt=2&lmQ7N6P^#pZdiU2WE+o+fkFy)^!PAPG6R`IJZGj>ji?Ti)UOLy0W7nX&~nB z^weQqr!Uuwk<4gFOF`9gt%s?FMagqt>F#@um2mayc_NShf)1C)T-FXX+nRr9$)7sD zJk(&n`u>*jV*zAU6-4zh=ztm<@>092@LN6MHCIpn5<%bJrpn*Uq<)LleKf?A5b+y( zCB#qXl`tcN!=U4ympQ3=gAk6=zDVWQ86n_kN7 zy11xXUz9Q#J09bzVG%PM!bJ$s1WB+Ex1UD#7Vyw6P{#cNYw%9DL+>_=Bl0Vs@L*~8 z#4G>27rPb?8jG0iEu|GG1z_2X-ouR<)Rl)$52!VFe}js$74ow1oA~eW;jtPY!>Z?| z;g+-kl8M1ei6*$VkTE}g{Roa+Ml;q0IOQz`-XBcR=3^>f?)Xgpw(Cb3BKd43;q|0y z@uSB8WwF-SVX-VcaM5KJgHIqFMt7*_ zJ#O@1;)0C0-q2_t*b0^X{=mv`rX>CUVsH*(#ZhtQR0kRyh-{`1#`EbtLQF~uU z`s=BO5q44HB>o-HU(;yq}(b!C5vJ+;VRl zITOoU5wz+}zpccH>&1<7y)!4G0CdhfZ}rS3we{4FGK(C}iE>_(oybuw@@1d>IgaFZ zd)UcCUWi$uOXN$>yboHbfZqiLrRrjSy;>857(~M2Q@^JusUSLDE5U68KCkxeYjdB; z`s2T!35Iv!Th-jpMUPuH5?yXKDF;9IZOuFbB6bS0xV5m2`?U!=XlPm&m;$gUiBB4X zxaOWYoQs2pb~SV5J#S{+0CmQe?|<#~3S*yslo-i$+>C)C({E4hEo_;Y%QMI3+9ihn+qY7&}x~15gR_-?bdR(I|%)lVZptVS5^V2Mz0q zIgsQN`l>8nGPiGP>R?BLlZ|01XEVSV$hs=4&CjF)Yyx*@0yQph>-_xqq77hKDb)D5 zl_W()DM&;M(1FU%=5)Zk8!l6ai{!^^e_vvxmlz*2HG%t^LHH;AB-7o zt!H6bWPb2`xF8(KX<)jav5<P7$;fR(6RtO=m*Kp^v7V5%ckW2;3G3i2)Xme(h4j|Pp z3@H4jK`JnvWdu21Pw1e<#@#`NtF~kzLn)j$=_%`}R~Ki;N?Tb@S%HLSw^R=WAlO`7 z12e=HT)h~4O`7uk!D6D5Vy+phF*%XGd7?gJaSvf6mNBtLZM5{75|B5h&qbJIw|O68 zc`qq0j+(E^s$fh6cV(9T@YdFlnc2M6t0YRl%U>WHr{U-cg(M?thGbLv->!?Fa6sS- zS5(AL>V4%rDN{zvM~r`>Wa|gtH~EDnpJLIO;p>%4cjT0aI~v;JT^2@UySsq(Fj-S?Sj0D z{^!Qy4xcL1%!fzl65zxGShU{LyCC?`*C3tNLmu?c-{G@&z4pX^m4GlA=ZdlA5tpd~75q+EvOMl(}Ud9I$mA84>Uw~bnpN;~~r>59{! z9GhxeMgZ7DlCJtHPB)Zm6>f-Yt$qwkb!Slc-s*MgM`q*4p-d2iO zf8&$p&rS|}XO}%aJ(R(;t;NP4Mk=2!i%C+Qc6F)Mh>E(u@q2v~d9Ldbq{GK~-wa}h zR4r3Hl`ZeId<~YX?kVN*mclYXFLYf(elJJ8Et-ditId0dDnvt&cLx4oCEq0-EvPxvmN04RQyfC5jypNz6@4<2 z?5v?GyGTIHza^n0(LSqUVW2J&sjl)!D028o=jU#ovBO3^&Qf;57mDXiVK>)TRCCP6 zQHAeuw=IBY4>kAeY~lKe_$XT*i=74ycCAbWZs^_uMMZbG5JTw_DDBC14dx6aQ(9ys zL62B3%S`Mzq0FoQCP!R?0eaN#wWhwJZFkqEUjZ%5%$Ocst}#+` z%0n&#fB#zU8y;qAHG8Jw>vko_ST9FrA_t)U%m<8K&DAQS^$Tnp{D%lgp&hQM9rBmfLk*$QWMAP=ltxf z=Pk^ehdoO7{k_KeJ3_2>r(s=A)qEE{)&-Pqi`LhHHWK?>#IK*(lwd}xk~rQ{vjKxJ zEDO(vya=rK_X+-aB{$Vz!?VeiD0PN%_6oeOp?H!O^n8 ze*GMKhW^(I>(CZO(#cP$SeC@d$m@7b=aRbauCAMem2_9_ZhN4yDHo zA`%fz^& za^B4VFEpNyQ~PpVVaxLL2|E~flJjQ!Ignfnf8;YO{6L2t{<|xLnu%39yQwoB+WQFZ zp6IIRVCjYZuX_u{TGlN-e8(pzsWPuTU=4@)`T4|NceqS+D2>|tF>Z&}$0FrH-2^u+;6a&~{z4QM`R&X|Zj9Ah_XK-LPWfVKX zW#A0fstv_pRC)l9*n6&^hD@Yu76jo|v!{ z#(aCrg)x2phwJrywyl7XeH+Y|e40}5)5N$cr&dp0q5)L*8R)sUs4c^wZc$@_Tm0)y zsKz!byEJ2SoN4^1{c-#kB*5I*Xef4_lQ;NDqM95@9qC}27}5REjdA9qu>2Xm9Q3?L z%+Me$BtrB?gC8%u;2W!OhSCa2sY;ahosV(d8z6fyXgxOAD!|Vjf##S0V5o1u_d)24BL@W#=(+`tFp1QUC$31ZjG8z@hP=yB4 zC$-Mq(K|UJ(uwhX%$wfz>H%JWY1l#yMciwsjMkRO7s+4l&ex2U-qz7nEt@H1XeE9o za#uE;q=+5lHH2^CzwQEQ)8}f)n|FSyr7Fh~dMdx!kam|6ECPP)KBFL{ucihlQQJaU zoEs9ig>qBs2)caX^?W}<+o4-9&9irCPMTbFppye=RtP58C zP$9<$*iOdG9LL|jNzoA+^!~FFt_?bs#Ltp&sE|EA4jlp8Ua0OGx;%7G_Kt1wf9`xiLiocnh1U$j^C4P8c%rOcm7q>G=iMe1bY$d7Dvb#)a@6c*<`KbQZK3;j{7 zmCvoY+YBn%z;`ibm@?L!dC9fjsM!s@UN`w-%`wjw!YjyCo7Oa{c>3XWm&C0QHEmO# zkQLa95{r|~$22t5m1h~5S*?jLZ9s2goCJQ%t1Ia#{1bg>h-H*eOu?BXD9Bb3ci%Q; zirW*Ka{ot(Q+tp4c5ZU~c3+mWSEElR29VPS!HqQ1ffgc#Yntq?fO`A?WOg;lUMk!X zoHwoXxi$}m#r-)B<)_zq?C$3cux&Ra?7_aGY}hP{;z;n)LN3~e=l*!sHH@rvG$zA1 z17OiR;18O?m!y&8iZdo07Wlsy+TsEl7WCd3{D`1n{9(msR$Wq#>a4|TxyaPY@pOs;GaM^D=NP)Bt86(UMkjU3Xgwg9nZNA zzz<&O8Ma-wB%dkdjDYrRp6<}*StG#xJYzQX9Bayg#L~+NZ^kw=hb2#6e9lJXp`QSU zxi`d=0SMtJ7?LV)ZO8wXB=so^Z^3TQmIAz%81=+_@O0GzBM<>guF`qF{w6w~iLbV| zF7-amw>%L^ejPZ@bpBYf@xDujgxP)*3<0R%PqhM9WI7$ZSFNqq!0$S6++MY32N?z6 zY5*@XHMo!@cvRF|0qQ3@@)Z0pHt$teQsX$M@+?&U6WcA)w$SkXVlwfo z6r~dgTTWxJWw2#rs3YUIYT)sMtx26LAH&Q1G?Y>1R)mVQ4Awk~b>HeJW(Qv z=Cz*bXLyGm=#GTJyZ3 zsL86EswVV*l7`&ZbiQN)rKy3_s!A~!0(@G9LPu)=)l}CJ0RA>${vHt-t^Kze2auT9 zdS{mHmw;`I6+gSUJ%QK9>vQ>>L`IntWW%GKVa-DN1Uay>)s8S!NLcR7xwe;AQfOjP z1QU>a=D3X-7#ys1pBBc;VopaZJwCuw$MAfMn_bhbBA9_Si}53&Y>Ng;Xd!imYlmst zyjw%qig|En>ak75iQ_8~J(qPRh|MUnY#ZhF+|VgdQ89(B4OkMMFUu=ps%TE5$AwI4 z9nO*)eb+NyF6!9fTjlKJ#3pdobw{yI=R^MD7rf<}LB)8Q)dm#uS7!!k;ZY^eh)`2M zjfs$4k+g?9$aN?^JoxIo2bYoYGPh04o7+!THdnMhh6NnHVm+guSQXt&4`Xg-|&?$e3dTLU?5H83U^u!PY&`< z8yKjNLRtM|EJ|&_^9xe$VOll}!#^OjRPzxE%g<#o<5u=YTq>f_)#>)3^|kMV81A4l zPGU;6pHr^k|Qp;y&9!w;WW>UNCjxA2F*HAxFg zmNz_A(lhMW!^0mb!I}B|=Lyc&yR@C*_U;d?vno;~?kaBG7AQPrl%o1a9+mUocpGb> z8BQ4Vz%|mA-BNlt;-*0ghZ@1i0z!HuNjDe6{om{+^+>A0g&K!9$E$@b=oA;bK@oH8 zrU`14Ugd(bWNM*EiR-E@ooi=5i&`XAbNFH;PJH(=;%}V6qwLV! zUnndL$G+Md&*m2HpD*)pbc;v<~_phnM-?oF0y`o5{ygWHe6?nnteP%=Q-S zZVAy3Y{7MNbG0A-{cP%d@s}H~85EyBZ9n|rDY_A8ejh{eB~0qUpL%MXLB~bU1Ywz% zp4L_mZ8!nu->JoqCi-ESc6x(;wWWUT?DR|@9()Kl<8$DGdzi9?`nx%!w_-Zv_mGIz zK9jVq@~!68q9}?;(}q04<&MYakr`W`CmcGL`@WKI(m`1Pl{OO?tee_+apVUCql2>jt~J^QzgR^?Vq{oSDpW;&c>t>w_){bSm)@JW55J5s6-kB@MDJjeRP zlM2}|>*RXneHnX7kRRPi39hM#&`5#Ck`kY08nwMjBWfxO|Lw47u%#J7K5!7s)JLas zoXjrIC2dau`uYgmyL?d$`r}|He_zEr@ThpIyR0NCu8JjZ(|;+VOln}e=1t#2JsP)X cKX32+jSqL`^uZ$V$LIvQnnoH`YWA=H2PZIcZ~y=R literal 0 HcmV?d00001 From 19cd619cbf932f602e0e0b1713266ed419dabf4f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 10 Aug 2024 16:25:07 +0800 Subject: [PATCH 033/450] Add solution and test-cases for problem 959 --- .../0959.Regions-Cut-By-Slashes/1.png | Bin 0 -> 1028 bytes .../0959.Regions-Cut-By-Slashes/2.png | Bin 0 -> 413 bytes .../0959.Regions-Cut-By-Slashes/4.png | Bin 0 -> 743 bytes .../0959.Regions-Cut-By-Slashes/README.md | 38 +++-- .../0959.Regions-Cut-By-Slashes/Solution.go | 134 +++++++++++++++++- .../Solution_test.go | 14 +- 6 files changed, 164 insertions(+), 22 deletions(-) create mode 100644 leetcode/901-1000/0959.Regions-Cut-By-Slashes/1.png create mode 100644 leetcode/901-1000/0959.Regions-Cut-By-Slashes/2.png create mode 100644 leetcode/901-1000/0959.Regions-Cut-By-Slashes/4.png diff --git a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/1.png b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/1.png new file mode 100644 index 0000000000000000000000000000000000000000..eeed41bb07246ade6ef134fe73a2a0e0fd0ff3e4 GIT binary patch literal 1028 zcmV+f1pE7mP)Y00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGxhX4Q_hXIe}@nrx21DQ!gK~#8N<(K(K zY+)RS@86Lmk|dHOMtes480{JD8Lg6P%1EoERYt4Pp3$Dsp3$BmNg_!i=?|ICZ9Z4G zds}8X%lp3P`Q^ON_qXRb-sAgAhS+R2JmkR3%ZrDHhrF_%pPxNFJ-LI7vY(!wyu7^Z zXSrlQK0bPTdqZTB{qXSM_yaR3&wPft(7!onbqL4Ee|@o_{%1jJ$J&OSUmjEaha zI0MDm7K`7Z(R{3Hq|Px3?1#5+JTZS@!1UW>QiT z#0_Z5Hk-{UDJc;5peB2LeO;|qL)?ar?A6uP)YMc6A5f6Jyu6&Ao(|y&(z6#A7c(<6 zA^bsfw#j75&d!GL3c1w2EsRlX3x&f=H})?1c1cs>FMeG{CtQo5SKkUIayd( z2oVgjvW-S#ad9z3NC?UvA0O9hwGe?JC3|#qw6wGoB0NN74-XHQmzP6CLHcZi!BAOQ z2@wm4vj+zUtE;OaA|hq>z`#IFO$|g`B+KsW>#MD;g@}$c**!fy_4V}-DUcw$tE;P_ zp#dThVrO@DcIx$dh;)dW-OdX3eVY9RaFLq0YWf*W>-{H3=IuI$cDG-@RP08YRAUL zAT+>3c1cNz(P)HFg1gy8MMV=66A*fEE4!eeU}|a#LKUuO=jG+i%*;S&!^LckMl&}z z2cZyGvU75BOePbAPMprp%F0?;Sb$KAbJ-ag8B0q`5Sno!J1s43Wn~3IIgVzl)#|mi zH3WqbaeE=!2yI({>_ezj66CzvY#2|Lw0z0_{qu1+njOUvlR-( y+1Z(W$~^DcR;$%Mk^}GAa^rXQ+bfV6Hrp#+=Gk`?Vhc+E0000Nn{1`ISV`@iy0VX+d-JI|LMn6pavsP7srr_xVLxC<~17#xF%jQe}3|%>%RPs49a39XyxtNHZ$%_;u(T6|AFS$kuO=e-HOnNMie5`J&0ujA9bH$?*N8hjr_|^7ircopIA%rxHml)xN$@{@un&S&{n~ YZ9->o@-K>20R}09r>mdKI;Vst0EgAV*#H0l literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/4.png b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/4.png new file mode 100644 index 0000000000000000000000000000000000000000..278de203072f0eee56683bb327b618ef5d03b1ed GIT binary patch literal 743 zcmV?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGxhX4Q_hXIe}@nrx20(?nCK~#8N<<>oN z!Y~kqVVGQij+&m5L&0TeIR|&5fQF7b`QUR1F|w?m-L)j%8PC|;Ju0-GeQ4jdozLgx za*3Dic6&G+I5cYl^ApVM+1BPBm>IK8%}y}0WZRiNU}nZPGLM3p4co#T2xbOsb#oM$ zX|r|B31FtmRx~GrnI2oqoC#)1Y!$Nzm}#)(&4OSi&K5R{gPAN_(yRn#f^0FfDws*J zWy}U(Cc+jln}JzAJJ)OsW|{0P^CV!F!%jC(2xiIbMDyfemc~vo7XoGp>}YdQU>3`c zGZzSEQS1nFv0xU?4mB4JW`XP=a}{6~!X7tQ1ZJb`5p#85=4boNm4cavJ!q~P%!b%* za|2-JWIN2wfZ02{Z*C0CdhCDZCc*5L{bz0%%%1Gd+&q|(-I+fD%)su<$K$b^wcho5 zh4%~3VzD@#PMgiX4uaE4!0RKz;=Sspcz%o9s(nu8CA;mfYFEh#k5R4+ss91J57{!@Uf$S(SiZ-L7*s)-gVn&6q6Tm3Zj3#HNfl;~{O~_6L zqbxI;gq;IMxn^X{&IBU?Gcsf6gOQ9G8L&mbNX(2>*-~I6X+}zHK`;_FBXPDY7|ENF zAX^-aRLn?(tpP?_W|YZR0wYB;N@nYUk**mfuvNiG-Hf8x+F)d1MuBVtFfuZuQML^j z*_n}tZ3afBX5?gBf|0cu_1MN>G=UjC+4f)r@0{j`-LBnkw_2_C`#sp*$g27LPX4fF ZvmaayQiU};fs+6L002ovPDHLkV1m^NOVa=V literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/README.md b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/README.md index 9f08508c7..c527fa2b3 100644 --- a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/README.md +++ b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/README.md @@ -1,28 +1,40 @@ # [959.Regions Cut By Slashes][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 +An `n x n` grid is composed of `1 x 1` squares where each `1 x 1` square consists of a `'/'`, `'\'`, or blank space `' '`. These characters divide the square into contiguous regions. + +Given the `grid` grid represented as a string array, return the number of regions. + +Note that backslash characters are escaped, so a `'\'` is represented as `'\\'`. + + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [" /","/ "] +Output: 2 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Regions Cut By Slashes -```go ``` +Input: grid = [" /"," "] +Output: 1 +``` + +**Example 3:** + +![3](./4.png) +``` +Input: grid = ["/\\","\\/"] +Output: 5 +Explanation: Recall that because \ characters are escaped, "\\/" refers to \/, and "/\\" refers to /\. +``` ## 结语 diff --git a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution.go b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution.go index d115ccf5e..51810ca33 100644 --- a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution.go +++ b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution.go @@ -1,5 +1,135 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid []string) int { + // 感觉类似灌水的思想,设置一个nxn的数组,开始数字都是0, + // 从没有被访问的格子开始dfs,大概就可以知道有多少个联通的去了 + // 标记+dsf + /* + 对于一个1x1的放个,如果如果放置的是 / ,左上角标记为1,右下角标记4 + 如果放置\, 右上角是2,左下角是3, + 所以如果一个放个完全被用过后,他的值应该是5 + */ + n := len(grid) + m := make([][]int, n) + ch := make([][]byte, n) + + for i := 0; i < n; i++ { + ch[i] = make([]byte, n) + m[i] = make([]int, n) + } + + for r, line := range grid { + for c, b := range line { + ch[r][c] = byte(b) + } + } + // 1v4, 2v3 + var dfs func(int, int, int) + // 只需要根据数字就可以知道如何走了。 + dfs = func(x, y, dir int) { + // 最基础的判断方式 + if x < 0 || x >= n || y < 0 || y >= n || m[x][y] == 5 { + return + } + //例如如果dfs是否从下面来的,就需要判断当前网格的值是是否是3,或者4,如果是表示便利过 + // 其他方向同理, + + if m[x][y] == 0 { + // 还没有访问过 + if ch[x][y] == ' ' { + // 空格直接灌满 + m[x][y] = 5 + dfs(x, y-1, 3) + dfs(x, y+1, 1) + dfs(x-1, y, 4) + dfs(x+1, y, 2) + return + } + if ch[x][y] == '/' { + // 标记为1 + if dir == 1 || dir == 2 { + m[x][y] = 1 + dfs(x-1, y, 4) + // 坑就在这里 + dfs(x, y-1, 3) + } else { + m[x][y] = 4 + dfs(x, y+1, 1) + dfs(x+1, y, 2) + } + } else { + if dir == 2 || dir == 3 { + m[x][y] = 2 + dfs(x-1, y, 4) + dfs(x, y+1, 1) + + } else { + m[x][y] = 3 + dfs(x, y-1, 3) + dfs(x+1, y, 2) + } + } + return + } + // dir=1表示从左侧来,2表示上方,3表示右侧,4表示下方 + if m[x][y] == 1 { + // 遍历过了 + if dir == 1 || dir == 2 { + return + } + // 左上角,因为还不等于5, 只能走右,下 + m[x][y] = 5 + dfs(x, y+1, 1) + dfs(x+1, y, 2) + return + } + if m[x][y] == 4 { + if dir == 3 || dir == 4 { + return + } + m[x][y] = 5 + // 右上角,只能走左,下 + dfs(x, y-1, 3) + dfs(x-1, y, 4) + return + + } + if m[x][y] == 2 { + if dir == 2 || dir == 3 { + return + } + m[x][y] = 5 + dfs(x, y-1, 3) + dfs(x+1, y, 2) + return + + } + if m[x][y] == 3 { + if dir == 1 || dir == 4 { + return + } + m[x][y] = 5 + dfs(x-1, y, 4) + dfs(x, y+1, 1) + return + } + } + + ans := 0 + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if m[i][j] != 5 { + dfs(i, j, 0) + ans++ + } + if m[i][j] != 5 { + dfs(i, j, 0) + ans++ + } + } + } + + // 开始哦都市0,占用了一半 + + return ans } diff --git a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution_test.go b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution_test.go index 14ff50eb4..32b775869 100644 --- a/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution_test.go +++ b/leetcode/901-1000/0959.Regions-Cut-By-Slashes/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{" /", "/ "}, 2}, + {"TestCase2", []string{"/\\", "\\/"}, 5}, + {"TestCase3", []string{"\\\\\\", "\\\\/", " //"}, 5}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2c487d259d0380ecfc8fac94ad2be75b0f9544e7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 11 Aug 2024 12:14:15 +0800 Subject: [PATCH 034/450] Add solution and test-cases for problem 1568 --- .../1.jpg | Bin 0 -> 23957 bytes .../2.jpg | Bin 0 -> 6620 bytes .../README.md | 35 +++++---- .../Solution.go | 71 +++++++++++++++++- .../Solution_test.go | 13 ++-- 5 files changed, 96 insertions(+), 23 deletions(-) create mode 100644 leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/1.jpg create mode 100644 leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/2.jpg diff --git a/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/1.jpg b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c8edd76d4780b24adad043ad2dea1d89ab55ce1 GIT binary patch literal 23957 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 [!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 `m x n` binary `grid` grid where `1` represents land and `0` represents water. An **island** is a maximal **4-directionally** (horizontal or vertical) connected group of `1`'s. + +The grid is said to be **connected** if we have **exactly one island**, otherwise is said **disconnected**. + +In one day, we are allowed to change any single land cell `(1)` into a water cell `(0)`. + +Return the minimum number of days to disconnect the grid. -**Example 1:** +**Example 1:** + +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,1,1,0],[0,1,1,0],[0,0,0,0]] + +Output: 2 +Explanation: We need at least 2 days to get a disconnected grid. +Change land grid[1][1] and grid[0][2] to water and get 2 disconnected island. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Minimum Number of Days to Disconnect Island -```go ``` - +Input: grid = [[1,1]] +Output: 2 +Explanation: Grid of full water is also disconnected ([[1,1]] -> [[0,0]]), 0 islands. +``` ## 结语 diff --git a/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go index d115ccf5e..cec6d1f7d 100644 --- a/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go +++ b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go @@ -1,5 +1,72 @@ package Solution -func Solution(x bool) bool { - return x +var dirs1568 = [][]int{ + {1, 0}, {-1, 0}, {0, 1}, {0, -1}, +} + +func bfs1568(x, y int, grid [][]int) { + q := [][2]int{{x, y}} + grid[x][y] = 0 + for len(q) > 0 { + nq := make([][2]int, 0) + for _, cur := range q { + for _, dir := range dirs1568 { + nx, ny := cur[0]+dir[0], cur[1]+dir[1] + if nx < 0 || nx >= len(grid) || ny < 0 || ny >= len(grid[0]) || grid[nx][ny] == 0 { + continue + } + grid[nx][ny] = 0 + nq = append(nq, [2]int{nx, ny}) + } + } + q = nq + } +} + +// 判断联通, 如果开始就有多个区域,直击返回0 +func connected1568(grid [][]int) bool { + rows, cols := len(grid), len(grid[0]) + tmp := make([][]int, len(grid)) + for i := 0; i < len(grid); i++ { + tmp[i] = make([]int, cols) + copy(tmp[i], grid[i]) + } + count := 0 + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + if tmp[i][j] == 1 { + if count == 1 { + return false + } + bfs1568(i, j, tmp) + count++ + } + } + } + // 有且只有一个陆地的时候才是联通的 + return count == 1 +} + +// 我的思路是首先通过bfs搜索有几个联通 +func Solution(grid [][]int) int { + // 如果去掉一个1的时候无法将联通区域变成多个,那就至少需要两个操作 + // 两个操作,就类似于两步将一个角的1陆地裁剪出去。 + if !connected1568(grid) { + // 一步都不用做 + return 0 + } + rows, cols := len(grid), len(grid[0]) + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + if grid[i][j] == 1 { + //尝试更新 + grid[i][j] = 0 + if !connected1568(grid) { + return 1 + } + grid[i][j] = 1 + } + } + } + return 2 } diff --git a/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution_test.go b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution_test.go index 14ff50eb4..b137e0abe 100644 --- a/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution_test.go +++ b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/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{{0, 1, 1, 0}, {0, 1, 1, 0}, {0, 0, 0, 0}}, 2}, + {"TestCase2", [][]int{{1, 1}}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d18fe4e721ff07e6ff24de2b7158a88bfd4e5415 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 12 Aug 2024 09:36:25 +0800 Subject: [PATCH 035/450] Add solution and test-cases for problem 911 --- .../901-1000/0911.Online-Election/README.md | 37 +++++----- .../901-1000/0911.Online-Election/Solution.go | 71 ++++++++++++++++++- .../0911.Online-Election/Solution_test.go | 20 +++--- 3 files changed, 99 insertions(+), 29 deletions(-) diff --git a/leetcode/901-1000/0911.Online-Election/README.md b/leetcode/901-1000/0911.Online-Election/README.md index 408e9ea8c..61b4a762a 100644 --- a/leetcode/901-1000/0911.Online-Election/README.md +++ b/leetcode/901-1000/0911.Online-Election/README.md @@ -1,28 +1,33 @@ # [911.Online Election][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 two integer arrays `persons` and `times`. In an election, the `ith` vote was cast for `persons[i]` at time `times[i]`. -**Example 1:** +For each query at a time `t`, find the person that was leading the election at time `t`. Votes cast at time `t` will count towards our query. In the case of a tie, the most recent vote (among tied candidates) wins. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `TopVotedCandidate` class: -## 题意 -> ... +- `TopVotedCandidate(int[] persons, int[] times)` Initializes the object with the `persons` and `times` arrays. +- `int q(int t)` Returns the number of the person that was leading the election at time `t` according to the mentioned rules. -## 题解 +**Example 1:** -### 思路1 -> ... -Online Election -```go ``` - +Input +["TopVotedCandidate", "q", "q", "q", "q", "q", "q"] +[[[0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]], [3], [12], [25], [15], [24], [8]] +Output +[null, 0, 1, 1, 0, 0, 1] + +Explanation +TopVotedCandidate topVotedCandidate = new TopVotedCandidate([0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]); +topVotedCandidate.q(3); // return 0, At time 3, the votes are [0], and 0 is leading. +topVotedCandidate.q(12); // return 1, At time 12, the votes are [0,1,1], and 1 is leading. +topVotedCandidate.q(25); // return 1, At time 25, the votes are [0,1,1,0,0,1], and 1 is leading (as ties go to the most recent vote.) +topVotedCandidate.q(15); // return 0 +topVotedCandidate.q(24); // return 0 +topVotedCandidate.q(8); // return 1 +``` ## 结语 diff --git a/leetcode/901-1000/0911.Online-Election/Solution.go b/leetcode/901-1000/0911.Online-Election/Solution.go index d115ccf5e..eecc7099b 100644 --- a/leetcode/901-1000/0911.Online-Election/Solution.go +++ b/leetcode/901-1000/0911.Online-Election/Solution.go @@ -1,5 +1,72 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +type TopVotedCandidate struct { + matrix [][]int + mm []int + times []int +} + +func Constructor(persons []int, times []int) TopVotedCandidate { + l := len(times) + + matrix := make([][]int, l) + for i := 0; i < l; i++ { + matrix[i] = make([]int, l) + } + mm := make([]int, l) + voteTime := make([]int, l) + for i := range l { + voteTime[i] = -1 + } + matrix[0][persons[0]]++ + mm[0] = persons[0] + voteTime[persons[0]] = times[0] + + for i := 1; i < l; i++ { + matrix[i][persons[i]]++ + voteTime[persons[i]] = times[i] + + selectuser := 0 + maxvalue := 0 + for c := range matrix[i] { + matrix[i][c] += matrix[i-1][c] + if matrix[i][c] == maxvalue && maxvalue != 0 { + if voteTime[c] > voteTime[selectuser] { + selectuser = c + } + } + + if matrix[i][c] > maxvalue { + selectuser = c + maxvalue = matrix[i][c] + } + } + mm[i] = selectuser + } + return TopVotedCandidate{matrix: matrix, times: times, mm: mm} +} + +func (this *TopVotedCandidate) Q(t int) int { + l := len(this.times) + index := sort.Search(l, func(i int) bool { + return this.times[i] >= t + }) + if index == l || this.times[index] != t { + // 没有 + index-- + } + return this.mm[index] +} + +func Solution(persons, times []int, ops []int) []int { + ans := make([]int, len(ops)) + c := Constructor(persons, times) + for i := range ops { + ans[i] = c.Q(ops[i]) + } + return ans } diff --git a/leetcode/901-1000/0911.Online-Election/Solution_test.go b/leetcode/901-1000/0911.Online-Election/Solution_test.go index 14ff50eb4..58a126213 100644 --- a/leetcode/901-1000/0911.Online-Election/Solution_test.go +++ b/leetcode/901-1000/0911.Online-Election/Solution_test.go @@ -9,31 +9,29 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + persons, times, ops []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 1, 0, 0, 1, 0}, []int{0, 5, 10, 15, 20, 25, 30}, []int{3, 12, 25, 15, 24, 8}, []int{0, 1, 1, 0, 0, 1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.persons, c.times, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.persons, c.times, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a1a7e3e8e71773c2220c94df44109e73276613d8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 14 Aug 2024 22:48:25 +0800 Subject: [PATCH 036/450] Add solution and test-cases for problem 719 --- .../README.md | 33 +++++++++------ .../Solution.go | 40 ++++++++++++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 69 insertions(+), 25 deletions(-) diff --git a/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/README.md b/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/README.md index 9b4c239fd..a1faa696b 100644 --- a/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/README.md +++ b/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/README.md @@ -1,28 +1,35 @@ # [719.Find K-th Smallest Pair Distance][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 +The **distance of a pair** of integers `a` and `b` is defined as the absolute difference between `a` and `b`. + +Given an integer array `nums` and an integer `k`, return the `kth` smallest **distance among all the pairs** `nums[i]` and `nums[j]` where `0 <= i < j < nums.length`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,1], k = 1 +Output: 0 +Explanation: Here are all the pairs: +(1,3) -> 2 +(1,1) -> 0 +(3,1) -> 2 +Then the 1st smallest distance pair is (1,1), and its distance is 0. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find K-th Smallest Pair Distance -```go +``` +Input: nums = [1,1,1], k = 2 +Output: 0 ``` +**Example 3:** + +``` +Input: nums = [1,6,1], k = 3 +Output: 5 +``` ## 结语 diff --git a/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution.go b/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution.go index d115ccf5e..e8697bc75 100644 --- a/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution.go +++ b/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int) int { + sort.Ints(nums) + // 通常情况下 那基本就是n^2 + nlog(n)了,计算出全部,然后重新排列 + // 对于条件i < j, 就是选择(i, j)或者(j, i)的问题, 可以直接忽略了 + // 如果完全计算,肯定是不行的,10^8 如果选择最后几个元素,内存都要爆炸 + l := len(nums) + var count func(int) int + count = func(target int) int { + ans := 0 + // 4, 62, 100 + for i := 1; i < l; i++ { + idx := sort.Search(i, func(ii int) bool { + return nums[i]-nums[ii] <= target + }) + ans += i - idx + } + return ans + } + a, b := 0, nums[l-1]-nums[0] + // 查看小于等于当前值的有多少个 + // 4, 62, 100 + // 38,58,96, + // 0, 5, 5 + // 0 ~ 5 + // 3 ~ 5 + // 4 ~ 5 + for a < b { + mid := (a + b) / 2 + c := count(mid) + if c < k { + a = mid + 1 + continue + } + b = mid + } + return a } diff --git a/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution_test.go b/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution_test.go index 14ff50eb4..cacf77682 100644 --- a/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution_test.go +++ b/leetcode/701-800/0719.Find-K-th-Smallest-Pair-Distance/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 1}, 1, 0}, + {"TestCase2", []int{1, 1, 1}, 2, 0}, + {"TestCase3", []int{1, 6, 1}, 3, 5}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7758416d84fef4770e47e759a4244f48e5ad38d9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 15 Aug 2024 09:07:36 +0800 Subject: [PATCH 037/450] Add solution and test-cases for problem 1346 --- .../README.md | 27 ++++++++-------- .../Solution.go | 31 +++++++++++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/README.md b/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/README.md index 95211d3ec..758803c29 100644 --- a/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/README.md +++ b/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/README.md @@ -1,28 +1,27 @@ # [1346.Check If N and Its Double Exist][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 +Given an array `arr` of integers, check if there exist two indices `i` and `j` such that : + +- `i != j` +- `0 <= i, j < arr.length` +- `arr[i] == 2 * arr[j]` **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [10,2,5,3] +Output: true +Explanation: For i = 0 and j = 2, arr[i] == 10 == 2 * 5 == 2 * arr[j] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Check If N and Its Double Exist -```go ``` - +Input: arr = [3,1,7,11] +Output: false +Explanation: There is no i and j that satisfy the conditions. +``` ## 结语 diff --git a/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution.go b/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution.go index d115ccf5e..6eaf56f8a 100644 --- a/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution.go +++ b/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(arr []int) bool { + sort.Ints(arr) + l := len(arr) + in := sort.Search(l, func(i int) bool { + return arr[i] >= 0 + }) + + for i := l - 1; i >= in; i-- { + // 1, 2, 3 + idx := sort.Search(i, func(ii int) bool { + return arr[ii]*2 >= arr[i] + }) + if idx != i && arr[idx]*2 == arr[i] { + return true + } + } + // -20, -10, -5 + for i := in - 1; i > 0; i-- { + idx := sort.Search(i, func(ii int) bool { + return arr[i]*2 <= arr[ii] + }) + if idx != i && arr[idx] == arr[i]*2 { + return true + } + } + + return false } diff --git a/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution_test.go b/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution_test.go index 14ff50eb4..015ac358d 100644 --- a/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution_test.go +++ b/leetcode/1301-1400/1346.Check-If-N-and-Its-Double-Exist/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{10, 2, 5, 3}, true}, + {"TestCase2", []int{3, 1, 7, 11}, false}, + {"TestCase3", []int{-10, 12, -20, -8, 15}, true}, + {"TestCase4", []int{-766, 259, 203, 601, 896, -226, -844, 168, 126, -542, 159, -833, 950, -454, -253, 824, -395, 155, 94, 894, -766, -63, 836, -433, -780, 611, -907, 695, -395, -975, 256, 373, -971, -813, -154, -765, 691, 812, 617, -919, -616, -510, 608, 201, -138, -669, -764, -77, -658, 394, -506, -675, 523}, true}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b7a1e3ac45b89a1cfb135fe09415572248b54baf Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 16 Aug 2024 21:13:20 +0800 Subject: [PATCH 038/450] Add solution and test-cases for problem 624 --- .../0624.Maximum-Distance-in-Arrays/README.md | 30 ++++++++++++ .../Solution.go | 47 ++++++++++++++++++- .../Solution_test.go | 13 +++-- 3 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 leetcode/601-700/0624.Maximum-Distance-in-Arrays/README.md diff --git a/leetcode/601-700/0624.Maximum-Distance-in-Arrays/README.md b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/README.md new file mode 100644 index 000000000..d91cfe2a1 --- /dev/null +++ b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/README.md @@ -0,0 +1,30 @@ +# [624.Maximum Distance in Arrays][title] + +## Description +You are given `m` `arrays`, where each array is sorted in **ascending order**. + +You can pick up two integers from two different arrays (each array picks one) and calculate the distance. We define the distance between two integers `a` and `b` to be their absolute difference `|a - b|`. + +Return the maximum distance. + +**Example 1:** + +``` +Input: arrays = [[1,2,3],[4,5],[1,2,3]] +Output: 4 +Explanation: One way to reach the maximum distance 4 is to pick 1 in the first or third array and pick 5 in the second array. +``` + +**Example 2:** + +``` +Input: arrays = [[1],[1]] +Output: 0 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-distance-in-arrays +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go index d115ccf5e..f00e102a7 100755 --- a/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go +++ b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { - return x +type item624 struct { + v, i int +} + +func Solution(arrays [][]int) int { + a, b := [2]item624{{arrays[0][0], 0}, {arrays[1][0], 1}}, [2]item624{{arrays[0][len(arrays[0])-1], 0}, {arrays[1][len(arrays[1])-1], 1}} + if a[0].v < a[1].v { + a[0], a[1] = a[1], a[0] + } + if b[0].v > b[1].v { + b[0], b[1] = b[1], b[0] + } + for i := 2; i < len(arrays); i++ { + arr := arrays[i] + l := len(arr) + if arr[0] <= a[1].v { + a[0] = a[1] + a[1] = item624{v: arr[0], i: i} + } else if arr[0] < a[0].v { + a[0] = item624{v: arr[0], i: i} + } + + if arr[l-1] >= b[1].v { + b[0] = b[1] + b[1] = item624{v: arr[l-1], i: i} + } else if arr[l-1] > b[0].v { + b[0] = item624{v: arr[l-1], i: i} + } + } + // 最大的情况 + if b[1].i != a[1].i { + return b[1].v - a[1].v + } + ans := 0 + if b[1].i != a[0].i { + ans = max(ans, b[1].v-a[0].v) + } + if b[0].i != a[1].i { + ans = max(ans, b[0].v-a[1].v) + } + if b[0].i != a[0].i { + ans = max(ans, b[0].v-a[0].v) + } + + return ans } diff --git a/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution_test.go b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution_test.go index 14ff50eb4..bf9627085 100755 --- a/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution_test.go +++ b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/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, 3}, {4, 5}, {1, 2, 3}}, 4}, + {"TestCase2", [][]int{{1}, {1}}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c3abf4c1123f5a90ea609f144b332d82886c7e21 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 17 Aug 2024 17:10:18 +0800 Subject: [PATCH 039/450] Add solution and test-cases for problem 1937 --- .../1.png | Bin 0 -> 17276 bytes .../2.png | Bin 0 -> 13413 bytes .../README.md | 46 ++++++++++++------ .../Solution.go | 38 ++++++++++++++- .../Solution_test.go | 13 +++-- 5 files changed, 74 insertions(+), 23 deletions(-) create mode 100644 leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/1.png create mode 100644 leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/2.png diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/1.png b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/1.png new file mode 100644 index 0000000000000000000000000000000000000000..02f429335f9c96a16226c5391d9878862790f9ec GIT binary patch literal 17276 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 bSl7a0$DqVBHsD{?SfQt7jLJRnOVIxU-u!Lw literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/2.png b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9eef6654b3f7206532b923b27e3db87ba0554d81 GIT binary patch literal 13413 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 b+!fw-#@+i5S2ytQLo9~6W;!KWSML8G;hqdC literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md index ddf5c648e..56c884d43 100755 --- a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md +++ b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md @@ -1,28 +1,46 @@ # [1937.Maximum Number of Points with Cost][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 `m x n` integer matrix `points` (**0-indexed**). Starting with `0` points, you want to **maximum** the number of points you can get from the matrix. + +To gain points, you must pick one cell in **each row**. Picking the cell at coordinates `(r, c)` will *add** `points[r][c]` to your score. + +However, you will lose points if you pick a cell too far from the cell that you picked in the previous row. For every two adjacent rows `r` and `r + 1` (where `0 <= r < m - 1`), picking cells at coordinates (`r, c1`) and (`r + 1, c2`) will **subtract** `abs(c1 - c2)` from your score. + +Return the **maximum** number of points you can achieve. + +`abs(x)` is defined as: -**Example 1:** +- `x for x >= 0`. +- `-x for x < 0`. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[1,2,3],[1,5,1],[3,1,1]] +Output: 9 +Explanation: +The blue cells denote the optimal cells to pick, which have coordinates (0, 2), (1, 1), and (2, 0). +You add 3 + 5 + 3 = 11 to your score. +However, you must subtract abs(2 - 1) + abs(1 - 0) = 2 from your score. +Your final score is 11 - 2 = 9. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Maximum Number of Points with Cost -```go ``` - +Input: points = [[1,5],[2,3],[4,2]] +Output: 11 +Explanation: +The blue cells denote the optimal cells to pick, which have coordinates (0, 1), (1, 1), and (2, 0). +You add 5 + 3 + 4 = 12 to your score. +However, you must subtract abs(1 - 1) + abs(1 - 0) = 1 from your score. +Your final score is 12 - 1 = 11. +``` ## 结语 diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go index d115ccf5e..ae2dea668 100644 --- a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go +++ b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +import "slices" + +func Solution(points [][]int) int64 { + m, n := len(points), len(points[0]) + + dp := make([]int64, n) + for i := 0; i < n; i++ { + // 第一行的初始化 + dp[i] = int64(points[0][i]) + } + // 如果按照dp思路去做,我们就需要从第二行开始,遍历到最后, + // 对于每一行的每一个元素,都需要与上一行去做计算,得到points[i][j]的最大分数, 这样复杂度直接到n^3了。 + // 如果当前在计算第二行第四列的元素, + // dp[2][3] = max(dp[1][0]-3, dp[1][1]-2, dp[1][2]-1, dp[1][3]) + // dp[2][1] = max(dp[1][0]-2, dp[1][1]-1, dp[1][2]) + // dp[2][1] = max(dp[1][0]-1, dp[1][1]) + // 有大量的的计算,因为有些数据再减去分数后,会越来越小,计算就没有意义了。 + // 对于每一行, 我们用left和right两个数组分别计算出[0:i]的最大值和[i:length]的最大值,最后二者取最大,+points就是最大值 + for i := 1; i < m; i++ { + next := make([]int64, n) + left, right := make([]int64, n), make([]int64, n) + left[0] = dp[0] + for c := 1; c < n; c++ { + left[c] = max(left[c-1]-1, dp[c]) + } + right[n-1] = dp[n-1] + for c := n - 2; c >= 0; c-- { + right[c] = max(right[c+1]-1, dp[c]) + } + for c := 0; c < n; c++ { + next[c] = max(left[c], right[c]) + int64(points[i][c]) + } + copy(dp, next) + } + + return slices.Max(dp) } diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go index 14ff50eb4..371c9579b 100644 --- a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go +++ b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2, 3}, {1, 5, 1}, {3, 1, 1}}, 9}, + {"TestCase2", [][]int{{1, 5}, {2, 3}, {4, 2}}, 11}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a187063d23bd6441ef48b2d3da8d227696a0bee5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 17 Aug 2024 17:49:42 +0800 Subject: [PATCH 040/450] Add solution and test-cases for problem 1014 --- .../1014.Best-Sightseeing-Pair/README.md | 26 +++++++++---------- .../1014.Best-Sightseeing-Pair/Solution.go | 20 ++++++++++++-- .../Solution_test.go | 13 +++++----- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/leetcode/1001-1100/1014.Best-Sightseeing-Pair/README.md b/leetcode/1001-1100/1014.Best-Sightseeing-Pair/README.md index 51f13f048..75b2a9f28 100644 --- a/leetcode/1001-1100/1014.Best-Sightseeing-Pair/README.md +++ b/leetcode/1001-1100/1014.Best-Sightseeing-Pair/README.md @@ -1,28 +1,26 @@ # [1014.Best Sightseeing Pair][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 integer array `values` where values[i] represents the value of the `ith` sightseeing spot. Two sightseeing spots `i` and `j` have a **distance** `j - i` between them. + +The score of a pair (`i < j`) of sightseeing spots is `values[i] + values[j] + i - j`: the sum of the values of the sightseeing spots, minus the distance between them. + +Return the maximum score of a pair of sightseeing spots. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: values = [8,1,5,2,6] +Output: 11 +Explanation: i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Best Sightseeing Pair -```go ``` - +Input: values = [1,2] +Output: 2 +``` ## 结语 diff --git a/leetcode/1001-1100/1014.Best-Sightseeing-Pair/Solution.go b/leetcode/1001-1100/1014.Best-Sightseeing-Pair/Solution.go index d115ccf5e..9aaaaa7ff 100644 --- a/leetcode/1001-1100/1014.Best-Sightseeing-Pair/Solution.go +++ b/leetcode/1001-1100/1014.Best-Sightseeing-Pair/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +import "slices" + +func Solution(values []int) int { + // 8, 1, 5, 2, 6 + // 0, 7, 6, 5, 4 + // 3, 4, 4, 5, 0 + l := len(values) + left, right := make([]int, l), make([]int, l) + for i := 1; i < l; i++ { + left[i] = max(left[i-1]-1, values[i-1]-1) + } + for i := l - 2; i >= 0; i-- { + right[i] = max(right[i+1]-1, values[i+1]-1) + } + for i := 0; i < l; i++ { + left[i] = max(left[i], right[i]) + values[i] + } + return slices.Max(left) } diff --git a/leetcode/1001-1100/1014.Best-Sightseeing-Pair/Solution_test.go b/leetcode/1001-1100/1014.Best-Sightseeing-Pair/Solution_test.go index 14ff50eb4..701e7680d 100644 --- a/leetcode/1001-1100/1014.Best-Sightseeing-Pair/Solution_test.go +++ b/leetcode/1001-1100/1014.Best-Sightseeing-Pair/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{8, 1, 5, 2, 6}, 11}, + {"TestCase2", []int{1, 2}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3236115a83a539049977b06f6f4d3c9ac8fa3695 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 18 Aug 2024 16:17:25 +0800 Subject: [PATCH 041/450] Add solution and test-cases for problem 916 --- leetcode/901-1000/0916.Word-Subsets/README.md | 29 ++++++++-------- .../901-1000/0916.Word-Subsets/Solution.go | 33 +++++++++++++++++-- .../0916.Word-Subsets/Solution_test.go | 19 +++++------ 3 files changed, 55 insertions(+), 26 deletions(-) diff --git a/leetcode/901-1000/0916.Word-Subsets/README.md b/leetcode/901-1000/0916.Word-Subsets/README.md index 7b793ed23..6b529d2ab 100644 --- a/leetcode/901-1000/0916.Word-Subsets/README.md +++ b/leetcode/901-1000/0916.Word-Subsets/README.md @@ -1,28 +1,29 @@ # [916.Word Subsets][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 two string arrays `words1` and `words2`. + +A string `b` is a **subset** of string `a` if every letter in `b` occurs in `a` including multiplicity. + +- For example, `"wrr"` is a subset of `"warrior"` but is not a subset of `"world"`. + +A string `a` from `words1` is **universal** if for every string `b` in `words2`, `b` is a subset of `a`. + +Return an array of all the **universal** strings in `words1`. You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words1 = ["amazon","apple","facebook","google","leetcode"], words2 = ["e","o"] +Output: ["facebook","google","leetcode"] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Word Subsets -```go ``` - +Input: words1 = ["amazon","apple","facebook","google","leetcode"], words2 = ["l","e"] +Output: ["apple","google","leetcode"] +``` ## 结语 diff --git a/leetcode/901-1000/0916.Word-Subsets/Solution.go b/leetcode/901-1000/0916.Word-Subsets/Solution.go index d115ccf5e..7cc904bd4 100644 --- a/leetcode/901-1000/0916.Word-Subsets/Solution.go +++ b/leetcode/901-1000/0916.Word-Subsets/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words1 []string, words2 []string) []string { + ac := [26]int{} + for _, w := range words2 { + tmp := [26]int{} + for _, b := range w { + tmp[b-'a']++ + } + for i := range 26 { + if tmp[i] > ac[i] { + ac[i] = tmp[i] + } + } + } + ans := make([]string, 0) + for _, a := range words1 { + tmp := [26]int{} + for _, b := range a { + tmp[b-'a']++ + } + ok := true + for i := range 26 { + if ac[i] > tmp[i] { + ok = false + break + } + } + if ok { + ans = append(ans, a) + } + } + return ans } diff --git a/leetcode/901-1000/0916.Word-Subsets/Solution_test.go b/leetcode/901-1000/0916.Word-Subsets/Solution_test.go index 14ff50eb4..bbfc0cd08 100644 --- a/leetcode/901-1000/0916.Word-Subsets/Solution_test.go +++ b/leetcode/901-1000/0916.Word-Subsets/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + w1, w2 []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"amazon", "apple", "facebook", "google", "leetcode"}, []string{"e", "o"}, []string{"facebook", "google", "leetcode"}}, + {"TestCase2", []string{"amazon", "apple", "facebook", "google", "leetcode"}, []string{"l", "e"}, []string{"apple", "google", "leetcode"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.w1, c.w2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.w1, c.w2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9f32ef7d411cefb787236f74ba165edaec109d0b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 19 Aug 2024 09:13:37 +0800 Subject: [PATCH 042/450] Add solution and test-cases for problem 819 --- .../801-900/0819.Most-Common-Word/README.md | 29 +++++++------- .../801-900/0819.Most-Common-Word/Solution.go | 39 ++++++++++++++++++- .../0819.Most-Common-Word/Solution_test.go | 20 +++++----- 3 files changed, 62 insertions(+), 26 deletions(-) diff --git a/leetcode/801-900/0819.Most-Common-Word/README.md b/leetcode/801-900/0819.Most-Common-Word/README.md index dd326d23f..e683a56df 100644 --- a/leetcode/801-900/0819.Most-Common-Word/README.md +++ b/leetcode/801-900/0819.Most-Common-Word/README.md @@ -1,28 +1,29 @@ # [819.Most Common Word][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 +Given a string `paragraph` and a string array of the `banned` words banned, return the most frequent word that is not banned. It is **guaranteed** there is **at least one word** that is not banned, and that the answer is **unique**. + +The words in `paragraph` are **case-insensitive** and the answer should be returned in **lowercase**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +nput: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit.", banned = ["hit"] +Output: "ball" +Explanation: +"hit" occurs 3 times, but it is a banned word. +"ball" occurs twice (and no other word does), so it is the most frequent non-banned word in the paragraph. +Note that words in the paragraph are not case sensitive, +that punctuation is ignored (even if adjacent to words, such as "ball,"), +and that "hit" isn't the answer even though it occurs more because it is banned. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Most Common Word -```go ``` - +Input: paragraph = "a.", banned = [] +Output: "a" +``` ## 结语 diff --git a/leetcode/801-900/0819.Most-Common-Word/Solution.go b/leetcode/801-900/0819.Most-Common-Word/Solution.go index d115ccf5e..a84a93c7f 100644 --- a/leetcode/801-900/0819.Most-Common-Word/Solution.go +++ b/leetcode/801-900/0819.Most-Common-Word/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +var skipSymbol = map[byte]struct{}{ + '!': {}, '?': {}, '\'': {}, ',': {}, ';': {}, '.': {}, +} + +func Solution(paragraph string, banned []string) string { + words := strings.Split(paragraph, " ") + bm := make(map[string]struct{}) + for _, b := range banned { + bm[b] = struct{}{} + } + count := make(map[string]int) + for _, word := range words { + lower := strings.ToLower(word) + i := 0 + for ; i < len(word); i++ { + if _, ok := skipSymbol[word[i]]; ok { + break + } + } + w := lower[:i] + if _, ok := bm[w]; ok { + continue + } + + count[w]++ + } + ans := 0 + ansKey := "" + for k, c := range count { + if c > ans { + ansKey = k + ans = c + } + } + return ansKey } diff --git a/leetcode/801-900/0819.Most-Common-Word/Solution_test.go b/leetcode/801-900/0819.Most-Common-Word/Solution_test.go index 14ff50eb4..21525e3da 100644 --- a/leetcode/801-900/0819.Most-Common-Word/Solution_test.go +++ b/leetcode/801-900/0819.Most-Common-Word/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + p string + banned []string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "Bob hit a ball, the hit BALL flew far after it was hit.", []string{"hit"}, "ball"}, + {"TestCase2", "a.", []string{}, "a"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.p, c.banned) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.p, c.banned) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e0bb9f3f8214abd45822cfc335519ad5928121e6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 20 Aug 2024 09:37:50 +0800 Subject: [PATCH 043/450] Add solution and test-cases for problem 1032 --- .../1032.Stream-of-Characters/README.md | 43 +++++++---- .../1032.Stream-of-Characters/Solution.go | 74 ++++++++++++++++++- .../Solution_test.go | 19 +++-- 3 files changed, 108 insertions(+), 28 deletions(-) diff --git a/leetcode/1001-1100/1032.Stream-of-Characters/README.md b/leetcode/1001-1100/1032.Stream-of-Characters/README.md index a03ca6380..f725d2ede 100644 --- a/leetcode/1001-1100/1032.Stream-of-Characters/README.md +++ b/leetcode/1001-1100/1032.Stream-of-Characters/README.md @@ -1,28 +1,39 @@ # [1032.Stream of Characters][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 +Design an algorithm that accepts a stream of characters and checks if a suffix of these characters is a string of a given array of strings `words`. -**Example 1:** +For example, if `words = ["abc", "xyz"]` and the stream added the four characters (one by one) `'a'`, `'x'`, `'y'`, and `'z'`, your algorithm should detect that the suffix `"xyz"` of the characters `"axyz"` matches `"xyz"` from `words`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `StreamChecker` class: -## 题意 -> ... +- `StreamChecker(String[] words)` Initializes the object with the strings array `words`. +- `boolean query(char letter)` Accepts a new character from the stream and returns `true` if any non-empty suffix from the stream forms a word that is in `words`. -## 题解 +**Example 1:** -### 思路1 -> ... -Stream of Characters -```go ``` - +Input +["StreamChecker", "query", "query", "query", "query", "query", "query", "query", "query", "query", "query", "query", "query"] +[[["cd", "f", "kl"]], ["a"], ["b"], ["c"], ["d"], ["e"], ["f"], ["g"], ["h"], ["i"], ["j"], ["k"], ["l"]] +Output +[null, false, false, false, true, false, true, false, false, false, false, false, true] + +Explanation +StreamChecker streamChecker = new StreamChecker(["cd", "f", "kl"]); +streamChecker.query("a"); // return False +streamChecker.query("b"); // return False +streamChecker.query("c"); // return False +streamChecker.query("d"); // return True, because 'cd' is in the wordlist +streamChecker.query("e"); // return False +streamChecker.query("f"); // return True, because 'f' is in the wordlist +streamChecker.query("g"); // return False +streamChecker.query("h"); // return False +streamChecker.query("i"); // return False +streamChecker.query("j"); // return False +streamChecker.query("k"); // return False +streamChecker.query("l"); // return True, because 'kl' is in the wordlist +``` ## 结语 diff --git a/leetcode/1001-1100/1032.Stream-of-Characters/Solution.go b/leetcode/1001-1100/1032.Stream-of-Characters/Solution.go index d115ccf5e..9e7bc24e3 100644 --- a/leetcode/1001-1100/1032.Stream-of-Characters/Solution.go +++ b/leetcode/1001-1100/1032.Stream-of-Characters/Solution.go @@ -1,5 +1,75 @@ package Solution -func Solution(x bool) bool { - return x +type trie1032 struct { + end bool + child [26]*trie1032 +} + +type StreamChecker struct { + // trie + i int + ml int + q []byte // max length + t *trie1032 +} + +func Constructor1032(words []string) StreamChecker { + s := StreamChecker{ + t: &trie1032{}, + } + ml := 0 + for _, w := range words { + ml = max(ml, len(w)) + s.fill(w) + } + + s.q = make([]byte, ml) + s.ml = ml + return s +} + +func (this *StreamChecker) fill(word string) { + root := this.t + for i := len(word) - 1; i >= 0; i-- { + b := word[i] + if root.child[b-'a'] == nil { + root.child[b-'a'] = &trie1032{} + } + if i == 0 { + root.child[b-'a'].end = true + } + root = root.child[b-'a'] + } +} + +func (this *StreamChecker) Query(letter byte) bool { + if this.i == this.ml { + next := make([]byte, this.ml) + copy(next, this.q[1:]) + this.i = this.ml - 1 + this.q = next + } + this.q[this.i] = letter + this.i++ + root := this.t + for i := this.i - 1; i >= 0; i-- { + cur := this.q[i] - 'a' + if root.child[cur] == nil { + return false + } + if root.child[cur].end { + return true + } + root = root.child[cur] + } + return false +} + +func Solution(words []string, query []byte) []bool { + ans := make([]bool, len(query)) + c := Constructor1032(words) + for i := range query { + ans[i] = c.Query(query[i]) + } + return ans } diff --git a/leetcode/1001-1100/1032.Stream-of-Characters/Solution_test.go b/leetcode/1001-1100/1032.Stream-of-Characters/Solution_test.go index 14ff50eb4..5d5e8ae97 100644 --- a/leetcode/1001-1100/1032.Stream-of-Characters/Solution_test.go +++ b/leetcode/1001-1100/1032.Stream-of-Characters/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + words []string + query []byte + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"cd", "f", "kl"}, []byte("abcdefghijkl"), []bool{false, false, false, true, false, true, false, false, false, false, false, true}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.words, c.query) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.words, c.query) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 73af4cd82fac95f1a51b3cf189aeeec02f911871 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 21 Aug 2024 09:17:50 +0800 Subject: [PATCH 044/450] Add solution and test-cases for problem 981 --- .../0981.Time-Based-Key-Value-Store/README.md | 38 +++++++------ .../Solution.go | 55 ++++++++++++++++++- .../Solution_test.go | 12 ++-- 3 files changed, 79 insertions(+), 26 deletions(-) diff --git a/leetcode/901-1000/0981.Time-Based-Key-Value-Store/README.md b/leetcode/901-1000/0981.Time-Based-Key-Value-Store/README.md index cc35324d9..ccb6e4dd9 100644 --- a/leetcode/901-1000/0981.Time-Based-Key-Value-Store/README.md +++ b/leetcode/901-1000/0981.Time-Based-Key-Value-Store/README.md @@ -1,28 +1,32 @@ # [981.Time Based Key-Value Store][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 +Design a time-based key-value data structure that can store multiple values for the same key at different time stamps and retrieve the key's value at a certain timestamp. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `TimeMap` class: -## 题意 -> ... +- `TimeMap()` Initializes the object of the data structure. +- `void set(String key, String value, int timestamp)` Stores the `key` key with the `value` value at the given time `timestamp`. +- `String get(String key, int timestamp)` Returns a value such that `set` was called previously, with `timestamp_prev <= timestamp`. If there are multiple such values, it returns the value associated with the largest `timestamp_prev`. If there are no values, it returns `""`. -## 题解 +**Example 1:** -### 思路1 -> ... -Time Based Key-Value Store -```go ``` - +Input +["TimeMap", "set", "get", "get", "set", "get", "get"] +[[], ["foo", "bar", 1], ["foo", 1], ["foo", 3], ["foo", "bar2", 4], ["foo", 4], ["foo", 5]] +Output +[null, null, "bar", "bar", null, "bar2", "bar2"] + +Explanation +TimeMap timeMap = new TimeMap(); +timeMap.set("foo", "bar", 1); // store the key "foo" and value "bar" along with timestamp = 1. +timeMap.get("foo", 1); // return "bar" +timeMap.get("foo", 3); // return "bar", since there is no value corresponding to foo at timestamp 3 and timestamp 2, then the only value is at timestamp 1 is "bar". +timeMap.set("foo", "bar2", 4); // store the key "foo" and value "bar2" along with timestamp = 4. +timeMap.get("foo", 4); // return "bar2" +timeMap.get("foo", 5); // return "bar2" +``` ## 结语 diff --git a/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution.go b/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution.go index d115ccf5e..dd42e80eb 100644 --- a/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution.go +++ b/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution.go @@ -1,5 +1,56 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type storeItem struct { + timestamp int + val string +} +type TimeMap struct { + data map[string][]storeItem +} + +func Constructor981() TimeMap { + return TimeMap{ + data: make(map[string][]storeItem), + } +} + +func (this *TimeMap) Set(key string, value string, timestamp int) { + if _, ok := this.data[key]; !ok { + this.data[key] = make([]storeItem, 0) + } + this.data[key] = append(this.data[key], storeItem{timestamp, value}) +} + +func (this *TimeMap) Get(key string, timestamp int) string { + v, ok := this.data[key] + if !ok { + return "" + } + idx := sort.Search(len(v), func(i int) bool { + return v[i].timestamp > timestamp + }) + if idx == 0 { + return "" + } + return v[idx-1].val +} + +type input struct { + key, value string + timestamp int +} + +func Solution(inputs []input) []string { + c := Constructor981() + ans := make([]string, 0) + for _, i := range inputs { + if i.value == "" { + ans = append(ans, c.Get(i.key, i.timestamp)) + continue + } + c.Set(i.key, i.value, i.timestamp) + } + return ans } diff --git a/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution_test.go b/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution_test.go index 14ff50eb4..e8861d02b 100644 --- a/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution_test.go +++ b/leetcode/901-1000/0981.Time-Based-Key-Value-Store/Solution_test.go @@ -10,12 +10,10 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []input + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []input{{"foo", "bar", 1}, {"foo", "", 1}, {"foo", "", 3}, {"foo", "bar2", 4}, {"foo", "", 4}, {"foo", "", 5}}, []string{"bar", "bar", "bar2", "bar2"}}, } // 开始测试 @@ -30,10 +28,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3b1c18cfacb3e05f9bf8fce07fb398f375689c4a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 22 Aug 2024 09:24:06 +0800 Subject: [PATCH 045/450] Add solution and test-cases for problem 1357 --- .../README.md | 45 ++++++++++++------- .../Solution.go | 45 ++++++++++++++++++- .../Solution_test.go | 26 +++++++---- 3 files changed, 89 insertions(+), 27 deletions(-) diff --git a/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/README.md b/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/README.md index 7996da353..c2f934d4b 100644 --- a/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/README.md +++ b/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/README.md @@ -1,28 +1,41 @@ # [1357.Apply Discount Every n Orders][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 +There is a supermarket that is frequented by many customers. The products sold at the supermarket are represented as two parallel integer arrays `products` and `prices`, where the `ith` product has an ID of `products[i]` and a price of `prices[i]`. -**Example 1:** +When a customer is paying, their bill is represented as two parallel integer arrays `product` and `amount`, where the `jth` product they purchased has an ID of `product[j]`, and `amount[j]` is how much of the product they bought. Their subtotal is calculated as the sum of each `amount[j] * (price of the jth product)`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +The supermarket decided to have a sale. Every `nth` customer paying for their groceries will be given a **percentage discount**. The discount amount is given by `discount`, where they will be given `discount` percent off their subtotal. More formally, if their subtotal is `bill`, then they would actually pay `bill * ((100 - discount) / 100)`. -## 题意 -> ... +Implement the `Cashier` class: -## 题解 +- `Cashier(int n, int discount, int[] products, int[] prices)` Initializes the object with `n`, the `discount`, and the `products` and their `prices`. +- `double getBill(int[] product, int[] amount)` Returns the final total of the bill with the discount applied (if any). Answers within `10^-5` of the actual value will be accepted. -### 思路1 -> ... -Apply Discount Every n Orders -```go -``` +**Example 1:** +``` +Input +["Cashier","getBill","getBill","getBill","getBill","getBill","getBill","getBill"] +[[3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]],[[1,2],[1,2]],[[3,7],[10,10]],[[1,2,3,4,5,6,7],[1,1,1,1,1,1,1]],[[4],[10]],[[7,3],[10,10]],[[7,5,3,1,6,4,2],[10,10,10,9,9,9,7]],[[2,3,5],[5,3,2]]] +Output +[null,500.0,4000.0,800.0,4000.0,4000.0,7350.0,2500.0] +Explanation +Cashier cashier = new Cashier(3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]); +cashier.getBill([1,2],[1,2]); // return 500.0. 1st customer, no discount. + // bill = 1 * 100 + 2 * 200 = 500. +cashier.getBill([3,7],[10,10]); // return 4000.0. 2nd customer, no discount. + // bill = 10 * 300 + 10 * 100 = 4000. +cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]); // return 800.0. 3rd customer, 50% discount. + // Original bill = 1600 + // Actual bill = 1600 * ((100 - 50) / 100) = 800. +cashier.getBill([4],[10]); // return 4000.0. 4th customer, no discount. +cashier.getBill([7,3],[10,10]); // return 4000.0. 5th customer, no discount. +cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // return 7350.0. 6th customer, 50% discount. + // Original bill = 14700, but with + // Actual bill = 14700 * ((100 - 50) / 100) = 7350. +cashier.getBill([2,3,5],[5,3,2]); // return 2500.0. 7th customer, no discount. +``` ## 结语 diff --git a/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution.go b/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution.go index d115ccf5e..0a6743a37 100644 --- a/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution.go +++ b/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +type Cashier struct { + n, cur int + + discount float64 + + pp map[int]int +} + +func Constructor1357(n int, discount int, products []int, prices []int) Cashier { + pp := map[int]int{} + for i := range products { + pp[products[i]] = prices[i] + } + return Cashier{ + n: n, cur: 0, discount: float64(100-discount) / 100.0, + pp: pp, + } +} + +func (this *Cashier) GetBill(product []int, amount []int) float64 { + cost := 0 + for i := range product { + cost += this.pp[product[i]] * amount[i] + } + fcost := float64(cost) + if this.cur == this.n-1 { + fcost *= this.discount + } + this.cur = (this.cur + 1) % this.n + return fcost +} + +type input struct { + product, amount []int +} + +func Solution(n, discount int, products, prices []int, inputs []input) []float64 { + c := Constructor1357(n, discount, products, prices) + ans := make([]float64, len(inputs)) + for i := range inputs { + ans[i] = c.GetBill(inputs[i].product, inputs[i].amount) + } + return ans } diff --git a/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution_test.go b/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution_test.go index 14ff50eb4..d78ef6d90 100644 --- a/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution_test.go +++ b/leetcode/1301-1400/1357.Apply-Discount-Every-n-Orders/Solution_test.go @@ -9,19 +9,27 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, discount int + products, prices []int + inputs []input + expect []float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 50, []int{1, 2, 3, 4, 5, 6, 7}, []int{100, 200, 300, 400, 300, 200, 100}, []input{ + {[]int{1, 2}, []int{1, 2}}, + {[]int{3, 7}, []int{10, 10}}, + {[]int{1, 2, 3, 4, 5, 6, 7}, []int{1, 1, 1, 1, 1, 1, 1}}, + {[]int{4}, []int{10}}, + {[]int{7, 3}, []int{10, 10}}, + {[]int{7, 5, 3, 1, 6, 4, 2}, []int{10, 10, 10, 9, 9, 9, 7}}, + {[]int{2, 3, 5}, []int{5, 3, 2}}, + }, []float64{500.0, 4000.0, 800.0, 4000.0, 4000.0, 7350.0, 2500.0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.discount, c.products, c.prices, c.inputs) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +38,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c5122bba2d4d22323fbf3a47f220ce48a74415d2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 23 Aug 2024 09:09:14 +0800 Subject: [PATCH 046/450] Add solution and test-cases for problem 1910 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 20 +++++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 52 insertions(+), 26 deletions(-) diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md index a1ecd794f..c62cd4877 100755 --- a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md @@ -1,28 +1,38 @@ # [1910.Remove All Occurrences of a Substring][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 +Given two strings `s` and `part`, perform the following operation on `s` until **all** occurrences of the substring `part` are removed: + +- Find the **leftmost** occurrence of the substring `part` and **remove** it from `s`. + +Return `s` after removing all occurrences of `part`. + +A **substring** is a contiguous sequence of characters in a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "daabcbaabcbc", part = "abc" +Output: "dab" +Explanation: The following operations are done: +- s = "daabcbaabcbc", remove "abc" starting at index 2, so s = "dabaabcbc". +- s = "dabaabcbc", remove "abc" starting at index 4, so s = "dababc". +- s = "dababc", remove "abc" starting at index 3, so s = "dab". +Now s has no occurrences of "abc". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Remove All Occurrences of a Substring -```go ``` - +Input: s = "axxxxyyyyb", part = "xy" +Output: "ab" +Explanation: The following operations are done: +- s = "axxxxyyyyb", remove "xy" starting at index 4 so s = "axxxyyyb". +- s = "axxxyyyb", remove "xy" starting at index 3 so s = "axxyyb". +- s = "axxyyb", remove "xy" starting at index 2 so s = "axyb". +- s = "axyb", remove "xy" starting at index 1 so s = "ab". +Now s has no occurrences of "xy". +``` ## 结语 diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go index d115ccf5e..ce77c9053 100644 --- a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s string, part string) string { + ls := len(s) + lp := len(part) + + for ls >= lp { + index := strings.Index(s, part) + if index == -1 { + break + } + // a, b, c, d + // a, b, c, + s = s[:index] + s[index+lp:] + ls = len(s) + } + + return s } diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go index 14ff50eb4..6d7ff7dff 100644 --- a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s, p string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "daabcbaabcbc", "abc", "dab"}, + {"TestCase2", "axxxxyyyyb", "xy", "ab"}, + {"TestCase3", "eemckxmckx", "emckx", ""}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.p) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.p) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cf0cff1a4bf9c6142148ef11a79bde54f92f2797 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 25 Aug 2024 14:59:01 +0800 Subject: [PATCH 047/450] Add solution and test-cases for problem 1021 --- .../README.md | 43 +++++++++++++------ .../Solution.go | 22 +++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/README.md b/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/README.md index 902d1303f..197aebce7 100644 --- a/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/README.md +++ b/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/README.md @@ -1,28 +1,45 @@ # [1021.Remove Outermost Parentheses][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 +A valid parentheses string is either empty `""`, `"(" + A + ")"`, or `A + B`, where `A` and `B` are valid parentheses strings, and `+` represents string concatenation. + +- For example, `""`, `"()"`, `"(())()"`, and `"(()(()))"` are all valid parentheses strings. + +A valid parentheses string `s` is primitive if it is nonempty, and there does not exist a way to split it into `s = A + B`, with `A` and `B` nonempty valid parentheses strings. + +Given a valid parentheses string `s`, consider its primitive decomposition: `s = P1 + P2 + ... + Pk`, where `Pi` are primitive valid parentheses strings. + +Return `s` after removing the outermost parentheses of every primitive string in the primitive decomposition of `s`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "(()())(())" +Output: "()()()" +Explanation: +The input string is "(()())(())", with primitive decomposition "(()())" + "(())". +After removing outer parentheses of each part, this is "()()" + "()" = "()()()". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Remove Outermost Parentheses -```go ``` +Input: s = "(()())(())(()(()))" +Output: "()()()()(())" +Explanation: +The input string is "(()())(())(()(()))", with primitive decomposition "(()())" + "(())" + "(()(()))". +After removing outer parentheses of each part, this is "()()" + "()" + "()(())" = "()()()()(())". +``` + +**Example 3:** +``` +Input: s = "()()" +Output: "" +Explanation: +The input string is "()()", with primitive decomposition "()" + "()". +After removing outer parentheses of each part, this is "" + "" = "". +``` ## 结语 diff --git a/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution.go b/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution.go index d115ccf5e..566e6b758 100644 --- a/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution.go +++ b/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s string) string { + left := 1 + leftIndex := 0 + ans := strings.Builder{} + for i := 1; i < len(s); i++ { + if s[i] == '(' { + left++ + continue + } + left-- + if left == 0 { + ans.WriteString(s[leftIndex+1 : i]) + leftIndex = i + 1 + left = 1 + i++ + } + } + return ans.String() } diff --git a/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution_test.go b/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution_test.go index 14ff50eb4..203557865 100644 --- a/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution_test.go +++ b/leetcode/1001-1100/1021.Remove-Outermost-Parentheses/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "(()())(())", "()()()"}, + {"TestCase2", "(()())(())(()(()))", "()()()()(())"}, + {"TestCase3", "()()", ""}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f9c431aed84ca12214fab8918fbc389583ae629e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 26 Aug 2024 09:14:44 +0800 Subject: [PATCH 048/450] Add solution and test-cases for problem 1381 --- .../README.md | 43 ++++++++++++ .../Solution.go | 66 ++++++++++++++++++- .../Solution_test.go | 31 +++++---- 3 files changed, 127 insertions(+), 13 deletions(-) create mode 100644 leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/README.md diff --git a/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/README.md b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/README.md new file mode 100644 index 000000000..4f2b31aef --- /dev/null +++ b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/README.md @@ -0,0 +1,43 @@ +# [1381.Design a Stack With Increment Operation][title] + +## Description +Design a stack that supports increment operations on its elements. + +Implement the `CustomStack` class: + +- `CustomStack(int maxSize)` Initializes the object with `maxSize` which is the maximum number of elements in the stack. +- `void push(int x)` Adds `x` to the top of the stack if the stack has not reached the `maxSize`. +- `int pop()` Pops and returns the top of the stack or `-1` if the stack is empty. +- `void inc(int k, int val)` Increments the bottom `k` elements of the stack by `val`. If there are less than `k` elements in the stack, increment all the elements in the stack. + + +**Example 1:** + +``` +Input +["CustomStack","push","push","pop","push","push","push","increment","increment","pop","pop","pop","pop"] +[[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]] +Output +[null,null,null,2,null,null,null,null,null,103,202,201,-1] +Explanation +CustomStack stk = new CustomStack(3); // Stack is Empty [] +stk.push(1); // stack becomes [1] +stk.push(2); // stack becomes [1, 2] +stk.pop(); // return 2 --> Return top of the stack 2, stack becomes [1] +stk.push(2); // stack becomes [1, 2] +stk.push(3); // stack becomes [1, 2, 3] +stk.push(4); // stack still [1, 2, 3], Do not add another elements as size is 4 +stk.increment(5, 100); // stack becomes [101, 102, 103] +stk.increment(2, 100); // stack becomes [201, 202, 103] +stk.pop(); // return 103 --> Return top of the stack 103, stack becomes [201, 202] +stk.pop(); // return 202 --> Return top of the stack 202, stack becomes [201] +stk.pop(); // return 201 --> Return top of the stack 201, stack becomes [] +stk.pop(); // return -1 --> Stack is empty return -1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-a-stack-with-increment-operation +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go index d115ccf5e..01b94eded 100755 --- a/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go +++ b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go @@ -1,5 +1,67 @@ package Solution -func Solution(x bool) bool { - return x +type CustomStack struct { + index int + stack []int +} + +func Constructor(maxSize int) CustomStack { + return CustomStack{ + stack: make([]int, maxSize), + index: -1, + } +} + +func (this *CustomStack) Push(x int) { + if this.index == len(this.stack)-1 { + return + } + + this.index++ + this.stack[this.index] = x +} + +func (this *CustomStack) Pop() int { + if this.index == -1 { + return -1 + } + + top := this.stack[this.index] + this.index-- + return top +} + +func (this *CustomStack) Increment(k int, val int) { + if this.index == -1 { + return + } + + // 1, 2, 3, 4, + // 3 + for i := 0; i <= this.index && i < k; i++ { + this.stack[i] += val + } +} + +type op struct { + name string + a, b int +} + +func Solution(maxSize int, opts []op) []int { + c := Constructor(maxSize) + ans := make([]int, 0) + for _, o := range opts { + if o.name == "push" { + c.Push(o.a) + continue + } + if o.name == "i" { + c.Increment(o.a, o.b) + continue + } + + ans = append(ans, c.Pop()) + } + return ans } diff --git a/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go index 14ff50eb4..1bbf8acb2 100755 --- a/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go +++ b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go @@ -9,31 +9,40 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + maxSize int + opts []op + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, []op{ + {"push", 1, 0}, {"push", 2, 0}, + {"pop", 0, 0}, + + {"push", 2, 0}, {"push", 3, 0}, {"push", 4, 0}, + {"i", 5, 100}, {"i", 2, 100}, + {"pop", 0, 0}, + {"pop", 0, 0}, + {"pop", 0, 0}, + {"pop", 0, 0}, + }, []int{2, 103, 202, 201, -1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.maxSize, c.opts) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.maxSize, c.opts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e599554c23e1695b943eb5a43f76927df6e124c4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 27 Aug 2024 09:03:18 +0800 Subject: [PATCH 049/450] Add solution and test-cases for problem 398 --- .../301-400/0398.Random-Pick-Index/README.md | 34 ++++++++-------- .../0398.Random-Pick-Index/Solution.go | 39 ++++++++++++++++++- .../0398.Random-Pick-Index/Solution_test.go | 20 +++++----- 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/leetcode/301-400/0398.Random-Pick-Index/README.md b/leetcode/301-400/0398.Random-Pick-Index/README.md index c8b7d18e6..34d77b2f8 100644 --- a/leetcode/301-400/0398.Random-Pick-Index/README.md +++ b/leetcode/301-400/0398.Random-Pick-Index/README.md @@ -1,28 +1,28 @@ # [398.Random Pick Index][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 +Given an integer array `nums` with possible **duplicates**, randomly output the index of a given `targett` number. You can assume that the given target number must exist in the array. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `Solution` class: -## 题意 -> ... +- `Solution(int[] nums)` Initializes the object with the array `nums`. +- `int pick(int target)` Picks a random index `i` from `nums` where `nums[i] == target`. If there are multiple valid i's, then each index should have an equal probability of returning. -## 题解 +**Example 1:** -### 思路1 -> ... -Random Pick Index -```go ``` - +Input +["Solution", "pick", "pick", "pick"] +[[[1, 2, 3, 3, 3]], [3], [1], [3]] +Output +[null, 4, 0, 2] + +Explanation +Solution solution = new Solution([1, 2, 3, 3, 3]); +solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning. +solution.pick(1); // It should return 0. Since in the array only nums[0] is equal to 1. +solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning. +``` ## 结语 diff --git a/leetcode/301-400/0398.Random-Pick-Index/Solution.go b/leetcode/301-400/0398.Random-Pick-Index/Solution.go index d115ccf5e..fb4c3a73e 100644 --- a/leetcode/301-400/0398.Random-Pick-Index/Solution.go +++ b/leetcode/301-400/0398.Random-Pick-Index/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +type item398 struct { + index int + list []int +} + +type Solution1 struct { + data map[int]item398 +} + +func Constructor(nums []int) Solution1 { + s := Solution1{data: make(map[int]item398)} + for i, n := range nums { + if _, ok := s.data[n]; !ok { + s.data[n] = item398{} + } + l := s.data[n] + l.list = append(l.list, i) + s.data[n] = l + } + return s +} + +func (this *Solution1) Pick(target int) int { + v := this.data[target] + cur := v.index + v.index = (v.index + 1) % len(v.list) + this.data[target] = v + return this.data[target].list[cur] +} + +func Solution(nums []int, check []int) []int { + c := Constructor(nums) + ans := make([]int, len(check)) + for i, n := range check { + ans[i] = c.Pick(n) + } + return ans } diff --git a/leetcode/301-400/0398.Random-Pick-Index/Solution_test.go b/leetcode/301-400/0398.Random-Pick-Index/Solution_test.go index 14ff50eb4..bdcc6bf9f 100644 --- a/leetcode/301-400/0398.Random-Pick-Index/Solution_test.go +++ b/leetcode/301-400/0398.Random-Pick-Index/Solution_test.go @@ -9,31 +9,29 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums, check []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 3, 3}, []int{3, 1, 3}, []int{2, 0, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.check) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.check) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c51be5833609c4ce34589bff87a453a737e4ace0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 28 Aug 2024 09:08:43 +0800 Subject: [PATCH 050/450] Add solution and test-cases for problem 1905 --- .../1901-2000/1905.Count-Sub-Islands/1.png | Bin 0 -> 7452 bytes .../1901-2000/1905.Count-Sub-Islands/2.png | Bin 0 -> 6610 bytes .../1905.Count-Sub-Islands/README.md | 33 ++++++++++------- .../1905.Count-Sub-Islands/Solution.go | 35 +++++++++++++++++- .../1905.Count-Sub-Islands/Solution_test.go | 19 +++++----- 5 files changed, 61 insertions(+), 26 deletions(-) create mode 100644 leetcode/1901-2000/1905.Count-Sub-Islands/1.png create mode 100644 leetcode/1901-2000/1905.Count-Sub-Islands/2.png diff --git a/leetcode/1901-2000/1905.Count-Sub-Islands/1.png b/leetcode/1901-2000/1905.Count-Sub-Islands/1.png new file mode 100644 index 0000000000000000000000000000000000000000..862075b3d5807224de4bb510d480aaca2b733a2a GIT binary patch literal 7452 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 literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1905.Count-Sub-Islands/README.md b/leetcode/1901-2000/1905.Count-Sub-Islands/README.md index e8843782e..40e08f0c1 100755 --- a/leetcode/1901-2000/1905.Count-Sub-Islands/README.md +++ b/leetcode/1901-2000/1905.Count-Sub-Islands/README.md @@ -1,28 +1,33 @@ # [1905.Count Sub Islands][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 two `m x n` binary matrices `grid1` and `grid2` containing only `0`'s (representing water) and `1`'s (representing land). An **island** is a group of `1`'s connected **4-directionally** (horizontal or vertical). Any cells outside of the grid are considered water cells. + +An island in `grid2` is considered a **sub-island** if there is an island in `grid1` that contains **all** the cells that make up **this** island in `grid2`. + +Return the **number** of islands in `grid2` that are considered **sub-islands**. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid1 = [[1,1,1,0,0],[0,1,1,1,1],[0,0,0,0,0],[1,0,0,0,0],[1,1,0,1,1]], grid2 = [[1,1,1,0,0],[0,0,1,1,1],[0,1,0,0,0],[1,0,1,1,0],[0,1,0,1,0]] +Output: 3 +Explanation: In the picture above, the grid on the left is grid1 and the grid on the right is grid2. +The 1s colored red in grid2 are those considered to be part of a sub-island. There are three sub-islands. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](2.png) -### 思路1 -> ... -Count Sub Islands -```go ``` - +Input: grid1 = [[1,0,1,0,1],[1,1,1,1,1],[0,0,0,0,0],[1,1,1,1,1],[1,0,1,0,1]], grid2 = [[0,0,0,0,0],[1,1,1,1,1],[0,1,0,1,0],[0,1,0,1,0],[1,0,0,0,1]] +Output: 2 +Explanation: In the picture above, the grid on the left is grid1 and the grid on the right is grid2. +The 1s colored red in grid2 are those considered to be part of a sub-island. There are two sub-islands. +``` ## 结语 diff --git a/leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go index d115ccf5e..408eb5787 100644 --- a/leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go +++ b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +var dirs1905 = [][]int{ + {1, 0}, {-1, 0}, {0, 1}, {0, -1}, +} + +func Solution(grid1 [][]int, grid2 [][]int) int { + m, n := len(grid1), len(grid1[0]) + var dfs func(int, int, *bool) + dfs = func(x, y int, ok *bool) { + if x < 0 || x >= m || y < 0 || y >= n || grid2[x][y] == -1 || grid2[x][y] == 0 { + return + } + grid2[x][y] = -1 + if grid1[x][y] != 1 { + *ok = false + } + for _, dir := range dirs1905 { + nx, ny := dir[0]+x, dir[1]+y + dfs(nx, ny, ok) + } + } + ans := 0 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if grid2[i][j] == 1 { + ok := true + dfs(i, j, &ok) + if ok { + ans++ + } + } + } + } + return ans } diff --git a/leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go index 14ff50eb4..c5f2f0e9c 100644 --- a/leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go +++ b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + g1, g2 [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 1, 1, 0, 0}, {0, 1, 1, 1, 1}, {0, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 1, 0, 1, 1}}, [][]int{{1, 1, 1, 0, 0}, {0, 0, 1, 1, 1}, {0, 1, 0, 0, 0}, {1, 0, 1, 1, 0}, {0, 1, 0, 1, 0}}, 3}, + {"TestCase2", [][]int{{1, 0, 1, 0, 1}, {1, 1, 1, 1, 1}, {0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {1, 0, 1, 0, 1}}, [][]int{{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {0, 1, 0, 1, 0}, {0, 1, 0, 1, 0}, {1, 0, 0, 0, 1}}, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.g1, c.g2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.g1, c.g2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 84dec9b2e650130c3c3e47d0fdff1b74e9b25260 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 Sep 2024 13:36:44 +0800 Subject: [PATCH 051/450] Add solution and test-cases for problem 324 --- .../301-400/0324.Wiggle-Sort-II/README.md | 24 +++++++-------- .../301-400/0324.Wiggle-Sort-II/Solution.go | 30 +++++++++++++++++-- .../0324.Wiggle-Sort-II/Solution_test.go | 20 ++++++------- 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/leetcode/301-400/0324.Wiggle-Sort-II/README.md b/leetcode/301-400/0324.Wiggle-Sort-II/README.md index 8623c3a15..b6a4521e2 100644 --- a/leetcode/301-400/0324.Wiggle-Sort-II/README.md +++ b/leetcode/301-400/0324.Wiggle-Sort-II/README.md @@ -1,28 +1,24 @@ # [324.Wiggle Sort II][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 +Given an integer array `nums`, reorder it such that `nums[0] < nums[1] > nums[2] < nums[3]...`. + +You may assume the input array always has a valid answer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,5,1,1,6,4] +Output: [1,6,1,5,1,4] +Explanation: [1,4,1,5,1,6] is also accepted. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Wiggle Sort II -```go ``` - +Input: nums = [1,3,2,2,3,1] +Output: [2,3,1,3,1,2] +``` ## 结语 diff --git a/leetcode/301-400/0324.Wiggle-Sort-II/Solution.go b/leetcode/301-400/0324.Wiggle-Sort-II/Solution.go index d115ccf5e..2fef1a412 100644 --- a/leetcode/301-400/0324.Wiggle-Sort-II/Solution.go +++ b/leetcode/301-400/0324.Wiggle-Sort-II/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) { + l := len(nums) + tmp := make([]int, l) + copy(tmp, nums) + sort.Ints(tmp) + // 1,5,1,1,6,4 + // 1, 2, 3, 4, 5, 6 + left, right := l/2, l-1 + if l&1 == 0 { + left-- + } + end := left + // 1,5,1,1,6,4 + // 1, 1, 1, 2, 4, 5, 6 + // 1, 6, 1, 5, 1, 4, 2 + + index := 0 + for right > end { + nums[index] = tmp[left] + nums[index+1] = tmp[right] + right, left = right-1, left-1 + index += 2 + } + if left >= 0 { + nums[index] = tmp[left] + } } diff --git a/leetcode/301-400/0324.Wiggle-Sort-II/Solution_test.go b/leetcode/301-400/0324.Wiggle-Sort-II/Solution_test.go index 14ff50eb4..0fa11c92c 100644 --- a/leetcode/301-400/0324.Wiggle-Sort-II/Solution_test.go +++ b/leetcode/301-400/0324.Wiggle-Sort-II/Solution_test.go @@ -10,30 +10,30 @@ 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, 5, 1, 1, 6, 4}, []int{1, 6, 1, 5, 1, 4}}, + {"TestCase2", []int{1, 3, 2, 2, 3, 1}, []int{2, 3, 1, 3, 1, 2}}, + {"TestCase3", []int{1, 2, 3, 4, 5}, []int{3, 5, 2, 4, 1}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { + Solution(c.inputs) + if !reflect.DeepEqual(c.inputs, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + c.expect, c.inputs, c.inputs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d773fa7768b796befc3150427a04fd501fc2f581 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 Sep 2024 09:06:33 +0800 Subject: [PATCH 052/450] Add solution and test-cases for problem 1894 --- .../README.md | 44 +++++++++++++------ .../Solution.go | 20 ++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 58 insertions(+), 26 deletions(-) diff --git a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md index dbec3cfed..428ea9c9e 100755 --- a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md +++ b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md @@ -1,28 +1,44 @@ # [1894.Find the Student that Will Replace the Chalk][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 +There are `n` students in a class numbered from `0` to `n - 1`. The teacher will give each student a problem starting with the student number `0`, then the student number `1`, and so on until the teacher reaches the student number `n - 1`. After that, the teacher will restart the process, starting with the student number `0` again. + +You are given a **0-indexed** integer array `chalk` and an integer `k`. There are initially `k` pieces of chalk. When the student number `i` is given a problem to solve, they will use `chalk[i]` pieces of chalk to solve that problem. However, if the current number of chalk pieces is **strictly less** than `chalk[i]`, then the student number `i` will be asked to **replace** the chalk. + +Return the **index** of the student that will **replace** the chalk pieces. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: chalk = [5,1,5], k = 22 +Output: 0 +Explanation: The students go in turns as follows: +- Student number 0 uses 5 chalk, so k = 17. +- Student number 1 uses 1 chalk, so k = 16. +- Student number 2 uses 5 chalk, so k = 11. +- Student number 0 uses 5 chalk, so k = 6. +- Student number 1 uses 1 chalk, so k = 5. +- Student number 2 uses 5 chalk, so k = 0. +Student number 0 does not have enough chalk, so they will have to replace it. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find the Student that Will Replace the Chalk -```go ``` - +Input: chalk = [3,4,1,2], k = 25 +Output: 1 +Explanation: The students go in turns as follows: +- Student number 0 uses 3 chalk so k = 22. +- Student number 1 uses 4 chalk so k = 18. +- Student number 2 uses 1 chalk so k = 17. +- Student number 3 uses 2 chalk so k = 15. +- Student number 0 uses 3 chalk so k = 12. +- Student number 1 uses 4 chalk so k = 8. +- Student number 2 uses 1 chalk so k = 7. +- Student number 3 uses 2 chalk so k = 5. +- Student number 0 uses 3 chalk so k = 2. +Student number 1 does not have enough chalk, so they will have to replace it. +``` ## 结语 diff --git a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go index d115ccf5e..32beefd52 100644 --- a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go +++ b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(chalk []int, k int) int { + l := len(chalk) + for i := 1; i < l; i++ { + chalk[i] += chalk[i-1] + } + k %= chalk[l-1] + idx := sort.Search(l, func(i int) bool { + return chalk[i] >= k + }) + if idx == l { + return 0 + } + if chalk[idx] == k { + return (idx + 1) % l + } + return idx } diff --git a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go index 14ff50eb4..e2de9ec16 100644 --- a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go +++ b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + chalk []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 1, 5}, 22, 0}, + {"TestCase2", []int{3, 4, 1, 2}, 25, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.chalk, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.chalk, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d2c8e021546fffd8df136fc7de53221f4848eb4b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 3 Sep 2024 08:59:03 +0800 Subject: [PATCH 053/450] Add solution and test-cases for problem 1945 --- .../README.md | 45 +++++++++++++------ .../Solution.go | 22 ++++++++- .../Solution_test.go | 21 ++++----- 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md index c775ed4fa..95a958c99 100755 --- a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md +++ b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md @@ -1,28 +1,47 @@ # [1945.Sum of Digits of String After Convert][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 a string `s` consisting of lowercase English letters, and an integer `k`. + +First, **convert** s into an integer by replacing each letter with its position in the alphabet (i.e., replace `'a'` with `1`, `'b'` with `2`, ..., `'z'` with `26`). Then, **transform** the integer by replacing it with the **sum of its digits**. Repeat the **transform** operation `k` **times** in total. + +For example, if `s = "zbax"` and `k = 2`, then the resulting integer would be `8` by the following operations: + +- **Convert**: `"zbax" ➝ "(26)(2)(1)(24)" ➝ "262124" ➝ 262124` +- **Transform #1**: `262124 ➝ 2 + 6 + 2 + 1 + 2 + 4 ➝ 17` +- **Transform #2**: `17 ➝ 1 + 7 ➝ 8` + +Return the resulting integer after performing the operations described above. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "iiii", k = 1 +Output: 36 +Explanation: The operations are as follows: +- Convert: "iiii" ➝ "(9)(9)(9)(9)" ➝ "9999" ➝ 9999 +- Transform #1: 9999 ➝ 9 + 9 + 9 + 9 ➝ 36 +Thus the resulting integer is 36. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Sum of Digits of String After Convert -```go ``` +Input: s = "leetcode", k = 2 +Output: 6 +Explanation: The operations are as follows: +- Convert: "leetcode" ➝ "(12)(5)(5)(20)(3)(15)(4)(5)" ➝ "12552031545" ➝ 12552031545 +- Transform #1: 12552031545 ➝ 1 + 2 + 5 + 5 + 2 + 0 + 3 + 1 + 5 + 4 + 5 ➝ 33 +- Transform #2: 33 ➝ 3 + 3 ➝ 6 +Thus the resulting integer is 6. +``` + +**Example 3:** +``` +Input: s = "zbax", k = 2 +Output: 8 +``` ## 结语 diff --git a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go index d115ccf5e..53f092897 100644 --- a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go +++ b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) int { + sum := 0 + k-- + for _, b := range s { + tmp := int(b-'a') + 1 + for tmp > 0 { + sum += tmp % 10 + tmp /= 10 + } + } + for ; k > 0; k-- { + tmp := 0 + for sum > 0 { + tmp += sum % 10 + sum /= 10 + } + sum = tmp + } + + return sum } diff --git a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go index 14ff50eb4..3f4e7bd47 100644 --- a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go +++ b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "iiii", 1, 36}, + {"TestCase2", "leetcode", 2, 6}, + {"TestCase3", "zbax", 2, 8}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3ceac883891de6c0110426b6eaa8c16503ec26f6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 4 Sep 2024 23:22:47 +0800 Subject: [PATCH 054/450] Add solution and test-cases for problem 874 --- .../0874.Walking-Robot-Simulation/README.md | 60 ++++++-- .../0874.Walking-Robot-Simulation/Solution.go | 129 +++++++++++++++++- .../Solution_test.go | 23 ++-- 3 files changed, 186 insertions(+), 26 deletions(-) diff --git a/leetcode/801-900/0874.Walking-Robot-Simulation/README.md b/leetcode/801-900/0874.Walking-Robot-Simulation/README.md index 499b49344..0ea9ebe41 100644 --- a/leetcode/801-900/0874.Walking-Robot-Simulation/README.md +++ b/leetcode/801-900/0874.Walking-Robot-Simulation/README.md @@ -1,28 +1,62 @@ # [874.Walking Robot Simulation][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 +A robot on an infinite XY-plane starts at point `(0, 0)` facing north. The robot can receive a sequence of these three possible types of `commands`: + +- `-2`: Turn left `90` degrees. +- `-1`: Turn right `90` degrees. +- `1 <= k <= 9`: Move forward `k` units, one unit at a time. + +Some of the grid squares are `obstacles`. The `ith` obstacle is at grid point `obstacles[i] = (xi, yi)`. If the robot runs into an obstacle, then it will instead stay in its current location and move on to the next command. + +Return the **maximum Euclidean distance** that the robot ever gets from the origin **squared** (i.e. if the distance is `5`, return `25`). + +**Note**: + +- North means +Y direction. +- East means +X direction. +- South means -Y direction. +- West means -X direction. +- There can be obstacle in [0,0]. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: commands = [4,-1,3], obstacles = [] +Output: 25 +Explanation: The robot starts at (0, 0): +1. Move north 4 units to (0, 4). +2. Turn right. +3. Move east 3 units to (3, 4). +The furthest point the robot ever gets from the origin is (3, 4), which squared is 32 + 42 = 25 units away. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Walking Robot Simulation -```go ``` +Input: commands = [4,-1,4,-2,4], obstacles = [[2,4]] +Output: 65 +Explanation: The robot starts at (0, 0): +1. Move north 4 units to (0, 4). +2. Turn right. +3. Move east 1 unit and get blocked by the obstacle at (2, 4), robot is at (1, 4). +4. Turn left. +5. Move north 4 units to (1, 8). +The furthest point the robot ever gets from the origin is (1, 8), which squared is 12 + 82 = 65 units away. +``` + +**Example 3:** +``` +Input: commands = [6,-1,-1,6], obstacles = [] +Output: 36 +Explanation: The robot starts at (0, 0): +1. Move north 6 units to (0, 6). +2. Turn right. +3. Turn right. +4. Move south 6 units to (0, 0). +The furthest point the robot ever gets from the origin is (0, 6), which squared is 62 = 36 units away. +``` ## 结语 diff --git a/leetcode/801-900/0874.Walking-Robot-Simulation/Solution.go b/leetcode/801-900/0874.Walking-Robot-Simulation/Solution.go index d115ccf5e..1130fd12c 100644 --- a/leetcode/801-900/0874.Walking-Robot-Simulation/Solution.go +++ b/leetcode/801-900/0874.Walking-Robot-Simulation/Solution.go @@ -1,5 +1,130 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func nextDir(cur byte, op int) byte { + if cur == 'n' { + if op == -1 { + return 'e' + } + return 'w' + } + if cur == 'w' { + if op == -1 { + return 'n' + } + return 's' + } + if cur == 's' { + if op == -1 { + return 'w' + } + return 'e' + } + if op == -1 { + return 's' + } + return 'n' +} + +func nextSteps(cur byte) [2]int { + if cur == 'n' { + return [2]int{0, 1} + } + if cur == 'w' { + return [2]int{-1, 0} + } + if cur == 's' { + return [2]int{0, -1} + } + return [2]int{1, 0} +} + +func Solution(commands []int, obstacles [][]int) int { + x, y := 0, 0 + ans := 0 + snKeys := make([]int, 0) + ewKeys := make([]int, 0) + snIn := make(map[int][]int) + ewIn := make(map[int][]int) + + for _, o := range obstacles { + if _, ok := snIn[o[0]]; !ok { + snIn[o[0]] = []int{} + snKeys = append(snKeys, o[0]) + } + snIn[o[0]] = append(snIn[o[0]], o[1]) + + if _, ok := ewIn[o[1]]; !ok { + ewIn[o[1]] = []int{} + ewKeys = append(ewKeys, o[1]) + } + ewIn[o[1]] = append(ewIn[o[1]], o[0]) + } + sort.Ints(snKeys) + sort.Ints(ewKeys) + + for k := range snIn { + sort.Ints(snIn[k]) + } + for k := range ewIn { + sort.Ints(ewIn[k]) + } + + var check func(x, y, tx, ty int, cur byte) (int, int) + check = func(x, y, tx, ty int, cur byte) (int, int) { + if cur == 'n' || cur == 's' { + v, ok := snIn[x] + if !ok { + return tx, ty + } + idx := sort.Search(len(v), func(i int) bool { + return v[i] > y + }) + if cur == 'n' { + if idx == len(v) || v[idx] > ty || v[idx] == y { + return tx, ty + } + return x, v[idx] - 1 + } + if idx == 0 || v[idx-1] < ty { + return tx, ty + } + return x, v[idx-1] + 1 + } + if cur == 'w' || cur == 'e' { + v, ok := ewIn[y] + if !ok { + return tx, ty + } + idx := sort.Search(len(v), func(i int) bool { + return v[i] > x + }) + if cur == 'w' { + if idx == 0 || v[idx-1] < tx || v[idx-1] == x { + return tx, ty + } + return v[idx-1] + 1, y + } + if idx == len(v) || v[idx] > tx { + return tx, ty + } + return v[idx] - 1, y + } + return tx, ty + } + dir := byte('n') + cur := nextSteps(dir) + for _, cmd := range commands { + if cmd > 0 { + nx, ny := x+cur[0]*cmd, y+cur[1]*cmd + nx, ny = check(x, y, nx, ny, dir) + ans = max(ans, nx*nx+ny*ny) + x, y = nx, ny + continue + } + dir = nextDir(dir, cmd) + cur = nextSteps(dir) + } + return ans } diff --git a/leetcode/801-900/0874.Walking-Robot-Simulation/Solution_test.go b/leetcode/801-900/0874.Walking-Robot-Simulation/Solution_test.go index 14ff50eb4..c4a2b078e 100644 --- a/leetcode/801-900/0874.Walking-Robot-Simulation/Solution_test.go +++ b/leetcode/801-900/0874.Walking-Robot-Simulation/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + commands []int + obstacles [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, -1, 3}, [][]int{}, 25}, + {"TestCase2", []int{4, -1, 4, -2, 4}, [][]int{{2, 4}}, 65}, + {"TestCase3", []int{6, -1, -1, 6}, [][]int{}, 36}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.commands, c.obstacles) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.commands, c.obstacles) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5f915bfb426e8bef62d6459bafe80b76335edf6b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 5 Sep 2024 09:09:15 +0800 Subject: [PATCH 055/450] Add solution and test-cases for problem 2028 --- .../2028.Find-Missing-Observations/README.md | 37 ++++++++++++------- .../Solution.go | 21 ++++++++++- .../Solution_test.go | 23 ++++++------ 3 files changed, 55 insertions(+), 26 deletions(-) diff --git a/leetcode/2001-2100/2028.Find-Missing-Observations/README.md b/leetcode/2001-2100/2028.Find-Missing-Observations/README.md index b853c7969..ad8033525 100755 --- a/leetcode/2001-2100/2028.Find-Missing-Observations/README.md +++ b/leetcode/2001-2100/2028.Find-Missing-Observations/README.md @@ -1,28 +1,39 @@ # [2028.Find Missing Observations][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 have observations of `n + m` **6-sided** dice rolls with each face numbered from `1` to `6`. n of the observations went missing, and you only have the observations of `m` rolls. Fortunately, you have also calculated the **average value** of the `n + m` rolls. + +You are given an integer array `rolls` of length `m` where `rolls[i]` is the value of the `ith` observation. You are also given the two integers `mean` and `n`. + +Return an array of length `n` containing the missing observations such that the **average value** of the `n + m` rolls is **exactly** `mean`. If there are multiple valid answers, return any of them. If no such array exists, return an empty array. + +The **average value** of a set of `k` numbers is the sum of the numbers divided by `k`. + +Note that `mean` is an integer, so the sum of the `n + m` rolls should be divisible by `n + m`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: rolls = [3,2,4,3], mean = 4, n = 2 +Output: [6,6] +Explanation: The mean of all n + m rolls is (3 + 2 + 4 + 3 + 6 + 6) / 6 = 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find Missing Observations -```go ``` +Input: rolls = [1,5,6], mean = 3, n = 4 +Output: [2,3,2,2] +Explanation: The mean of all n + m rolls is (1 + 5 + 6 + 2 + 3 + 2 + 2) / 7 = 3. +``` + +**Example 3:** +``` +Input: rolls = [1,2,3,4], mean = 6, n = 4 +Output: [] +Explanation: It is impossible for the mean to be 6 no matter what the 4 missing rolls are. +``` ## 结语 diff --git a/leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go index d115ccf5e..7ebb353ad 100644 --- a/leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go +++ b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(rolls []int, mean int, n int) []int { + target := (n + len(rolls)) * mean + for _, r := range rolls { + target -= r + } + + if n*6 < target || target < n { + return []int{} + } + ans := make([]int, n) + base := target / n + for i := range n { + ans[i] = base + } + target %= n + for i := range target { + ans[i]++ + } + return ans } diff --git a/leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go index 14ff50eb4..5bec20f67 100644 --- a/leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go +++ b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + rolls []int + mean, n int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 2, 4, 3}, 4, 2, []int{6, 6}}, + {"TestCase2", []int{1, 5, 6}, 3, 4, []int{3, 2, 2, 2}}, + {"TestCase3", []int{1, 2, 3, 4}, 6, 4, []int{}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.rolls, c.mean, c.n) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.rolls, c.mean, c.n) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From eb3dcead50bda595a6ee4cacd52cf47219d39852 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 6 Sep 2024 09:16:33 +0800 Subject: [PATCH 056/450] add new problems --- cmd/main.go | 2 + go.sum | 7 ---- .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3110.Score-of-a-String/README.md | 32 +++++++++++++++ .../3110.Score-of-a-String/Solution.go | 5 +++ .../3110.Score-of-a-String/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3115.Maximum-Prime-Difference/README.md | 32 +++++++++++++++ .../3115.Maximum-Prime-Difference/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3101-3200/3128.Right-Triangles/README.md | 32 +++++++++++++++ .../3128.Right-Triangles/Solution.go | 5 +++ .../3128.Right-Triangles/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3133.Minimum-Array-End/README.md | 32 +++++++++++++++ .../3133.Minimum-Array-End/Solution.go | 5 +++ .../3133.Minimum-Array-End/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ leetcode/3101-3200/3136.Valid-Word/README.md | 32 +++++++++++++++ .../3101-3200/3136.Valid-Word/Solution.go | 5 +++ .../3136.Valid-Word/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3101-3200/3151.Special-Array-I/README.md | 32 +++++++++++++++ .../3151.Special-Array-I/Solution.go | 5 +++ .../3151.Special-Array-I/Solution_test.go | 39 +++++++++++++++++++ .../3101-3200/3152.Special-Array-II/README.md | 32 +++++++++++++++ .../3152.Special-Array-II/Solution.go | 5 +++ .../3152.Special-Array-II/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3161.Block-Placement-Queries/README.md | 32 +++++++++++++++ .../3161.Block-Placement-Queries/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3163.String-Compression-III/README.md | 32 +++++++++++++++ .../3163.String-Compression-III/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3101-3200/3174.Clear-Digits/README.md | 32 +++++++++++++++ .../3101-3200/3174.Clear-Digits/Solution.go | 5 +++ .../3174.Clear-Digits/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3101-3200/3187.Peaks-in-Array/README.md | 32 +++++++++++++++ .../3101-3200/3187.Peaks-in-Array/Solution.go | 5 +++ .../3187.Peaks-in-Array/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3206.Alternating-Groups-I/README.md | 32 +++++++++++++++ .../3206.Alternating-Groups-I/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3208.Alternating-Groups-II/README.md | 32 +++++++++++++++ .../3208.Alternating-Groups-II/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3210.Find-the-Encrypted-String/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3227.Vowels-Game-in-a-String/README.md | 32 +++++++++++++++ .../3227.Vowels-Game-in-a-String/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3245.Alternating-Groups-III/README.md | 32 +++++++++++++++ .../3245.Alternating-Groups-III/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3201-3300/3248.Snake-in-Matrix/README.md | 32 +++++++++++++++ .../3248.Snake-in-Matrix/Solution.go | 5 +++ .../3248.Snake-in-Matrix/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3265.Count-Almost-Equal-Pairs-I/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../3271.Hash-Divided-String/README.md | 32 +++++++++++++++ .../3271.Hash-Divided-String/Solution.go | 5 +++ .../3271.Hash-Divided-String/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ 404 files changed, 10186 insertions(+), 7 deletions(-) create mode 100755 leetcode/3101-3200/3101.Count-Alternating-Subarrays/README.md create mode 100644 leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution.go create mode 100644 leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution_test.go create mode 100755 leetcode/3101-3200/3102.Minimize-Manhattan-Distances/README.md create mode 100644 leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution.go create mode 100644 leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution_test.go create mode 100755 leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md create mode 100644 leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go create mode 100644 leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go create mode 100755 leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/README.md create mode 100644 leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution.go create mode 100644 leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution_test.go create mode 100755 leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/README.md create mode 100644 leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution.go create mode 100644 leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution_test.go create mode 100755 leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/README.md create mode 100644 leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go create mode 100644 leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go create mode 100755 leetcode/3101-3200/3110.Score-of-a-String/README.md create mode 100644 leetcode/3101-3200/3110.Score-of-a-String/Solution.go create mode 100644 leetcode/3101-3200/3110.Score-of-a-String/Solution_test.go create mode 100755 leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/README.md create mode 100644 leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution.go create mode 100644 leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution_test.go create mode 100755 leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/README.md create mode 100644 leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution.go create mode 100644 leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution_test.go create mode 100755 leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/README.md create mode 100644 leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution.go create mode 100644 leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution_test.go create mode 100755 leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/README.md create mode 100644 leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution.go create mode 100644 leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution_test.go create mode 100755 leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md create mode 100644 leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go create mode 100644 leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution_test.go create mode 100755 leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/README.md create mode 100644 leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution.go create mode 100644 leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution_test.go create mode 100755 leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/README.md create mode 100644 leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution.go create mode 100644 leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution_test.go create mode 100755 leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/README.md create mode 100644 leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution.go create mode 100644 leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution_test.go create mode 100755 leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/README.md create mode 100644 leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution.go create mode 100644 leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution_test.go create mode 100755 leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/README.md create mode 100644 leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution.go create mode 100644 leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution_test.go create mode 100755 leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/README.md create mode 100644 leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution.go create mode 100644 leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution_test.go create mode 100755 leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/README.md create mode 100644 leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution.go create mode 100644 leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution_test.go create mode 100755 leetcode/3101-3200/3128.Right-Triangles/README.md create mode 100644 leetcode/3101-3200/3128.Right-Triangles/Solution.go create mode 100644 leetcode/3101-3200/3128.Right-Triangles/Solution_test.go create mode 100755 leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/README.md create mode 100644 leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution.go create mode 100644 leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution_test.go create mode 100755 leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/README.md create mode 100644 leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution.go create mode 100644 leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution_test.go create mode 100755 leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/README.md create mode 100644 leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution.go create mode 100644 leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution_test.go create mode 100755 leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/README.md create mode 100644 leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution.go create mode 100644 leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution_test.go create mode 100755 leetcode/3101-3200/3133.Minimum-Array-End/README.md create mode 100644 leetcode/3101-3200/3133.Minimum-Array-End/Solution.go create mode 100644 leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go create mode 100755 leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/README.md create mode 100644 leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution.go create mode 100644 leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution_test.go create mode 100755 leetcode/3101-3200/3136.Valid-Word/README.md create mode 100644 leetcode/3101-3200/3136.Valid-Word/Solution.go create mode 100644 leetcode/3101-3200/3136.Valid-Word/Solution_test.go create mode 100755 leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/README.md create mode 100644 leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution.go create mode 100644 leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution_test.go create mode 100755 leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/README.md create mode 100644 leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution.go create mode 100644 leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution_test.go create mode 100755 leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/README.md create mode 100644 leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution.go create mode 100644 leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution_test.go create mode 100755 leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/README.md create mode 100644 leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution.go create mode 100644 leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution_test.go create mode 100755 leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/README.md create mode 100644 leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution.go create mode 100644 leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution_test.go create mode 100755 leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/README.md create mode 100644 leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution.go create mode 100644 leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution_test.go create mode 100755 leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/README.md create mode 100644 leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution.go create mode 100644 leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution_test.go create mode 100755 leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/README.md create mode 100644 leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution.go create mode 100644 leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution_test.go create mode 100755 leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md create mode 100644 leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go create mode 100644 leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go create mode 100755 leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/README.md create mode 100644 leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution.go create mode 100644 leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution_test.go create mode 100755 leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/README.md create mode 100644 leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution.go create mode 100644 leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution_test.go create mode 100755 leetcode/3101-3200/3151.Special-Array-I/README.md create mode 100644 leetcode/3101-3200/3151.Special-Array-I/Solution.go create mode 100644 leetcode/3101-3200/3151.Special-Array-I/Solution_test.go create mode 100755 leetcode/3101-3200/3152.Special-Array-II/README.md create mode 100644 leetcode/3101-3200/3152.Special-Array-II/Solution.go create mode 100644 leetcode/3101-3200/3152.Special-Array-II/Solution_test.go create mode 100755 leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/README.md create mode 100644 leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution.go create mode 100644 leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution_test.go create mode 100755 leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/README.md create mode 100644 leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution.go create mode 100644 leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution_test.go create mode 100755 leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/README.md create mode 100644 leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution.go create mode 100644 leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution_test.go create mode 100755 leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/README.md create mode 100644 leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution.go create mode 100644 leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution_test.go create mode 100755 leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/README.md create mode 100644 leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go create mode 100644 leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go create mode 100755 leetcode/3101-3200/3161.Block-Placement-Queries/README.md create mode 100644 leetcode/3101-3200/3161.Block-Placement-Queries/Solution.go create mode 100644 leetcode/3101-3200/3161.Block-Placement-Queries/Solution_test.go create mode 100755 leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/README.md create mode 100644 leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution.go create mode 100644 leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution_test.go create mode 100755 leetcode/3101-3200/3163.String-Compression-III/README.md create mode 100644 leetcode/3101-3200/3163.String-Compression-III/Solution.go create mode 100644 leetcode/3101-3200/3163.String-Compression-III/Solution_test.go create mode 100755 leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/README.md create mode 100644 leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution.go create mode 100644 leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution_test.go create mode 100755 leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/README.md create mode 100644 leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution.go create mode 100644 leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution_test.go create mode 100755 leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/README.md create mode 100644 leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution.go create mode 100644 leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution_test.go create mode 100755 leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md create mode 100644 leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go create mode 100644 leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go create mode 100755 leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md create mode 100644 leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go create mode 100644 leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go create mode 100755 leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/README.md create mode 100644 leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution.go create mode 100644 leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution_test.go create mode 100755 leetcode/3101-3200/3174.Clear-Digits/README.md create mode 100644 leetcode/3101-3200/3174.Clear-Digits/Solution.go create mode 100644 leetcode/3101-3200/3174.Clear-Digits/Solution_test.go create mode 100755 leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/README.md create mode 100644 leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution.go create mode 100644 leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution_test.go create mode 100755 leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/README.md create mode 100644 leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution.go create mode 100644 leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution_test.go create mode 100755 leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/README.md create mode 100644 leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution.go create mode 100644 leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution_test.go create mode 100755 leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/README.md create mode 100644 leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution.go create mode 100644 leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution_test.go create mode 100755 leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/README.md create mode 100644 leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution.go create mode 100644 leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution_test.go create mode 100755 leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/README.md create mode 100644 leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution.go create mode 100644 leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution_test.go create mode 100755 leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/README.md create mode 100644 leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution.go create mode 100644 leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution_test.go create mode 100755 leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/README.md create mode 100644 leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution.go create mode 100644 leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution_test.go create mode 100755 leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/README.md create mode 100644 leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution.go create mode 100644 leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution_test.go create mode 100755 leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md create mode 100644 leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go create mode 100644 leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go create mode 100755 leetcode/3101-3200/3187.Peaks-in-Array/README.md create mode 100644 leetcode/3101-3200/3187.Peaks-in-Array/Solution.go create mode 100644 leetcode/3101-3200/3187.Peaks-in-Array/Solution_test.go create mode 100755 leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/README.md create mode 100644 leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution.go create mode 100644 leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution_test.go create mode 100755 leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md create mode 100644 leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go create mode 100644 leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution_test.go create mode 100755 leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/README.md create mode 100644 leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution.go create mode 100644 leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution_test.go create mode 100755 leetcode/3101-3200/3193.Count-the-Number-of-Inversions/README.md create mode 100644 leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution.go create mode 100644 leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution_test.go create mode 100755 leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/README.md create mode 100644 leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution.go create mode 100644 leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution_test.go create mode 100755 leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md create mode 100644 leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go create mode 100644 leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution_test.go create mode 100755 leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/README.md create mode 100644 leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution.go create mode 100644 leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution_test.go create mode 100755 leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/README.md create mode 100644 leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go create mode 100644 leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution_test.go create mode 100755 leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/README.md create mode 100644 leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution.go create mode 100644 leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution_test.go create mode 100755 leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md create mode 100644 leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go create mode 100644 leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go create mode 100755 leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md create mode 100644 leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go create mode 100644 leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go create mode 100755 leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/README.md create mode 100644 leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution.go create mode 100644 leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution_test.go create mode 100755 leetcode/3201-3300/3206.Alternating-Groups-I/README.md create mode 100644 leetcode/3201-3300/3206.Alternating-Groups-I/Solution.go create mode 100644 leetcode/3201-3300/3206.Alternating-Groups-I/Solution_test.go create mode 100755 leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/README.md create mode 100644 leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution.go create mode 100644 leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution_test.go create mode 100755 leetcode/3201-3300/3208.Alternating-Groups-II/README.md create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go create mode 100644 leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go create mode 100755 leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/README.md create mode 100644 leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution.go create mode 100644 leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution_test.go create mode 100755 leetcode/3201-3300/3210.Find-the-Encrypted-String/README.md create mode 100644 leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution.go create mode 100644 leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution_test.go create mode 100755 leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md create mode 100644 leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go create mode 100644 leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go create mode 100755 leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/README.md create mode 100644 leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution.go create mode 100644 leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution_test.go create mode 100755 leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/README.md create mode 100644 leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution.go create mode 100644 leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution_test.go create mode 100755 leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/README.md create mode 100644 leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution.go create mode 100644 leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution_test.go create mode 100755 leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/README.md create mode 100644 leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution.go create mode 100644 leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution_test.go create mode 100755 leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/README.md create mode 100644 leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution.go create mode 100644 leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution_test.go create mode 100755 leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/README.md create mode 100644 leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution.go create mode 100644 leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution_test.go create mode 100755 leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/README.md create mode 100644 leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution.go create mode 100644 leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution_test.go create mode 100755 leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md create mode 100644 leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go create mode 100644 leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go create mode 100755 leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/README.md create mode 100644 leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution.go create mode 100644 leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution_test.go create mode 100755 leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/README.md create mode 100644 leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution.go create mode 100644 leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution_test.go create mode 100755 leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/README.md create mode 100644 leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution.go create mode 100644 leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution_test.go create mode 100755 leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md create mode 100644 leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go create mode 100644 leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go create mode 100755 leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md create mode 100644 leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go create mode 100644 leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go create mode 100755 leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/README.md create mode 100644 leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution.go create mode 100644 leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution_test.go create mode 100755 leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/README.md create mode 100644 leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution.go create mode 100644 leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution_test.go create mode 100755 leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/README.md create mode 100644 leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution.go create mode 100644 leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution_test.go create mode 100755 leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md create mode 100644 leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go create mode 100644 leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go create mode 100755 leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/README.md create mode 100644 leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution.go create mode 100644 leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution_test.go create mode 100755 leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/README.md create mode 100644 leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution.go create mode 100644 leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution_test.go create mode 100755 leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md create mode 100644 leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go create mode 100644 leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go create mode 100755 leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/README.md create mode 100644 leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution.go create mode 100644 leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution_test.go create mode 100755 leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/README.md create mode 100644 leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution.go create mode 100644 leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution_test.go create mode 100755 leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/README.md create mode 100644 leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution.go create mode 100644 leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution_test.go create mode 100755 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md create mode 100644 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go create mode 100644 leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go create mode 100755 leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/README.md create mode 100644 leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution.go create mode 100644 leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution_test.go create mode 100755 leetcode/3201-3300/3245.Alternating-Groups-III/README.md create mode 100644 leetcode/3201-3300/3245.Alternating-Groups-III/Solution.go create mode 100644 leetcode/3201-3300/3245.Alternating-Groups-III/Solution_test.go create mode 100755 leetcode/3201-3300/3248.Snake-in-Matrix/README.md create mode 100644 leetcode/3201-3300/3248.Snake-in-Matrix/Solution.go create mode 100644 leetcode/3201-3300/3248.Snake-in-Matrix/Solution_test.go create mode 100755 leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md create mode 100644 leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go create mode 100644 leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go create mode 100755 leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/README.md create mode 100644 leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution.go create mode 100644 leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution_test.go create mode 100755 leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/README.md create mode 100644 leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution.go create mode 100644 leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution_test.go create mode 100755 leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md create mode 100644 leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go create mode 100644 leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go create mode 100755 leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md create mode 100644 leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go create mode 100644 leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go create mode 100755 leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/README.md create mode 100644 leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution.go create mode 100644 leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution_test.go create mode 100755 leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/README.md create mode 100644 leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution.go create mode 100644 leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution_test.go create mode 100755 leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/README.md create mode 100644 leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution.go create mode 100644 leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution_test.go create mode 100755 leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/README.md create mode 100644 leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution.go create mode 100644 leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution_test.go create mode 100755 leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/README.md create mode 100644 leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution.go create mode 100644 leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution_test.go create mode 100755 leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/README.md create mode 100644 leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution.go create mode 100644 leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution_test.go create mode 100755 leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md create mode 100644 leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go create mode 100644 leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go create mode 100755 leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/README.md create mode 100644 leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution.go create mode 100644 leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution_test.go create mode 100755 leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/README.md create mode 100644 leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution.go create mode 100644 leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution_test.go create mode 100755 leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/README.md create mode 100644 leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution.go create mode 100644 leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution_test.go create mode 100755 leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/README.md create mode 100644 leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution.go create mode 100644 leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution_test.go create mode 100755 leetcode/3201-3300/3271.Hash-Divided-String/README.md create mode 100644 leetcode/3201-3300/3271.Hash-Divided-String/Solution.go create mode 100644 leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go create mode 100755 leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/README.md create mode 100644 leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution.go create mode 100644 leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution_test.go create mode 100755 leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/README.md create mode 100644 leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution.go create mode 100644 leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution_test.go create mode 100755 leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/README.md create mode 100644 leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution.go create mode 100644 leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution_test.go create mode 100755 leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/README.md create mode 100644 leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution.go create mode 100644 leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution_test.go create mode 100755 leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/README.md create mode 100644 leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution.go create mode 100644 leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution_test.go create mode 100755 leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/README.md create mode 100644 leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution.go create mode 100644 leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution_test.go diff --git a/cmd/main.go b/cmd/main.go index b4d841c69..4fbb86a96 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -33,6 +33,8 @@ func main() { //leetcode.MakeDirFromTo(problems, 2301, 2400) //leetcode.MakeDirFromTo(problems, 2401, 2500) //leetcode.MakeDirFromTo(problems, 2901, 3000) + //leetcode.MakeDirFromTo(problems, 3101, 3200) + //leetcode.MakeDirFromTo(problems, 3201, 3300) // leetcode.MakeDir(problems) diff --git a/go.sum b/go.sum index 9c9430e1c..bca5ad9ba 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,11 @@ github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/cloudflare/circl v1.3.8 h1:j+V8jJt09PoeMFIu2uh5JUyEaIHTXVOHslFoLNAKqwI= -github.com/cloudflare/circl v1.3.8/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE= github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -22,8 +19,6 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/imroc/req/v3 v3.43.7 h1:dOcNb9n0X83N5/5/AOkiU+cLhzx8QFXjv5MhikazzQA= github.com/imroc/req/v3 v3.43.7/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= @@ -44,8 +39,6 @@ go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= diff --git a/leetcode/3101-3200/3101.Count-Alternating-Subarrays/README.md b/leetcode/3101-3200/3101.Count-Alternating-Subarrays/README.md new file mode 100755 index 000000000..36c8740aa --- /dev/null +++ b/leetcode/3101-3200/3101.Count-Alternating-Subarrays/README.md @@ -0,0 +1,32 @@ +# [3101.Count Alternating Subarrays][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Alternating Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-alternating-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution.go b/leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution_test.go b/leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3101.Count-Alternating-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/README.md b/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/README.md new file mode 100755 index 000000000..a702b903e --- /dev/null +++ b/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/README.md @@ -0,0 +1,32 @@ +# [3102.Minimize Manhattan Distances][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize Manhattan Distances +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-manhattan-distances/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution.go b/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution_test.go b/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3102.Minimize-Manhattan-Distances/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md new file mode 100755 index 000000000..effb6b20c --- /dev/null +++ b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/README.md @@ -0,0 +1,32 @@ +# [3105.Longest Strictly Increasing or Strictly Decreasing Subarray][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Strictly Increasing or Strictly Decreasing Subarray +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-strictly-increasing-or-strictly-decreasing-subarray/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3105.Longest-Strictly-Increasing-or-Strictly-Decreasing-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/README.md b/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/README.md new file mode 100755 index 000000000..4bfde6105 --- /dev/null +++ b/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/README.md @@ -0,0 +1,32 @@ +# [3106.Lexicographically Smallest String After Operations With Constraint][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Lexicographically Smallest String After Operations With Constraint +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/lexicographically-smallest-string-after-operations-with-constraint/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution.go b/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution_test.go b/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3106.Lexicographically-Smallest-String-After-Operations-With-Constraint/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/README.md b/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/README.md new file mode 100755 index 000000000..f11a364de --- /dev/null +++ b/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/README.md @@ -0,0 +1,32 @@ +# [3107.Minimum Operations to Make Median of Array Equal to K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Median of Array Equal to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-median-of-array-equal-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution.go b/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution_test.go b/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3107.Minimum-Operations-to-Make-Median-of-Array-Equal-to-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/README.md b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/README.md new file mode 100755 index 000000000..1e237a1b7 --- /dev/null +++ b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/README.md @@ -0,0 +1,32 @@ +# [3108.Minimum Cost Walk in Weighted Graph][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost Walk in Weighted Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-walk-in-weighted-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3108.Minimum-Cost-Walk-in-Weighted-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3110.Score-of-a-String/README.md b/leetcode/3101-3200/3110.Score-of-a-String/README.md new file mode 100755 index 000000000..cfc0c49b2 --- /dev/null +++ b/leetcode/3101-3200/3110.Score-of-a-String/README.md @@ -0,0 +1,32 @@ +# [3110.Score of a String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Score of a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/score-of-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3110.Score-of-a-String/Solution.go b/leetcode/3101-3200/3110.Score-of-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3110.Score-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3110.Score-of-a-String/Solution_test.go b/leetcode/3101-3200/3110.Score-of-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3110.Score-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/README.md b/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/README.md new file mode 100755 index 000000000..ed0975f51 --- /dev/null +++ b/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/README.md @@ -0,0 +1,32 @@ +# [3111.Minimum Rectangles to Cover Points][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Rectangles to Cover Points +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-rectangles-to-cover-points/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution.go b/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution_test.go b/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3111.Minimum-Rectangles-to-Cover-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/README.md b/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/README.md new file mode 100755 index 000000000..0fa11623e --- /dev/null +++ b/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/README.md @@ -0,0 +1,32 @@ +# [3112.Minimum Time to Visit Disappearing Nodes][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Visit Disappearing Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-visit-disappearing-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution.go b/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution_test.go b/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3112.Minimum-Time-to-Visit-Disappearing-Nodes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/README.md b/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/README.md new file mode 100755 index 000000000..f0fb00f6e --- /dev/null +++ b/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/README.md @@ -0,0 +1,32 @@ +# [3113.Find the Number of Subarrays Where Boundary Elements Are Maximum][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Subarrays Where Boundary Elements Are Maximum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-subarrays-where-boundary-elements-are-maximum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution.go b/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution_test.go b/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3113.Find-the-Number-of-Subarrays-Where-Boundary-Elements-Are-Maximum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/README.md b/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/README.md new file mode 100755 index 000000000..fe0e90113 --- /dev/null +++ b/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/README.md @@ -0,0 +1,32 @@ +# [3114.Latest Time You Can Obtain After Replacing Characters][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Latest Time You Can Obtain After Replacing Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/latest-time-you-can-obtain-after-replacing-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution.go b/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution_test.go b/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3114.Latest-Time-You-Can-Obtain-After-Replacing-Characters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md b/leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md new file mode 100755 index 000000000..f5f58aa7c --- /dev/null +++ b/leetcode/3101-3200/3115.Maximum-Prime-Difference/README.md @@ -0,0 +1,32 @@ +# [3115.Maximum Prime Difference][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Prime Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-prime-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go b/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution_test.go b/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3115.Maximum-Prime-Difference/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/README.md b/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/README.md new file mode 100755 index 000000000..d34ee9f05 --- /dev/null +++ b/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/README.md @@ -0,0 +1,32 @@ +# [3116.Kth Smallest Amount With Single Denomination Combination][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Kth Smallest Amount With Single Denomination Combination +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/kth-smallest-amount-with-single-denomination-combination/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution.go b/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution_test.go b/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3116.Kth-Smallest-Amount-With-Single-Denomination-Combination/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/README.md b/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/README.md new file mode 100755 index 000000000..753efccd5 --- /dev/null +++ b/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/README.md @@ -0,0 +1,32 @@ +# [3117.Minimum Sum of Values by Dividing Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Sum of Values by Dividing Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-sum-of-values-by-dividing-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution.go b/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution_test.go b/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3117.Minimum-Sum-of-Values-by-Dividing-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/README.md b/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/README.md new file mode 100755 index 000000000..b371b8073 --- /dev/null +++ b/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/README.md @@ -0,0 +1,32 @@ +# [3120.Count the Number of Special Characters I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Special Characters I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-special-characters-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution.go b/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution_test.go b/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3120.Count-the-Number-of-Special-Characters-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/README.md b/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/README.md new file mode 100755 index 000000000..6415e8a6e --- /dev/null +++ b/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/README.md @@ -0,0 +1,32 @@ +# [3121.Count the Number of Special Characters II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Special Characters II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-special-characters-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution.go b/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution_test.go b/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3121.Count-the-Number-of-Special-Characters-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/README.md b/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/README.md new file mode 100755 index 000000000..6677fe801 --- /dev/null +++ b/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/README.md @@ -0,0 +1,32 @@ +# [3122.Minimum Number of Operations to Satisfy Conditions][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Operations to Satisfy Conditions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-satisfy-conditions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution.go b/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution_test.go b/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3122.Minimum-Number-of-Operations-to-Satisfy-Conditions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/README.md b/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/README.md new file mode 100755 index 000000000..435717648 --- /dev/null +++ b/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/README.md @@ -0,0 +1,32 @@ +# [3123.Find Edges in Shortest Paths][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Edges in Shortest Paths +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-edges-in-shortest-paths/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution.go b/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution_test.go b/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3123.Find-Edges-in-Shortest-Paths/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/README.md b/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/README.md new file mode 100755 index 000000000..ed0ea5807 --- /dev/null +++ b/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/README.md @@ -0,0 +1,32 @@ +# [3127.Make a Square with the Same Color][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Make a Square with the Same Color +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-a-square-with-the-same-color/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution.go b/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution_test.go b/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3127.Make-a-Square-with-the-Same-Color/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3128.Right-Triangles/README.md b/leetcode/3101-3200/3128.Right-Triangles/README.md new file mode 100755 index 000000000..fc0e180e6 --- /dev/null +++ b/leetcode/3101-3200/3128.Right-Triangles/README.md @@ -0,0 +1,32 @@ +# [3128.Right Triangles][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Right Triangles +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/right-triangles/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3128.Right-Triangles/Solution.go b/leetcode/3101-3200/3128.Right-Triangles/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3128.Right-Triangles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3128.Right-Triangles/Solution_test.go b/leetcode/3101-3200/3128.Right-Triangles/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3128.Right-Triangles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/README.md b/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/README.md new file mode 100755 index 000000000..d74896c4f --- /dev/null +++ b/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/README.md @@ -0,0 +1,32 @@ +# [3129.Find All Possible Stable Binary Arrays I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All Possible Stable Binary Arrays I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-possible-stable-binary-arrays-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution.go b/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution_test.go b/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3129.Find-All-Possible-Stable-Binary-Arrays-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/README.md b/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/README.md new file mode 100755 index 000000000..5fb13a4cd --- /dev/null +++ b/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/README.md @@ -0,0 +1,32 @@ +# [3130.Find All Possible Stable Binary Arrays II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All Possible Stable Binary Arrays II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-possible-stable-binary-arrays-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution.go b/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution_test.go b/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3130.Find-All-Possible-Stable-Binary-Arrays-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/README.md b/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/README.md new file mode 100755 index 000000000..802544d1c --- /dev/null +++ b/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/README.md @@ -0,0 +1,32 @@ +# [3131.Find the Integer Added to Array I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Integer Added to Array I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-integer-added-to-array-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution.go b/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution_test.go b/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3131.Find-the-Integer-Added-to-Array-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/README.md b/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/README.md new file mode 100755 index 000000000..cd0e56647 --- /dev/null +++ b/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/README.md @@ -0,0 +1,32 @@ +# [3132.Find the Integer Added to Array II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Integer Added to Array II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-integer-added-to-array-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution.go b/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution_test.go b/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3132.Find-the-Integer-Added-to-Array-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3133.Minimum-Array-End/README.md b/leetcode/3101-3200/3133.Minimum-Array-End/README.md new file mode 100755 index 000000000..785a87f95 --- /dev/null +++ b/leetcode/3101-3200/3133.Minimum-Array-End/README.md @@ -0,0 +1,32 @@ +# [3133.Minimum Array End][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Array End +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-array-end/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3133.Minimum-Array-End/Solution.go b/leetcode/3101-3200/3133.Minimum-Array-End/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3133.Minimum-Array-End/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go b/leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3133.Minimum-Array-End/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/README.md b/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/README.md new file mode 100755 index 000000000..4a1a508e7 --- /dev/null +++ b/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/README.md @@ -0,0 +1,32 @@ +# [3134.Find the Median of the Uniqueness Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Median of the Uniqueness Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-median-of-the-uniqueness-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution.go b/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution_test.go b/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3134.Find-the-Median-of-the-Uniqueness-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3136.Valid-Word/README.md b/leetcode/3101-3200/3136.Valid-Word/README.md new file mode 100755 index 000000000..8b87e732b --- /dev/null +++ b/leetcode/3101-3200/3136.Valid-Word/README.md @@ -0,0 +1,32 @@ +# [3136.Valid Word][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Valid Word +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/valid-word/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3136.Valid-Word/Solution.go b/leetcode/3101-3200/3136.Valid-Word/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3136.Valid-Word/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3136.Valid-Word/Solution_test.go b/leetcode/3101-3200/3136.Valid-Word/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3136.Valid-Word/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/README.md b/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/README.md new file mode 100755 index 000000000..28beafdc1 --- /dev/null +++ b/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/README.md @@ -0,0 +1,32 @@ +# [3137.Minimum Number of Operations to Make Word K-Periodic][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Operations to Make Word K-Periodic +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-word-k-periodic/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution.go b/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution_test.go b/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3137.Minimum-Number-of-Operations-to-Make-Word-K-Periodic/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/README.md b/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/README.md new file mode 100755 index 000000000..8b5e04b02 --- /dev/null +++ b/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/README.md @@ -0,0 +1,32 @@ +# [3138.Minimum Length of Anagram Concatenation][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Length of Anagram Concatenation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-length-of-anagram-concatenation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution.go b/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution_test.go b/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3138.Minimum-Length-of-Anagram-Concatenation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/README.md b/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/README.md new file mode 100755 index 000000000..1856ff6f0 --- /dev/null +++ b/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/README.md @@ -0,0 +1,32 @@ +# [3139.Minimum Cost to Equalize Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Equalize Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-equalize-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution.go b/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution_test.go b/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3139.Minimum-Cost-to-Equalize-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/README.md b/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/README.md new file mode 100755 index 000000000..2eaa505e3 --- /dev/null +++ b/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/README.md @@ -0,0 +1,32 @@ +# [3142.Check if Grid Satisfies Conditions][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Grid Satisfies Conditions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-grid-satisfies-conditions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution.go b/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution_test.go b/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3142.Check-if-Grid-Satisfies-Conditions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/README.md b/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/README.md new file mode 100755 index 000000000..6418207cb --- /dev/null +++ b/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/README.md @@ -0,0 +1,32 @@ +# [3143.Maximum Points Inside the Square][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Points Inside the Square +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-points-inside-the-square/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution.go b/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution_test.go b/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3143.Maximum-Points-Inside-the-Square/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/README.md b/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/README.md new file mode 100755 index 000000000..e81e00192 --- /dev/null +++ b/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/README.md @@ -0,0 +1,32 @@ +# [3144.Minimum Substring Partition of Equal Character Frequency][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Substring Partition of Equal Character Frequency +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-substring-partition-of-equal-character-frequency/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution.go b/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution_test.go b/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3144.Minimum-Substring-Partition-of-Equal-Character-Frequency/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/README.md b/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/README.md new file mode 100755 index 000000000..7c0d10f8a --- /dev/null +++ b/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/README.md @@ -0,0 +1,32 @@ +# [3145.Find Products of Elements of Big Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Products of Elements of Big Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-products-of-elements-of-big-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution.go b/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution_test.go b/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3145.Find-Products-of-Elements-of-Big-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/README.md b/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/README.md new file mode 100755 index 000000000..3186ee5a0 --- /dev/null +++ b/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/README.md @@ -0,0 +1,32 @@ +# [3146.Permutation Difference between Two Strings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Permutation Difference between Two Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/permutation-difference-between-two-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution.go b/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution_test.go b/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3146.Permutation-Difference-between-Two-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md new file mode 100755 index 000000000..31a002b33 --- /dev/null +++ b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/README.md @@ -0,0 +1,32 @@ +# [3147.Taking Maximum Energy From the Mystic Dungeon][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Taking Maximum Energy From the Mystic Dungeon +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/taking-maximum-energy-from-the-mystic-dungeon/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3147.Taking-Maximum-Energy-From-the-Mystic-Dungeon/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/README.md b/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/README.md new file mode 100755 index 000000000..f08ae5f67 --- /dev/null +++ b/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/README.md @@ -0,0 +1,32 @@ +# [3148.Maximum Difference Score in a Grid][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Difference Score in a Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-difference-score-in-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution.go b/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution_test.go b/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3148.Maximum-Difference-Score-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/README.md b/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/README.md new file mode 100755 index 000000000..c42fc990f --- /dev/null +++ b/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/README.md @@ -0,0 +1,32 @@ +# [3149.Find the Minimum Cost Array Permutation][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Minimum Cost Array Permutation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-minimum-cost-array-permutation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution.go b/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution_test.go b/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3149.Find-the-Minimum-Cost-Array-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3151.Special-Array-I/README.md b/leetcode/3101-3200/3151.Special-Array-I/README.md new file mode 100755 index 000000000..2b49c31d7 --- /dev/null +++ b/leetcode/3101-3200/3151.Special-Array-I/README.md @@ -0,0 +1,32 @@ +# [3151.Special Array I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Special Array I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/special-array-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3151.Special-Array-I/Solution.go b/leetcode/3101-3200/3151.Special-Array-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3151.Special-Array-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3151.Special-Array-I/Solution_test.go b/leetcode/3101-3200/3151.Special-Array-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3151.Special-Array-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3152.Special-Array-II/README.md b/leetcode/3101-3200/3152.Special-Array-II/README.md new file mode 100755 index 000000000..4a3a744e7 --- /dev/null +++ b/leetcode/3101-3200/3152.Special-Array-II/README.md @@ -0,0 +1,32 @@ +# [3152.Special Array II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Special Array II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/special-array-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3152.Special-Array-II/Solution.go b/leetcode/3101-3200/3152.Special-Array-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3152.Special-Array-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3152.Special-Array-II/Solution_test.go b/leetcode/3101-3200/3152.Special-Array-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3152.Special-Array-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/README.md b/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/README.md new file mode 100755 index 000000000..a5d978c4c --- /dev/null +++ b/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/README.md @@ -0,0 +1,32 @@ +# [3153.Sum of Digit Differences of All Pairs][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Digit Differences of All Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-digit-differences-of-all-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution.go b/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution_test.go b/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3153.Sum-of-Digit-Differences-of-All-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/README.md b/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/README.md new file mode 100755 index 000000000..4c629f613 --- /dev/null +++ b/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/README.md @@ -0,0 +1,32 @@ +# [3154.Find Number of Ways to Reach the K-th Stair][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Number of Ways to Reach the K-th Stair +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-number-of-ways-to-reach-the-k-th-stair/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution.go b/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution_test.go b/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3154.Find-Number-of-Ways-to-Reach-the-K-th-Stair/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/README.md b/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/README.md new file mode 100755 index 000000000..40103be32 --- /dev/null +++ b/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/README.md @@ -0,0 +1,32 @@ +# [3158.Find the XOR of Numbers Which Appear Twice][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the XOR of Numbers Which Appear Twice +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-xor-of-numbers-which-appear-twice/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution.go b/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution_test.go b/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3158.Find-the-XOR-of-Numbers-Which-Appear-Twice/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/README.md b/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/README.md new file mode 100755 index 000000000..8e248e092 --- /dev/null +++ b/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [3159.Find Occurrences of an Element in an Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Occurrences of an Element in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-occurrences-of-an-element-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution.go b/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution_test.go b/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3159.Find-Occurrences-of-an-Element-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/README.md b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/README.md new file mode 100755 index 000000000..d4201f332 --- /dev/null +++ b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/README.md @@ -0,0 +1,32 @@ +# [3160.Find the Number of Distinct Colors Among the Balls][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Distinct Colors Among the Balls +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-distinct-colors-among-the-balls/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3160.Find-the-Number-of-Distinct-Colors-Among-the-Balls/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3161.Block-Placement-Queries/README.md b/leetcode/3101-3200/3161.Block-Placement-Queries/README.md new file mode 100755 index 000000000..9e4d6d198 --- /dev/null +++ b/leetcode/3101-3200/3161.Block-Placement-Queries/README.md @@ -0,0 +1,32 @@ +# [3161.Block Placement Queries][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Block Placement Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/block-placement-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3161.Block-Placement-Queries/Solution.go b/leetcode/3101-3200/3161.Block-Placement-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3161.Block-Placement-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3161.Block-Placement-Queries/Solution_test.go b/leetcode/3101-3200/3161.Block-Placement-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3161.Block-Placement-Queries/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/README.md b/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/README.md new file mode 100755 index 000000000..ed90d94e7 --- /dev/null +++ b/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/README.md @@ -0,0 +1,32 @@ +# [3162.Find the Number of Good Pairs I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Good Pairs I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-good-pairs-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution.go b/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution_test.go b/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3162.Find-the-Number-of-Good-Pairs-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3163.String-Compression-III/README.md b/leetcode/3101-3200/3163.String-Compression-III/README.md new file mode 100755 index 000000000..cef15e25f --- /dev/null +++ b/leetcode/3101-3200/3163.String-Compression-III/README.md @@ -0,0 +1,32 @@ +# [3163.String Compression III][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +String Compression III +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/string-compression-iii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3163.String-Compression-III/Solution.go b/leetcode/3101-3200/3163.String-Compression-III/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3163.String-Compression-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3163.String-Compression-III/Solution_test.go b/leetcode/3101-3200/3163.String-Compression-III/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3163.String-Compression-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/README.md b/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/README.md new file mode 100755 index 000000000..97be1998b --- /dev/null +++ b/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/README.md @@ -0,0 +1,32 @@ +# [3164.Find the Number of Good Pairs II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Good Pairs II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-good-pairs-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution.go b/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution_test.go b/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3164.Find-the-Number-of-Good-Pairs-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/README.md b/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/README.md new file mode 100755 index 000000000..62674df98 --- /dev/null +++ b/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/README.md @@ -0,0 +1,32 @@ +# [3165.Maximum Sum of Subsequence With Non-adjacent Elements][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Sum of Subsequence With Non-adjacent Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-sum-of-subsequence-with-non-adjacent-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution.go b/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution_test.go b/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3165.Maximum-Sum-of-Subsequence-With-Non-adjacent-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/README.md b/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/README.md new file mode 100755 index 000000000..e0e1211ad --- /dev/null +++ b/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/README.md @@ -0,0 +1,32 @@ +# [3168.Minimum Number of Chairs in a Waiting Room][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Chairs in a Waiting Room +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-chairs-in-a-waiting-room/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution.go b/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution_test.go b/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3168.Minimum-Number-of-Chairs-in-a-Waiting-Room/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md new file mode 100755 index 000000000..234b2b69d --- /dev/null +++ b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/README.md @@ -0,0 +1,32 @@ +# [3169.Count Days Without Meetings][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Days Without Meetings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-days-without-meetings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3169.Count-Days-Without-Meetings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md new file mode 100755 index 000000000..61fb19595 --- /dev/null +++ b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/README.md @@ -0,0 +1,32 @@ +# [3170.Lexicographically Minimum String After Removing Stars][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Lexicographically Minimum String After Removing Stars +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/lexicographically-minimum-string-after-removing-stars/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3170.Lexicographically-Minimum-String-After-Removing-Stars/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/README.md b/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/README.md new file mode 100755 index 000000000..5f473c547 --- /dev/null +++ b/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/README.md @@ -0,0 +1,32 @@ +# [3171.Find Subarray With Bitwise OR Closest to K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Subarray With Bitwise OR Closest to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-subarray-with-bitwise-or-closest-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution.go b/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution_test.go b/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3171.Find-Subarray-With-Bitwise-OR-Closest-to-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3174.Clear-Digits/README.md b/leetcode/3101-3200/3174.Clear-Digits/README.md new file mode 100755 index 000000000..814084c11 --- /dev/null +++ b/leetcode/3101-3200/3174.Clear-Digits/README.md @@ -0,0 +1,32 @@ +# [3174.Clear Digits][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Clear Digits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/clear-digits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3174.Clear-Digits/Solution.go b/leetcode/3101-3200/3174.Clear-Digits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3174.Clear-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3174.Clear-Digits/Solution_test.go b/leetcode/3101-3200/3174.Clear-Digits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3174.Clear-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/README.md b/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/README.md new file mode 100755 index 000000000..c8ed34cdb --- /dev/null +++ b/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/README.md @@ -0,0 +1,32 @@ +# [3175.Find The First Player to win K Games in a Row][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find The First Player to win K Games in a Row +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-first-player-to-win-k-games-in-a-row/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution.go b/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution_test.go b/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3175.Find-The-First-Player-to-win-K-Games-in-a-Row/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/README.md b/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/README.md new file mode 100755 index 000000000..a44ee194a --- /dev/null +++ b/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/README.md @@ -0,0 +1,32 @@ +# [3176.Find the Maximum Length of a Good Subsequence I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Maximum Length of a Good Subsequence I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-maximum-length-of-a-good-subsequence-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution.go b/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution_test.go b/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3176.Find-the-Maximum-Length-of-a-Good-Subsequence-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/README.md b/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/README.md new file mode 100755 index 000000000..21bcd9e1a --- /dev/null +++ b/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/README.md @@ -0,0 +1,32 @@ +# [3177.Find the Maximum Length of a Good Subsequence II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Maximum Length of a Good Subsequence II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-maximum-length-of-a-good-subsequence-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution.go b/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution_test.go b/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3177.Find-the-Maximum-Length-of-a-Good-Subsequence-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/README.md b/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/README.md new file mode 100755 index 000000000..6908d57cf --- /dev/null +++ b/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/README.md @@ -0,0 +1,32 @@ +# [3178.Find the Child Who Has the Ball After K Seconds][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Child Who Has the Ball After K Seconds +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-child-who-has-the-ball-after-k-seconds/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution.go b/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution_test.go b/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3178.Find-the-Child-Who-Has-the-Ball-After-K-Seconds/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/README.md b/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/README.md new file mode 100755 index 000000000..18d7d21b1 --- /dev/null +++ b/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/README.md @@ -0,0 +1,32 @@ +# [3179.Find the N-th Value After K Seconds][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the N-th Value After K Seconds +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-n-th-value-after-k-seconds/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution.go b/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution_test.go b/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3179.Find-the-N-th-Value-After-K-Seconds/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/README.md b/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/README.md new file mode 100755 index 000000000..5c070a3a2 --- /dev/null +++ b/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/README.md @@ -0,0 +1,32 @@ +# [3180.Maximum Total Reward Using Operations I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Total Reward Using Operations I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-total-reward-using-operations-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution.go b/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution_test.go b/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3180.Maximum-Total-Reward-Using-Operations-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/README.md b/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/README.md new file mode 100755 index 000000000..a123e50cc --- /dev/null +++ b/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/README.md @@ -0,0 +1,32 @@ +# [3181.Maximum Total Reward Using Operations II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Total Reward Using Operations II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-total-reward-using-operations-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution.go b/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution_test.go b/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3181.Maximum-Total-Reward-Using-Operations-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/README.md b/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/README.md new file mode 100755 index 000000000..0c01d1cc6 --- /dev/null +++ b/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/README.md @@ -0,0 +1,32 @@ +# [3184.Count Pairs That Form a Complete Day I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Pairs That Form a Complete Day I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-pairs-that-form-a-complete-day-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution.go b/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution_test.go b/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3184.Count-Pairs-That-Form-a-Complete-Day-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/README.md b/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/README.md new file mode 100755 index 000000000..98f64700c --- /dev/null +++ b/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/README.md @@ -0,0 +1,32 @@ +# [3185.Count Pairs That Form a Complete Day II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Pairs That Form a Complete Day II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-pairs-that-form-a-complete-day-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution.go b/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution_test.go b/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3185.Count-Pairs-That-Form-a-Complete-Day-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md new file mode 100755 index 000000000..9c6617eee --- /dev/null +++ b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/README.md @@ -0,0 +1,32 @@ +# [3186.Maximum Total Damage With Spell Casting][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Total Damage With Spell Casting +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-total-damage-with-spell-casting/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3186.Maximum-Total-Damage-With-Spell-Casting/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3187.Peaks-in-Array/README.md b/leetcode/3101-3200/3187.Peaks-in-Array/README.md new file mode 100755 index 000000000..f090af453 --- /dev/null +++ b/leetcode/3101-3200/3187.Peaks-in-Array/README.md @@ -0,0 +1,32 @@ +# [3187.Peaks in Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Peaks in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/peaks-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3187.Peaks-in-Array/Solution.go b/leetcode/3101-3200/3187.Peaks-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3187.Peaks-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3187.Peaks-in-Array/Solution_test.go b/leetcode/3101-3200/3187.Peaks-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3187.Peaks-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/README.md b/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/README.md new file mode 100755 index 000000000..a703bb935 --- /dev/null +++ b/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/README.md @@ -0,0 +1,32 @@ +# [3190.Find Minimum Operations to Make All Elements Divisible by Three][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Minimum Operations to Make All Elements Divisible by Three +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-minimum-operations-to-make-all-elements-divisible-by-three/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution.go b/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution_test.go b/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3190.Find-Minimum-Operations-to-Make-All-Elements-Divisible-by-Three/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md new file mode 100755 index 000000000..98341e4f3 --- /dev/null +++ b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/README.md @@ -0,0 +1,32 @@ +# [3191.Minimum Operations to Make Binary Array Elements Equal to One I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Binary Array Elements Equal to One I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-binary-array-elements-equal-to-one-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution_test.go b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3191.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/README.md b/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/README.md new file mode 100755 index 000000000..29858dce6 --- /dev/null +++ b/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/README.md @@ -0,0 +1,32 @@ +# [3192.Minimum Operations to Make Binary Array Elements Equal to One II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Binary Array Elements Equal to One II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-binary-array-elements-equal-to-one-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution.go b/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution_test.go b/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3192.Minimum-Operations-to-Make-Binary-Array-Elements-Equal-to-One-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/README.md b/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/README.md new file mode 100755 index 000000000..b819a5def --- /dev/null +++ b/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/README.md @@ -0,0 +1,32 @@ +# [3193.Count the Number of Inversions][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Inversions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-inversions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution.go b/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution_test.go b/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3193.Count-the-Number-of-Inversions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/README.md b/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/README.md new file mode 100755 index 000000000..d59424801 --- /dev/null +++ b/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/README.md @@ -0,0 +1,32 @@ +# [3194.Minimum Average of Smallest and Largest Elements][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Average of Smallest and Largest Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-average-of-smallest-and-largest-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution.go b/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution_test.go b/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3194.Minimum-Average-of-Smallest-and-Largest-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md new file mode 100755 index 000000000..8ae78c296 --- /dev/null +++ b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/README.md @@ -0,0 +1,32 @@ +# [3195.Find the Minimum Area to Cover All Ones I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Minimum Area to Cover All Ones I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-minimum-area-to-cover-all-ones-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution_test.go b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3195.Find-the-Minimum-Area-to-Cover-All-Ones-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/README.md b/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/README.md new file mode 100755 index 000000000..4c9b9ecf7 --- /dev/null +++ b/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/README.md @@ -0,0 +1,32 @@ +# [3196.Maximize Total Cost of Alternating Subarrays][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Total Cost of Alternating Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-total-cost-of-alternating-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution.go b/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution_test.go b/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3196.Maximize-Total-Cost-of-Alternating-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/README.md b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/README.md new file mode 100755 index 000000000..a2c0be5fa --- /dev/null +++ b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/README.md @@ -0,0 +1,32 @@ +# [3197.Find the Minimum Area to Cover All Ones II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Minimum Area to Cover All Ones II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-minimum-area-to-cover-all-ones-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution_test.go b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3197.Find-the-Minimum-Area-to-Cover-All-Ones-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/README.md b/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/README.md new file mode 100755 index 000000000..726a0fbe6 --- /dev/null +++ b/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/README.md @@ -0,0 +1,32 @@ +# [3200.Maximum Height of a Triangle][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Height of a Triangle +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-height-of-a-triangle/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution.go b/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution_test.go b/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3101-3200/3200.Maximum-Height-of-a-Triangle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md new file mode 100755 index 000000000..5dd320804 --- /dev/null +++ b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/README.md @@ -0,0 +1,32 @@ +# [3201.Find the Maximum Length of Valid Subsequence I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Maximum Length of Valid Subsequence I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-maximum-length-of-valid-subsequence-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3201.Find-the-Maximum-Length-of-Valid-Subsequence-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md new file mode 100755 index 000000000..f32bfa427 --- /dev/null +++ b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/README.md @@ -0,0 +1,32 @@ +# [3202.Find the Maximum Length of Valid Subsequence II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Maximum Length of Valid Subsequence II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-maximum-length-of-valid-subsequence-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3202.Find-the-Maximum-Length-of-Valid-Subsequence-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/README.md b/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/README.md new file mode 100755 index 000000000..8c9b34944 --- /dev/null +++ b/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/README.md @@ -0,0 +1,32 @@ +# [3203.Find Minimum Diameter After Merging Two Trees][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Minimum Diameter After Merging Two Trees +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-minimum-diameter-after-merging-two-trees/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution.go b/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution_test.go b/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3203.Find-Minimum-Diameter-After-Merging-Two-Trees/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3206.Alternating-Groups-I/README.md b/leetcode/3201-3300/3206.Alternating-Groups-I/README.md new file mode 100755 index 000000000..c355645c3 --- /dev/null +++ b/leetcode/3201-3300/3206.Alternating-Groups-I/README.md @@ -0,0 +1,32 @@ +# [3206.Alternating Groups I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Alternating Groups I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/alternating-groups-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3206.Alternating-Groups-I/Solution.go b/leetcode/3201-3300/3206.Alternating-Groups-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3206.Alternating-Groups-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3206.Alternating-Groups-I/Solution_test.go b/leetcode/3201-3300/3206.Alternating-Groups-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3206.Alternating-Groups-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/README.md b/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/README.md new file mode 100755 index 000000000..65432673d --- /dev/null +++ b/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/README.md @@ -0,0 +1,32 @@ +# [3207.Maximum Points After Enemy Battles][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Points After Enemy Battles +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-points-after-enemy-battles/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution.go b/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution_test.go b/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3207.Maximum-Points-After-Enemy-Battles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/README.md b/leetcode/3201-3300/3208.Alternating-Groups-II/README.md new file mode 100755 index 000000000..4d5d850a1 --- /dev/null +++ b/leetcode/3201-3300/3208.Alternating-Groups-II/README.md @@ -0,0 +1,32 @@ +# [3208.Alternating Groups II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Alternating Groups II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/alternating-groups-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3208.Alternating-Groups-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/README.md b/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/README.md new file mode 100755 index 000000000..99d2e740c --- /dev/null +++ b/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/README.md @@ -0,0 +1,32 @@ +# [3209.Number of Subarrays With AND Value of K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Subarrays With AND Value of K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-subarrays-with-and-value-of-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution.go b/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution_test.go b/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3209.Number-of-Subarrays-With-AND-Value-of-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3210.Find-the-Encrypted-String/README.md b/leetcode/3201-3300/3210.Find-the-Encrypted-String/README.md new file mode 100755 index 000000000..608808c0f --- /dev/null +++ b/leetcode/3201-3300/3210.Find-the-Encrypted-String/README.md @@ -0,0 +1,32 @@ +# [3210.Find the Encrypted String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Encrypted String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-encrypted-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution.go b/leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution_test.go b/leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3210.Find-the-Encrypted-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md new file mode 100755 index 000000000..873cf1a45 --- /dev/null +++ b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/README.md @@ -0,0 +1,32 @@ +# [3211.Generate Binary Strings Without Adjacent Zeros][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Generate Binary Strings Without Adjacent Zeros +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/generate-binary-strings-without-adjacent-zeros/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3211.Generate-Binary-Strings-Without-Adjacent-Zeros/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/README.md b/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/README.md new file mode 100755 index 000000000..b324fbdcd --- /dev/null +++ b/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/README.md @@ -0,0 +1,32 @@ +# [3212.Count Submatrices With Equal Frequency of X and Y][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Submatrices With Equal Frequency of X and Y +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-submatrices-with-equal-frequency-of-x-and-y/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution.go b/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution_test.go b/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3212.Count-Submatrices-With-Equal-Frequency-of-X-and-Y/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/README.md b/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/README.md new file mode 100755 index 000000000..5a9831de0 --- /dev/null +++ b/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/README.md @@ -0,0 +1,32 @@ +# [3213.Construct String with Minimum Cost][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Construct String with Minimum Cost +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-string-with-minimum-cost/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution.go b/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution_test.go b/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3213.Construct-String-with-Minimum-Cost/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/README.md b/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/README.md new file mode 100755 index 000000000..9b09c63f5 --- /dev/null +++ b/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/README.md @@ -0,0 +1,32 @@ +# [3216.Lexicographically Smallest String After a Swap][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Lexicographically Smallest String After a Swap +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/lexicographically-smallest-string-after-a-swap/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution.go b/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution_test.go b/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3216.Lexicographically-Smallest-String-After-a-Swap/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/README.md b/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/README.md new file mode 100755 index 000000000..820d9ec93 --- /dev/null +++ b/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/README.md @@ -0,0 +1,32 @@ +# [3217.Delete Nodes From Linked List Present in Array][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Delete Nodes From Linked List Present in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/delete-nodes-from-linked-list-present-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution.go b/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution_test.go b/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3217.Delete-Nodes-From-Linked-List-Present-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/README.md b/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/README.md new file mode 100755 index 000000000..884d393ec --- /dev/null +++ b/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/README.md @@ -0,0 +1,32 @@ +# [3218.Minimum Cost for Cutting Cake I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost for Cutting Cake I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-for-cutting-cake-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution.go b/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution_test.go b/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3218.Minimum-Cost-for-Cutting-Cake-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/README.md b/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/README.md new file mode 100755 index 000000000..244c0f60c --- /dev/null +++ b/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/README.md @@ -0,0 +1,32 @@ +# [3219.Minimum Cost for Cutting Cake II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost for Cutting Cake II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-for-cutting-cake-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution.go b/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution_test.go b/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3219.Minimum-Cost-for-Cutting-Cake-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/README.md b/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/README.md new file mode 100755 index 000000000..36a93c547 --- /dev/null +++ b/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/README.md @@ -0,0 +1,32 @@ +# [3222.Find the Winning Player in Coin Game][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Winning Player in Coin Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-winning-player-in-coin-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution.go b/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution_test.go b/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3222.Find-the-Winning-Player-in-Coin-Game/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md new file mode 100755 index 000000000..14fd0d8fe --- /dev/null +++ b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/README.md @@ -0,0 +1,32 @@ +# [3223.Minimum Length of String After Operations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Length of String After Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-length-of-string-after-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3223.Minimum-Length-of-String-After-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/README.md b/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/README.md new file mode 100755 index 000000000..4ddfe905f --- /dev/null +++ b/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/README.md @@ -0,0 +1,32 @@ +# [3224.Minimum Array Changes to Make Differences Equal][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Array Changes to Make Differences Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-array-changes-to-make-differences-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution.go b/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution_test.go b/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3224.Minimum-Array-Changes-to-Make-Differences-Equal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/README.md b/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/README.md new file mode 100755 index 000000000..480c10830 --- /dev/null +++ b/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/README.md @@ -0,0 +1,32 @@ +# [3225.Maximum Score From Grid Operations][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score From Grid Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-from-grid-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution.go b/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution_test.go b/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3225.Maximum-Score-From-Grid-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/README.md b/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/README.md new file mode 100755 index 000000000..dbbda772b --- /dev/null +++ b/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/README.md @@ -0,0 +1,32 @@ +# [3226.Number of Bit Changes to Make Two Integers Equal][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Bit Changes to Make Two Integers Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-bit-changes-to-make-two-integers-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution.go b/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution_test.go b/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3226.Number-of-Bit-Changes-to-Make-Two-Integers-Equal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md new file mode 100755 index 000000000..0e1001c83 --- /dev/null +++ b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/README.md @@ -0,0 +1,32 @@ +# [3227.Vowels Game in a String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Vowels Game in a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/vowels-game-in-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3227.Vowels-Game-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md new file mode 100755 index 000000000..5b00aedbc --- /dev/null +++ b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/README.md @@ -0,0 +1,32 @@ +# [3228.Maximum Number of Operations to Move Ones to the End][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Operations to Move Ones to the End +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-operations-to-move-ones-to-the-end/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3228.Maximum-Number-of-Operations-to-Move-Ones-to-the-End/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/README.md b/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/README.md new file mode 100755 index 000000000..b95e493bd --- /dev/null +++ b/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/README.md @@ -0,0 +1,32 @@ +# [3229.Minimum Operations to Make Array Equal to Target][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Array Equal to Target +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-array-equal-to-target/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution.go b/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution_test.go b/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3229.Minimum-Operations-to-Make-Array-Equal-to-Target/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/README.md b/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/README.md new file mode 100755 index 000000000..958057a9f --- /dev/null +++ b/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/README.md @@ -0,0 +1,32 @@ +# [3232.Find if Digit Game Can Be Won][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find if Digit Game Can Be Won +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-if-digit-game-can-be-won/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution.go b/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution_test.go b/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3232.Find-if-Digit-Game-Can-Be-Won/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/README.md b/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/README.md new file mode 100755 index 000000000..c0b846816 --- /dev/null +++ b/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/README.md @@ -0,0 +1,32 @@ +# [3233.Find the Count of Numbers Which Are Not Special][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Count of Numbers Which Are Not Special +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-count-of-numbers-which-are-not-special/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution.go b/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution_test.go b/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3233.Find-the-Count-of-Numbers-Which-Are-Not-Special/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md new file mode 100755 index 000000000..d17dd1046 --- /dev/null +++ b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/README.md @@ -0,0 +1,32 @@ +# [3234.Count the Number of Substrings With Dominant Ones][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Substrings With Dominant Ones +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-substrings-with-dominant-ones/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3234.Count-the-Number-of-Substrings-With-Dominant-Ones/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/README.md b/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/README.md new file mode 100755 index 000000000..2f8e850a4 --- /dev/null +++ b/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/README.md @@ -0,0 +1,32 @@ +# [3235.Check if the Rectangle Corner Is Reachable][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if the Rectangle Corner Is Reachable +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-the-rectangle-corner-is-reachable/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution.go b/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution_test.go b/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3235.Check-if-the-Rectangle-Corner-Is-Reachable/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/README.md b/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/README.md new file mode 100755 index 000000000..c94fed5bf --- /dev/null +++ b/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/README.md @@ -0,0 +1,32 @@ +# [3238.Find the Number of Winning Players][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Number of Winning Players +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-number-of-winning-players/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution.go b/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution_test.go b/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3238.Find-the-Number-of-Winning-Players/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md new file mode 100755 index 000000000..808a9dbd7 --- /dev/null +++ b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/README.md @@ -0,0 +1,32 @@ +# [3239.Minimum Number of Flips to Make Binary Grid Palindromic I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Flips to Make Binary Grid Palindromic I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-flips-to-make-binary-grid-palindromic-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3239.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/README.md b/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/README.md new file mode 100755 index 000000000..88edccd24 --- /dev/null +++ b/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/README.md @@ -0,0 +1,32 @@ +# [3240.Minimum Number of Flips to Make Binary Grid Palindromic II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Flips to Make Binary Grid Palindromic II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-flips-to-make-binary-grid-palindromic-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution.go b/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution_test.go b/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3240.Minimum-Number-of-Flips-to-Make-Binary-Grid-Palindromic-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/README.md b/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/README.md new file mode 100755 index 000000000..b6f4ce1aa --- /dev/null +++ b/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/README.md @@ -0,0 +1,32 @@ +# [3241.Time Taken to Mark All Nodes][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Time Taken to Mark All Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/time-taken-to-mark-all-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution.go b/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution_test.go b/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3241.Time-Taken-to-Mark-All-Nodes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/README.md b/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/README.md new file mode 100755 index 000000000..c92245604 --- /dev/null +++ b/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/README.md @@ -0,0 +1,32 @@ +# [3242.Design Neighbor Sum Service][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Neighbor Sum Service +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-neighbor-sum-service/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution.go b/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution_test.go b/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3242.Design-Neighbor-Sum-Service/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md new file mode 100755 index 000000000..5a0cded4c --- /dev/null +++ b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/README.md @@ -0,0 +1,32 @@ +# [3243.Shortest Distance After Road Addition Queries I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Shortest Distance After Road Addition Queries I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shortest-distance-after-road-addition-queries-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3243.Shortest-Distance-After-Road-Addition-Queries-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/README.md b/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/README.md new file mode 100755 index 000000000..0116efedf --- /dev/null +++ b/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/README.md @@ -0,0 +1,32 @@ +# [3244.Shortest Distance After Road Addition Queries II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Shortest Distance After Road Addition Queries II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shortest-distance-after-road-addition-queries-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution.go b/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution_test.go b/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3244.Shortest-Distance-After-Road-Addition-Queries-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3245.Alternating-Groups-III/README.md b/leetcode/3201-3300/3245.Alternating-Groups-III/README.md new file mode 100755 index 000000000..4a240da75 --- /dev/null +++ b/leetcode/3201-3300/3245.Alternating-Groups-III/README.md @@ -0,0 +1,32 @@ +# [3245.Alternating Groups III][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Alternating Groups III +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/alternating-groups-iii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3245.Alternating-Groups-III/Solution.go b/leetcode/3201-3300/3245.Alternating-Groups-III/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3245.Alternating-Groups-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3245.Alternating-Groups-III/Solution_test.go b/leetcode/3201-3300/3245.Alternating-Groups-III/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3245.Alternating-Groups-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3248.Snake-in-Matrix/README.md b/leetcode/3201-3300/3248.Snake-in-Matrix/README.md new file mode 100755 index 000000000..4268fe251 --- /dev/null +++ b/leetcode/3201-3300/3248.Snake-in-Matrix/README.md @@ -0,0 +1,32 @@ +# [3248.Snake in Matrix][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Snake in Matrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/snake-in-matrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3248.Snake-in-Matrix/Solution.go b/leetcode/3201-3300/3248.Snake-in-Matrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3248.Snake-in-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3248.Snake-in-Matrix/Solution_test.go b/leetcode/3201-3300/3248.Snake-in-Matrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3248.Snake-in-Matrix/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md new file mode 100755 index 000000000..5ef59eb3f --- /dev/null +++ b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/README.md @@ -0,0 +1,32 @@ +# [3249.Count the Number of Good Nodes][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Good Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-good-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3249.Count-the-Number-of-Good-Nodes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/README.md b/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/README.md new file mode 100755 index 000000000..543d6a901 --- /dev/null +++ b/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/README.md @@ -0,0 +1,32 @@ +# [3250.Find the Count of Monotonic Pairs I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Count of Monotonic Pairs I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-count-of-monotonic-pairs-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution.go b/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution_test.go b/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3250.Find-the-Count-of-Monotonic-Pairs-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/README.md b/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/README.md new file mode 100755 index 000000000..ca2972467 --- /dev/null +++ b/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/README.md @@ -0,0 +1,32 @@ +# [3251.Find the Count of Monotonic Pairs II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Count of Monotonic Pairs II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-count-of-monotonic-pairs-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution.go b/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution_test.go b/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3251.Find-the-Count-of-Monotonic-Pairs-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md new file mode 100755 index 000000000..67f11bdeb --- /dev/null +++ b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/README.md @@ -0,0 +1,32 @@ +# [3254.Find the Power of K-Size Subarrays I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Power of K-Size Subarrays I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-power-of-k-size-subarrays-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3254.Find-the-Power-of-K-Size-Subarrays-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md new file mode 100755 index 000000000..8d3be4f11 --- /dev/null +++ b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/README.md @@ -0,0 +1,32 @@ +# [3255.Find the Power of K-Size Subarrays II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Power of K-Size Subarrays II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-power-of-k-size-subarrays-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3255.Find-the-Power-of-K-Size-Subarrays-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/README.md b/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/README.md new file mode 100755 index 000000000..afd71da1a --- /dev/null +++ b/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/README.md @@ -0,0 +1,32 @@ +# [3256.Maximum Value Sum by Placing Three Rooks I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Value Sum by Placing Three Rooks I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-sum-by-placing-three-rooks-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution.go b/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution_test.go b/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3256.Maximum-Value-Sum-by-Placing-Three-Rooks-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/README.md b/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/README.md new file mode 100755 index 000000000..4a6f87c42 --- /dev/null +++ b/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/README.md @@ -0,0 +1,32 @@ +# [3257.Maximum Value Sum by Placing Three Rooks II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Value Sum by Placing Three Rooks II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-sum-by-placing-three-rooks-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution.go b/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution_test.go b/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3257.Maximum-Value-Sum-by-Placing-Three-Rooks-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/README.md b/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/README.md new file mode 100755 index 000000000..2fe084fab --- /dev/null +++ b/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/README.md @@ -0,0 +1,32 @@ +# [3258.Count Substrings That Satisfy K-Constraint I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Substrings That Satisfy K-Constraint I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-substrings-that-satisfy-k-constraint-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution.go b/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution_test.go b/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3258.Count-Substrings-That-Satisfy-K-Constraint-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/README.md b/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/README.md new file mode 100755 index 000000000..510f9da47 --- /dev/null +++ b/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/README.md @@ -0,0 +1,32 @@ +# [3259.Maximum Energy Boost From Two Drinks][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Energy Boost From Two Drinks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-energy-boost-from-two-drinks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution.go b/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution_test.go b/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3259.Maximum-Energy-Boost-From-Two-Drinks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/README.md b/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/README.md new file mode 100755 index 000000000..577b7f0c0 --- /dev/null +++ b/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/README.md @@ -0,0 +1,32 @@ +# [3260.Find the Largest Palindrome Divisible by K][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Largest Palindrome Divisible by K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-largest-palindrome-divisible-by-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution.go b/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution_test.go b/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3260.Find-the-Largest-Palindrome-Divisible-by-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/README.md b/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/README.md new file mode 100755 index 000000000..7f4e8688e --- /dev/null +++ b/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/README.md @@ -0,0 +1,32 @@ +# [3261.Count Substrings That Satisfy K-Constraint II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Substrings That Satisfy K-Constraint II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-substrings-that-satisfy-k-constraint-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution.go b/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution_test.go b/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3261.Count-Substrings-That-Satisfy-K-Constraint-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md new file mode 100755 index 000000000..49a4f32f6 --- /dev/null +++ b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/README.md @@ -0,0 +1,32 @@ +# [3264.Final Array State After K Multiplication Operations I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Final Array State After K Multiplication Operations I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/final-array-state-after-k-multiplication-operations-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3264.Final-Array-State-After-K-Multiplication-Operations-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/README.md b/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/README.md new file mode 100755 index 000000000..aa51481ea --- /dev/null +++ b/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/README.md @@ -0,0 +1,32 @@ +# [3265.Count Almost Equal Pairs I][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Almost Equal Pairs I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-almost-equal-pairs-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution.go b/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution_test.go b/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3265.Count-Almost-Equal-Pairs-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/README.md b/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/README.md new file mode 100755 index 000000000..4670892df --- /dev/null +++ b/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/README.md @@ -0,0 +1,32 @@ +# [3266.Final Array State After K Multiplication Operations II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Final Array State After K Multiplication Operations II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/final-array-state-after-k-multiplication-operations-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution.go b/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution_test.go b/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3266.Final-Array-State-After-K-Multiplication-Operations-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/README.md b/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/README.md new file mode 100755 index 000000000..f1d02e1ed --- /dev/null +++ b/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/README.md @@ -0,0 +1,32 @@ +# [3267.Count Almost Equal Pairs II][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Almost Equal Pairs II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-almost-equal-pairs-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution.go b/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution_test.go b/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3267.Count-Almost-Equal-Pairs-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/README.md b/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/README.md new file mode 100755 index 000000000..a8becf6a8 --- /dev/null +++ b/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/README.md @@ -0,0 +1,32 @@ +# [3270.Find the Key of the Numbers][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Key of the Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-key-of-the-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution.go b/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution_test.go b/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3270.Find-the-Key-of-the-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3271.Hash-Divided-String/README.md b/leetcode/3201-3300/3271.Hash-Divided-String/README.md new file mode 100755 index 000000000..123613c87 --- /dev/null +++ b/leetcode/3201-3300/3271.Hash-Divided-String/README.md @@ -0,0 +1,32 @@ +# [3271.Hash Divided String][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Hash Divided String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/hash-divided-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3271.Hash-Divided-String/Solution.go b/leetcode/3201-3300/3271.Hash-Divided-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3271.Hash-Divided-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go b/leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3271.Hash-Divided-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/README.md b/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/README.md new file mode 100755 index 000000000..e1e040f06 --- /dev/null +++ b/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/README.md @@ -0,0 +1,32 @@ +# [3272.Find the Count of Good Integers][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Count of Good Integers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-count-of-good-integers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution.go b/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution_test.go b/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3272.Find-the-Count-of-Good-Integers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/README.md b/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/README.md new file mode 100755 index 000000000..0bb60dd71 --- /dev/null +++ b/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/README.md @@ -0,0 +1,32 @@ +# [3273.Minimum Amount of Damage Dealt to Bob][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Amount of Damage Dealt to Bob +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-amount-of-damage-dealt-to-bob/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution.go b/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution_test.go b/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3273.Minimum-Amount-of-Damage-Dealt-to-Bob/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/README.md b/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/README.md new file mode 100755 index 000000000..018e65b1c --- /dev/null +++ b/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/README.md @@ -0,0 +1,32 @@ +# [3274.Check if Two Chessboard Squares Have the Same Color][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Two Chessboard Squares Have the Same Color +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-two-chessboard-squares-have-the-same-color/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution.go b/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution_test.go b/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3274.Check-if-Two-Chessboard-Squares-Have-the-Same-Color/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/README.md b/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/README.md new file mode 100755 index 000000000..61fa47b7f --- /dev/null +++ b/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/README.md @@ -0,0 +1,32 @@ +# [3275.K-th Nearest Obstacle Queries][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +K-th Nearest Obstacle Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/k-th-nearest-obstacle-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution.go b/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution_test.go b/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3275.K-th-Nearest-Obstacle-Queries/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/README.md b/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/README.md new file mode 100755 index 000000000..b6d9e4fdd --- /dev/null +++ b/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/README.md @@ -0,0 +1,32 @@ +# [3276.Select Cells in Grid With Maximum Score][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Select Cells in Grid With Maximum Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/select-cells-in-grid-with-maximum-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution.go b/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution_test.go b/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3276.Select-Cells-in-Grid-With-Maximum-Score/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/README.md b/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/README.md new file mode 100755 index 000000000..a0be41490 --- /dev/null +++ b/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/README.md @@ -0,0 +1,32 @@ +# [3277.Maximum XOR Score Subarray Queries][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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum XOR Score Subarray Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-xor-score-subarray-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution.go b/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution_test.go b/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/3201-3300/3277.Maximum-XOR-Score-Subarray-Queries/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From b4e31c62e24e4a791d02280b1d7c0b72d5ee76a2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 Sep 2024 14:20:25 +0800 Subject: [PATCH 057/450] Add solution and test-cases for problem 809 --- .../801-900/0809.Expressive-Words/README.md | 35 ++++++++----- .../801-900/0809.Expressive-Words/Solution.go | 52 ++++++++++++++++++- .../0809.Expressive-Words/Solution_test.go | 20 +++---- 3 files changed, 81 insertions(+), 26 deletions(-) diff --git a/leetcode/801-900/0809.Expressive-Words/README.md b/leetcode/801-900/0809.Expressive-Words/README.md index cb6c800eb..fcde1ab3a 100644 --- a/leetcode/801-900/0809.Expressive-Words/README.md +++ b/leetcode/801-900/0809.Expressive-Words/README.md @@ -1,28 +1,35 @@ # [809.Expressive Words][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 +Sometimes people repeat letters to represent extra feeling. For example: + +- `"hello" -> "heeellooo"` +- `"hi" -> "hiiii"` + +In these strings like `"heeellooo"`, we have groups of adjacent letters that are all the same: `"h"`, `"eee"`, `"ll"`, `"ooo"`. + +You are given a string `s` and an array of query strings `words`. A query word is **strectchy** if it can be made to be equal to `s` by any number of applications of the following extension operation: choose a group consisting of characters `c`, and add some number of characters `c` to the group so that the size of the group is **three or more**. + +- For example, starting with `"hello"`, we could do an extension on the group `"o"` to get `"hellooo"`, but we cannot get `"helloo"` since the group `"oo"` has a size less than three. Also, we could do another extension like `"ll" -> "lllll"` to get `"helllllooo"`. If `s = "helllllooo"`, then the query word `"hello"` would be **strectchy** because of these two extension operations: `query = "hello" -> "hellooo" -> "helllllooo" = s`. + +Return the number of query strings that are **strectchy**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "heeellooo", words = ["hello", "hi", "helo"] +Output: 1 +Explanation: +We can extend "e" and "o" in the word "hello" to get "heeellooo". +We can't extend "helo" to get "heeellooo" because the group "ll" is not size 3 or more. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Expressive Words -```go ``` - +Input: s = "zzzzzyyyyy", words = ["zzyy","zy","zyy"] +Output: 3 +``` ## 结语 diff --git a/leetcode/801-900/0809.Expressive-Words/Solution.go b/leetcode/801-900/0809.Expressive-Words/Solution.go index d115ccf5e..9c137c624 100644 --- a/leetcode/801-900/0809.Expressive-Words/Solution.go +++ b/leetcode/801-900/0809.Expressive-Words/Solution.go @@ -1,5 +1,53 @@ package Solution -func Solution(x bool) bool { - return x +type char809 struct { + c byte + cc int +} + +func toChars(s string) []char809 { + pre := s[0] + c := 1 + chars := make([]char809, 0) + for i := 1; i < len(s); i++ { + b := s[i] + if b == pre { + c++ + continue + } + chars = append(chars, char809{c: byte(pre), cc: c}) + pre = b + c = 1 + } + chars = append(chars, char809{c: byte(pre), cc: c}) + return chars +} +func Solution(s string, words []string) int { + ans := 0 + target := toChars(s) + for _, word := range words { + tmp := toChars(word) + if len(tmp) != len(target) { + continue + } + ok := true + for i := range len(target) { + if target[i].c != tmp[i].c { + ok = false + break + } + if target[i].cc < 3 && tmp[i].cc != target[i].cc { + ok = false + break + } + if tmp[i].cc > target[i].cc { + ok = false + break + } + } + if ok { + ans++ + } + } + return ans } diff --git a/leetcode/801-900/0809.Expressive-Words/Solution_test.go b/leetcode/801-900/0809.Expressive-Words/Solution_test.go index 14ff50eb4..de51cc3a7 100644 --- a/leetcode/801-900/0809.Expressive-Words/Solution_test.go +++ b/leetcode/801-900/0809.Expressive-Words/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s string + words []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "heeellooo", []string{"hello", "hi", "helo"}, 1}, + {"TestCase2", "zzzzzyyyyy", []string{"zzyy", "zy", "zyy"}, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.words) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.words) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 529ede8c15f885b2fe9ecc18c2e80da35bbbe81d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 9 Sep 2024 09:12:06 +0800 Subject: [PATCH 058/450] Add solution and test-cases for problem 2326 --- .../2301-2400/2326.Spiral-Matrix-IV/1.jpg | Bin 0 -> 27103 bytes .../2301-2400/2326.Spiral-Matrix-IV/2.jpg | Bin 0 -> 7460 bytes .../2301-2400/2326.Spiral-Matrix-IV/README.md | 35 +++++++++------ .../2326.Spiral-Matrix-IV/Solution.go | 40 +++++++++++++++++- .../2326.Spiral-Matrix-IV/Solution_test.go | 26 +++++++----- 5 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 leetcode/2301-2400/2326.Spiral-Matrix-IV/1.jpg create mode 100644 leetcode/2301-2400/2326.Spiral-Matrix-IV/2.jpg diff --git a/leetcode/2301-2400/2326.Spiral-Matrix-IV/1.jpg b/leetcode/2301-2400/2326.Spiral-Matrix-IV/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34bcd8c03f73034e2d080f734edd2ef096362da3 GIT binary patch literal 27103 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 literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2326.Spiral-Matrix-IV/2.jpg b/leetcode/2301-2400/2326.Spiral-Matrix-IV/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d5161324ab1b6905605e837cd81349f6a49c56d GIT binary patch literal 7460 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 nsoze&JO1X&x; [!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 two integers `m` and `n`, which represent the dimensions of a matrix. + +You are also given the `head` of a linked list of integers. + +Generate an `m x n` matrix that contains the integers in the linked list presented in **spiral order **(clockwise)**, starting from the **top-left** of the matrix. If there are remaining empty spaces, fill them with ``-1`. + +Return the generated matrix. -**Example 1:** +**Example 1:** + +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: m = 3, n = 5, head = [3,0,2,6,8,1,7,9,4,2,5,5,0] +Output: [[3,0,2,6,8],[5,0,-1,-1,1],[5,2,4,9,7]] +Explanation: The diagram above shows how the values are printed in the matrix. +Note that the remaining spaces in the matrix are filled with -1. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Spiral Matrix IV -```go ``` - +Input: m = 1, n = 4, head = [0,1,2] +Output: [[0,1,2,-1]] +Explanation: The diagram above shows how the values are printed from left to right in the matrix. +The last space in the matrix is set to -1. +``` ## 结语 diff --git a/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go index d115ccf5e..8be4f3350 100644 --- a/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go +++ b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +type ListNode struct { + Val int + Next *ListNode +} + +func Solution(m int, n int, head *ListNode) [][]int { + ans := make([][]int, m) + for i := range m { + ans[i] = make([]int, n) + for j := range n { + ans[i][j] = -1 + } + } + + x, y := 0, 0 + width := 0 + for head != nil { + for ; y < n-width && head != nil; y, head = y+1, head.Next { + ans[x][y] = head.Val + } + x, y = x+1, y-1 + + for ; x < m-width && head != nil; x, head = x+1, head.Next { + ans[x][y] = head.Val + } + x, y = x-1, y-1 + + for ; y >= width && head != nil; y, head = y-1, head.Next { + ans[x][y] = head.Val + } + x, y = x-1, y+1 + for ; x > width && head != nil; x, head = x-1, head.Next { + ans[x][y] = head.Val + } + width++ + x, y = width, width + } + return ans } diff --git a/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go index 14ff50eb4..af9b89bf7 100644 --- a/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go +++ b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go @@ -10,30 +10,36 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + m, n int + head *ListNode + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 5, &ListNode{3, &ListNode{0, &ListNode{2, &ListNode{6, &ListNode{8, &ListNode{1, &ListNode{7, &ListNode{9, &ListNode{4, &ListNode{2, &ListNode{5, &ListNode{5, &ListNode{0, nil}}}}}}}}}}}}}, [][]int{ + {3, 0, 2, 6, 8}, + {5, 0, -1, -1, 1}, + {5, 2, 4, 9, 7}, + }}, + {"TestCase2", 1, 4, &ListNode{0, &ListNode{1, &ListNode{2, nil}}}, [][]int{ + {0, 1, 2, -1}, + }}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.m, c.n, c.head) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.m, c.n, c.head) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ba11eef19eaf80cf601424233b7ca223e80a1b0e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 10 Sep 2024 09:08:01 +0800 Subject: [PATCH 059/450] Add solution and test-cases for problem 893 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 16 +++++++- .../Solution_test.go | 13 +++---- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/README.md b/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/README.md index 971e82ee1..af6d83ac1 100644 --- a/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/README.md +++ b/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/README.md @@ -1,28 +1,38 @@ # [893.Groups of Special-Equivalent Strings][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 strings of the same length `words`. + +In one **move**, you can swap any two even indexed characters or any two odd indexed characters of a string `words[i]`. + +Two strings `words[i]` and `words[j]` are **special-equivalent** if after any number of moves, `words[i] == words[j]`. + +- For example, `words[i] = "zzxy"` and `words[j] = "xyzz"` are **special-equivalent** because we may make the moves `"zzxy" -> "xzzy" -> "xyzz"`. + +A **group of special-equivalent strings** from `words` is a non-empty subset of words such that: + +- Every pair of strings in the group are special equivalent, and +- The group is the largest size possible (i.e., there is not a string `words[i]` not in the group such that `words[i]` is special-equivalent to every string in the group). + +Return the number of **groups of special-equivalent strings** from `words`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["abcd","cdab","cbad","xyzz","zzxy","zzyx"] +Output: 3 +Explanation: +One group is ["abcd", "cdab", "cbad"], since they are all pairwise special equivalent, and none of the other strings is all pairwise special equivalent to these. +The other two groups are ["xyzz", "zzxy"] and ["zzyx"]. +Note that in particular, "zzxy" is not special equivalent to "zzyx". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Groups of Special-Equivalent Strings -```go ``` - +Input: words = ["abc","acb","bac","bca","cab","cba"] +Output: 3 +``` ## 结语 diff --git a/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution.go b/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution.go index d115ccf5e..80797a49f 100644 --- a/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution.go +++ b/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words []string) int { + in := make(map[[2][26]int]int) + for _, word := range words { + k1, k2 := [26]int{}, [26]int{} + for i := range word { + if i&1 == 0 { + k1[word[i]-'a']++ + continue + } + k2[word[i]-'a']++ + } + in[[2][26]int{k1, k2}]++ + } + return len(in) } diff --git a/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution_test.go b/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution_test.go index 14ff50eb4..b45d02e18 100644 --- a/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution_test.go +++ b/leetcode/801-900/0893.Groups-of-Special-Equivalent-Strings/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"abcd", "cdab", "cbad", "xyzz", "zzxy", "zzyx"}, 3}, + {"TestCase2", []string{"abc", "acb", "bac", "bca", "cab", "cba"}, 3}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d40356b767fef85752e439b0603dd8f329dee457 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 11 Sep 2024 08:50:20 +0800 Subject: [PATCH 060/450] Add solution and test-cases for problem 2220 --- .../README.md | 35 +++++++++++-------- .../Solution.go | 10 ++++-- .../Solution_test.go | 21 ++++++----- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md index 15571a84a..fd51184cd 100755 --- a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md +++ b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md @@ -1,28 +1,35 @@ # [2220.Minimum Bit Flips to Convert Number][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 +A **bit flip** of a number `x` is choosing a bit in the binary representation of `x` and **flipping** it from either `0` to `1` or `1` to `0`. + +- For example, for `x = 7`, the binary representation is `111` and we may choose any bit (including any leading zeros not shown) and flip it. We can flip the first bit from the right to get `110`, flip the second bit from the right to get `101`, flip the fifth bit from the right (a leading zero) to get `10111`, etc. + +Given two integers `start` and `goal`, return the **minimum** number of **bit flips** to convert `start` to `goal`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: start = 10, goal = 7 +Output: 3 +Explanation: The binary representation of 10 and 7 are 1010 and 0111 respectively. We can convert 10 to 7 in 3 steps: +- Flip the first bit from the right: 1010 -> 1011. +- Flip the third bit from the right: 1011 -> 1111. +- Flip the fourth bit from the right: 1111 -> 0111. +It can be shown we cannot convert 10 to 7 in less than 3 steps. Hence, we return 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Bit Flips to Convert Number -```go ``` - +Input: start = 3, goal = 4 +Output: 3 +Explanation: The binary representation of 3 and 4 are 011 and 100 respectively. We can convert 3 to 4 in 3 steps: +- Flip the first bit from the right: 011 -> 010. +- Flip the second bit from the right: 010 -> 000. +- Flip the third bit from the right: 000 -> 100. +It can be shown we cannot convert 3 to 4 in less than 3 steps. Hence, we return 3. +``` ## 结语 diff --git a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go index d115ccf5e..a8456dcdc 100644 --- a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go +++ b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go @@ -1,5 +1,11 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(start int, goal int) int { + x := start ^ goal + n := 0 + for x > 0 { + n++ + x = x & (x - 1) + } + return n } diff --git a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go index 14ff50eb4..d742c14c8 100644 --- a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go +++ b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + start, goal int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 10, 7, 3}, + {"TestCase2", 3, 4, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.start, c.goal) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.start, c.goal) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1fe0257c5bbca45ec723f175d510544048f3ddf2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 12 Sep 2024 08:58:40 +0800 Subject: [PATCH 061/450] Add solution and test-cases for problem 1684 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 21 +++++++++++-- .../Solution_test.go | 23 +++++++------- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md index b7cc389df..f887e8f22 100755 --- a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md +++ b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md @@ -1,28 +1,33 @@ # [1684.Count the Number of Consistent Strings][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 a string `allowed` consisting of **distinct** characters and an array of strings `words`. A string is **consistent** if all characters in the string appear in the string `allowed`. + +Return the number of **consistent** strings in the array words. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: allowed = "ab", words = ["ad","bd","aaab","baa","badab"] +Output: 2 +Explanation: Strings "aaab" and "baa" are consistent since they only contain characters 'a' and 'b'. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count the Number of Consistent Strings -```go +``` +Input: allowed = "abc", words = ["a","b","c","ab","ac","bc","abc"] +Output: 7 +Explanation: All strings are consistent. ``` +**Example 3:** + +``` +Input: allowed = "cad", words = ["cc","acd","b","ba","bac","bad","ac","d"] +Output: 4 +Explanation: Strings "cc", "acd", "ac", and "d" are consistent. +``` ## 结语 diff --git a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go index d115ccf5e..29dfd5f2b 100644 --- a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go +++ b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(allowed string, words []string) int { + in := [26]bool{} + for _, b := range allowed { + in[b-'a'] = true + } + ans := 0 + for _, word := range words { + ok := true + for _, b := range word { + if !in[b-'a'] { + ok = false + break + } + } + if ok { + ans++ + } + } + return ans } diff --git a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go index 14ff50eb4..7879ba163 100644 --- a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go +++ b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + allowed string + words []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ab", []string{"ad", "bd", "aaab", "baa", "badab"}, 2}, + {"TestCase2", "abc", []string{"a", "b", "c", "ab", "ac", "bc", "abc"}, 7}, + {"TestCase3", "cad", []string{"cc", "acd", "b", "ba", "bac", "bad", "ac", "d"}, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.allowed, c.words) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.allowed, c.words) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d91ccbaad6a4e67746ac1560df418d10d2a120a7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 13 Sep 2024 09:06:07 +0800 Subject: [PATCH 062/450] Add solution and test-cases for problem 670 --- leetcode/601-700/0670.Maximum-Swap/README.md | 25 ++++++++--------- .../601-700/0670.Maximum-Swap/Solution.go | 27 +++++++++++++++++-- .../0670.Maximum-Swap/Solution_test.go | 15 ++++++----- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/leetcode/601-700/0670.Maximum-Swap/README.md b/leetcode/601-700/0670.Maximum-Swap/README.md index 4ed368e0d..5f2453ea2 100644 --- a/leetcode/601-700/0670.Maximum-Swap/README.md +++ b/leetcode/601-700/0670.Maximum-Swap/README.md @@ -1,28 +1,25 @@ # [670.Maximum Swap][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 integer `num`. You can swap two digits at most once to get the maximum valued number. + +Return the maximum valued number you can get. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 2736 +Output: 7236 +Explanation: Swap the number 2 and the number 7. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Swap -```go ``` - +Input: num = 9973 +Output: 9973 +Explanation: No swap. +``` ## 结语 diff --git a/leetcode/601-700/0670.Maximum-Swap/Solution.go b/leetcode/601-700/0670.Maximum-Swap/Solution.go index d115ccf5e..248e07ecb 100644 --- a/leetcode/601-700/0670.Maximum-Swap/Solution.go +++ b/leetcode/601-700/0670.Maximum-Swap/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num int) int { + digits := make([]uint8, 0) + for num > 0 { + mod := num % 10 + digits = append(digits, uint8(mod)) + num /= 10 + } + index := len(digits) - 1 + for ; index > 0; index-- { + targetIndex := index + for pre := index - 1; pre >= 0; pre-- { + if digits[pre] >= digits[targetIndex] { + targetIndex = pre + } + } + if targetIndex != index && digits[targetIndex] != digits[index] { + digits[targetIndex], digits[index] = digits[index], digits[targetIndex] + break + } + } + ans := 0 + for i := len(digits) - 1; i >= 0; i-- { + ans = ans*10 + int(digits[i]) + } + return ans } diff --git a/leetcode/601-700/0670.Maximum-Swap/Solution_test.go b/leetcode/601-700/0670.Maximum-Swap/Solution_test.go index 14ff50eb4..90a63c773 100644 --- a/leetcode/601-700/0670.Maximum-Swap/Solution_test.go +++ b/leetcode/601-700/0670.Maximum-Swap/Solution_test.go @@ -10,12 +10,13 @@ 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", 2736, 7236}, + {"TestCase2", 9973, 9973}, + {"TestCase3", 1993, 9913}, + {"TestCase4", 98368, 98863}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b98e7f277509ec5e53271e617f1398dd960caf8a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 14 Sep 2024 09:54:16 +0800 Subject: [PATCH 063/450] Add solution and test-cases for problem 2419 --- .../README.md | 36 +++++++++++-------- .../Solution.go | 21 +++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md index 4e5d0c596..f26cdeb9e 100755 --- a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md +++ b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md @@ -1,28 +1,36 @@ # [2419.Longest Subarray With Maximum Bitwise AND][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 integer array `nums` of size `n`. + +Consider a **non-empty** subarray from `nums` that has the **maximum** possible **bitwise AND**. + +- In other words, let `k` be the maximum value of the bitwise AND of **any** subarray of `nums`. Then, only subarrays with a bitwise AND equal to `k` should be considered. +Return the length of the longest such subarray. + +The bitwise AND of an array is the bitwise AND of all the numbers in it. + +A **subarray** is a contiguous sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,3,2,2] +Output: 2 +Explanation: +The maximum possible bitwise AND of a subarray is 3. +The longest subarray with that value is [3,3], so we return 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Subarray With Maximum Bitwise AND -```go ``` - +Input: nums = [1,2,3,4] +Output: 1 +Explanation: +The maximum possible bitwise AND of a subarray is 4. +The longest subarray with that value is [4], so we return 1. +``` ## 结语 diff --git a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go index d115ccf5e..c23fc7a04 100644 --- a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go +++ b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + m := 0 + l := 0 + ans := 0 + for _, n := range nums { + if n == m { + l++ + ans = max(ans, l) + continue + } + if n > m { + m = n + l = 1 + ans = 1 + continue + } + l = 0 + } + return ans } diff --git a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution_test.go b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution_test.go index 14ff50eb4..07acf9179 100644 --- a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution_test.go +++ b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/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, 3, 3, 2, 2}, 2}, + {"TestCase2", []int{1, 2, 3, 4}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fc9a03983ff047edb5f8da95215d92ac63f381cb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 16 Sep 2024 12:04:51 +0800 Subject: [PATCH 064/450] Add solution and test-cases for problem 831 --- .../README.md | 69 +++++++++++++++---- .../Solution.go | 64 ++++++++++++++++- .../Solution_test.go | 14 ++-- 3 files changed, 125 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0831.Masking-Personal-Information/README.md b/leetcode/801-900/0831.Masking-Personal-Information/README.md index b7fd8b7c1..5c2bf8a37 100644 --- a/leetcode/801-900/0831.Masking-Personal-Information/README.md +++ b/leetcode/801-900/0831.Masking-Personal-Information/README.md @@ -1,28 +1,71 @@ # [831.Masking Personal Information][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 a personal information string `s`, representing either an **email address** or a **phone number**. Return the **masked** personal information using the below rules. + +**Email address**: + +An email address is: + +- A **name** consisting of uppercase and lowercase English letters, followed by +- The `'@'` symbol, followed by +- The **domain** consisting of uppercase and lowercase English letters with a dot `'.'` somewhere in the middle (not the first or last character). + +To mask an email: + +- The uppercase letters in the **name** and **domain** must be converted to lowercase letters. +- The middle letters of the **name** (i.e., all but the first and last letters) must be replaced by 5 asterisks `"*****"`. + +**Phone number**: + +A phone number is formatted as follows: + +- The phone number contains 10-13 digits. +- The last 10 digits make up the **local number**. +- The remaining 0-3 digits, in the beginning, make up the **country code**. +- **Separation characters** from the set `{'+', '-', '(', ')', ' '}` separate the above digits in some way. + +To mask a phone number: + +- Remove all **separation characters**. +- The masked phone number should have the form: + + - `"***-***-XXXX"` if the country code has 0 digits. + - `"+*-***-***-XXXX"` if the country code has 1 digit. + - `"+**-***-***-XXXX"` if the country code has 2 digits. + - `"+***-***-***-XXXX"` if the country code has 3 digits. + +- `"XXXX"` is the last 4 digits of the **local number**. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "LeetCode@LeetCode.com" +Output: "l*****e@leetcode.com" +Explanation: s is an email address. +The name and domain are converted to lowercase, and the middle of the name is replaced by 5 asterisks. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Masking Personal Information -```go ``` +Input: s = "AB@qq.com" +Output: "a*****b@qq.com" +Explanation: s is an email address. +The name and domain are converted to lowercase, and the middle of the name is replaced by 5 asterisks. +Note that even though "ab" is 2 characters, it still must have 5 asterisks in the middle. +``` + +**Example 3:** +``` +Input: s = "1(234)567-890" +Output: "***-***-7890" +Explanation: s is a phone number. +There are 10 digits, so the local number is 10 digits and the country code is 0 digits. +Thus, the resulting masked number is "***-***-7890". +``` ## 结语 diff --git a/leetcode/801-900/0831.Masking-Personal-Information/Solution.go b/leetcode/801-900/0831.Masking-Personal-Information/Solution.go index d115ccf5e..632174777 100644 --- a/leetcode/801-900/0831.Masking-Personal-Information/Solution.go +++ b/leetcode/801-900/0831.Masking-Personal-Information/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func maskEmail(email string) string { + buf := strings.Builder{} + cur := email[0] + if cur >= 'A' && cur <= 'Z' { + cur += uint8(32) + } + buf.WriteByte(cur) + buf.WriteString("*****") + i := 1 + for ; i < len(email) && email[i] != '@'; i++ { + } + cur = email[i-1] + if cur >= 'A' && cur <= 'Z' { + cur += uint8(32) + } + buf.WriteByte(cur) + buf.WriteString(strings.ToLower(email[i:])) + return buf.String() +} + +func maskPhone(phone string) string { + buf := make([]byte, 0) + i := len(phone) - 1 + + for ; i >= 0; i-- { + if phone[i] >= '0' && phone[i] <= '9' { + buf = append(buf, phone[i]) + } + } + ans := strings.Builder{} + diff := len(buf) - 10 + if r := diff; r > 0 { + ans.WriteByte('+') + for ; r > 0; r-- { + ans.WriteByte('*') + } + ans.WriteByte('-') + } + // 1, 2, 3, 4-5, 6, 7-8, 9, 10-11, 12,13 + index := len(buf) - diff - 1 + count := 3 + for ; index > 3; index-- { + ans.WriteByte('*') + count-- + if count == 0 { + ans.WriteByte('-') + count = 3 + } + } + for ; index >= 0; index-- { + ans.WriteByte(buf[index]) + } + return ans.String() +} + +func Solution(s string) string { + if strings.Contains(s, "@") { + return maskEmail(s) + } + return maskPhone(s) } diff --git a/leetcode/801-900/0831.Masking-Personal-Information/Solution_test.go b/leetcode/801-900/0831.Masking-Personal-Information/Solution_test.go index 14ff50eb4..c1df981f9 100644 --- a/leetcode/801-900/0831.Masking-Personal-Information/Solution_test.go +++ b/leetcode/801-900/0831.Masking-Personal-Information/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "LeetCode@LeetCode.com", "l*****e@leetcode.com"}, + {"TestCase2", "AB@qq.com", "a*****b@qq.com"}, + {"TestCase3", "1(234)567-890", "***-***-7890"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 81989ae0bf62d82ac9720616b4add8d2bef09122 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 17 Sep 2024 12:34:28 +0800 Subject: [PATCH 065/450] Add solution and test-cases for problem 884 --- .../README.md | 29 +++++++++-------- .../Solution.go | 32 +++++++++++++++++-- .../Solution_test.go | 19 ++++++----- 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/README.md b/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/README.md index 95c67630d..6bf634854 100644 --- a/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/README.md +++ b/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/README.md @@ -1,28 +1,31 @@ # [884.Uncommon Words from Two Sentences][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 +A **sentence** is a string of single-space separated words where each word consists only of lowercase letters. + +A word is **uncommon** if it appears exactly once in one of the sentences, and **does not appear** in the other sentence. + +Given two **sentences** `s1` and `s2`, return a list of all the **uncommon words**. You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: s1 = "this apple is sweet", s2 = "this apple is sour" -## 题意 -> ... +Output: ["sweet","sour"] -## 题解 +Explanation: -### 思路1 -> ... -Uncommon Words from Two Sentences -```go +The word "sweet" appears only in s1, while the word "sour" appears only in s2. ``` +**Example 2:** + +``` +Input: s1 = "apple apple", s2 = "banana" + +Output: ["banana"] +``` ## 结语 diff --git a/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution.go b/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution.go index d115ccf5e..29ecb96d7 100644 --- a/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution.go +++ b/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s1 string, s2 string) []string { + ans := make([]string, 0) + ls1 := strings.Split(s1, " ") + ls2 := strings.Split(s2, " ") + in1, in2 := make(map[string]int), make(map[string]int) + for _, w := range ls1 { + in1[w]++ + } + for _, w := range ls2 { + in2[w]++ + } + for w, c := range in1 { + if c != 1 { + continue + } + if _, ok := in2[w]; !ok { + ans = append(ans, w) + } + } + for w, c := range in2 { + if c != 1 { + continue + } + if _, ok := in1[w]; !ok { + ans = append(ans, w) + } + } + return ans } diff --git a/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution_test.go b/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution_test.go index 14ff50eb4..d88c85bd3 100644 --- a/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution_test.go +++ b/leetcode/801-900/0884.Uncommon-Words-from-Two-Sentences/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s1, s2 string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "this apple is sweet", "this apple is sour", []string{"sweet", "sour"}}, + {"TestCase2", "apple apple", "banana", []string{"banana"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 340b61c1f7635db9ecee6709d99056a0261961b0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 18 Sep 2024 09:12:39 +0800 Subject: [PATCH 066/450] Add solution and test-cases for problem 1947 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 34 ++++++++++++++++- .../Solution_test.go | 21 +++++------ 3 files changed, 65 insertions(+), 27 deletions(-) diff --git a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md index a34423a70..5add57059 100755 --- a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md +++ b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md @@ -1,28 +1,37 @@ # [1947.Maximum Compatibility Score Sum][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 +There is a survey that consists of `n` questions where each question's answer is either `0` (no) or e`1` (yes). + +The survey was given to `m` students numbered from `0` to `m - 1` and `m` mentors numbered from `0` to `m - 1`. The answers of the students are represented by a 2D integer array `students` where `students[i]` is an integer array that contains the answers of the `ith` student (**0-indexed**). The answers of the mentors are represented by a 2D integer array `mentors` where `mentors[j]` is an integer array that contains the answers of the `jth` mentor (**0-indexed**). + +Each student will be assigned to **one** mentor, and each mentor will have **one** student assigned to them. The **compatibility score** of a student-mentor pair is the number of answers that are the same for both the student and the mentor. + +- For example, if the student's answers were `[1, 0, 1]` and the mentor's answers were `[0, 0, 1]`, then their compatibility score is 2 because only the second and the third answers are the same. + +You are tasked with finding the optimal student-mentor pairings to **maximize** the **sum of the compatibility scores**. + +Given `students` and `mentors`, return the **maximum compatibility score sum** that can be achieved. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: students = [[1,1,0],[1,0,1],[0,0,1]], mentors = [[1,0,0],[0,0,1],[1,1,0]] +Output: 8 +Explanation: We assign students to mentors in the following way: +- student 0 to mentor 2 with a compatibility score of 3. +- student 1 to mentor 0 with a compatibility score of 2. +- student 2 to mentor 1 with a compatibility score of 3. +The compatibility score sum is 3 + 2 + 3 = 8. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Compatibility Score Sum -```go ``` - +Input: students = [[0,0],[0,0],[0,0]], mentors = [[1,1],[1,1],[1,1]] +Output: 0 +Explanation: The compatibility score of any student-mentor pair is 0. +``` ## 结语 diff --git a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go index d115ccf5e..0f1f8cd1c 100644 --- a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go +++ b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(students [][]int, mentors [][]int) int { + var ( + dfs func(int, []bool) int + match func(int, int) int + ) + match = func(i, j int) int { + ans := 0 + for k := range students[i] { + if mentors[j][k] == students[i][k] { + ans++ + } + } + return ans + } + + dfs = func(index int, used []bool) int { + cur := 0 + if index == len(students) { + return cur + } + + for i := range mentors { + if used[i] { + continue + } + used[i] = true + cur = max(cur, match(index, i)+dfs(index+1, used)) + used[i] = false + } + return cur + } + return dfs(0, make([]bool, len(students))) } diff --git a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution_test.go b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution_test.go index 14ff50eb4..605f8f4f1 100644 --- a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution_test.go +++ b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + students, mentors [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 1, 0}, {1, 0, 1}, {0, 0, 1}}, [][]int{{1, 0, 0}, {0, 0, 1}, {1, 1, 0}}, 8}, + {"TestCase2", [][]int{{0, 0}, {0, 0}, {0, 0}}, [][]int{{1, 1}, {1, 1}, {1, 1}}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.students, c.mentors) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.students, c.mentors) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 97e9891a3ea37998de82909f471a81eee8b0f818 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 19 Sep 2024 23:00:35 +0800 Subject: [PATCH 067/450] Add solution and test-cases for problem 2343 --- .../README.md | 44 +++++++++++----- .../Solution.go | 51 ++++++++++++++++++- .../Solution_test.go | 22 ++++---- 3 files changed, 90 insertions(+), 27 deletions(-) diff --git a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md index e49a1a0c9..626de37bd 100755 --- a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md +++ b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md @@ -1,28 +1,44 @@ # [2343.Query Kth Smallest Trimmed Number][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 a **0-indexed** array of strings `nums`, where each string is of **equal length** and consists of only digits. + +You are also given a **0-indexed** 2D integer array `queries` where `queries[i] = [ki, trimi]`. For each `queries[i]`, you need to: + +- **Trim** each number in `nums` to its **rightmost** `trimi` digits. +- Determine the **index** of the `kith` smallest trimmed number in `nums`. If two trimmed numbers are equal, the number with the **lower** index is considered to be smaller. +- Reset each number in `nums` to its original length. + +Return an array `answer` of the same length as `queries`, where `answer[i]` is the answer to the `ith` query. + +**Note**: + +- To trim to the rightmost `x` digits means to keep removing the leftmost digit, until only `x` digits remain. +- Strings in `nums` may contain leading zeros. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = ["102","473","251","814"], queries = [[1,1],[2,3],[4,2],[1,2]] +Output: [2,2,1,0] +Explanation: +1. After trimming to the last digit, nums = ["2","3","1","4"]. The smallest number is 1 at index 2. +2. Trimmed to the last 3 digits, nums is unchanged. The 2nd smallest number is 251 at index 2. +3. Trimmed to the last 2 digits, nums = ["02","73","51","14"]. The 4th smallest number is 73. +4. Trimmed to the last 2 digits, the smallest number is 2 at index 0. + Note that the trimmed number "02" is evaluated as 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Query Kth Smallest Trimmed Number -```go ``` - +Input: nums = ["24","37","96","04"], queries = [[2,1],[2,2]] +Output: [3,0] +Explanation: +1. Trimmed to the last digit, nums = ["4","7","6","4"]. The 2nd smallest number is 4 at index 3. + There are two occurrences of 4, but the one at index 0 is considered smaller than the one at index 3. +2. Trimmed to the last 2 digits, nums is unchanged. The 2nd smallest number is 24. +``` ## 结语 diff --git a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go index d115ccf5e..5a8faa9f4 100644 --- a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go +++ b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go @@ -1,5 +1,52 @@ package Solution -func Solution(x bool) bool { - return x +func radixSort2343(nums []string, digit int) [][]string { + cache := make([][]string, digit) + cur := len(nums[0]) - 1 + for i := 0; i < digit; i++ { + buckets := [10][]string{} + for _, num := range nums { + key := num[cur] - '0' + buckets[key] = append(buckets[key], num) + } + cur-- + index := 0 + for _, bucket := range buckets { + for _, n := range bucket { + nums[index] = n + index++ + } + } + tmp := make([]string, len(nums)) + copy(tmp, nums) + cache[i] = tmp + } + return cache +} + +func Solution(nums []string, queries [][]int) []int { + maxDigit := 0 + indies := make(map[string][]int) + for i, n := range nums { + if _, ok := indies[n]; !ok { + indies[n] = make([]int, 0) + } + indies[n] = append(indies[n], i) + } + for _, q := range queries { + maxDigit = max(maxDigit, q[1]) + } + cache := radixSort2343(nums, maxDigit) + ans := make([]int, len(queries)) + for i, q := range queries { + sortedArray := cache[q[1]-1] + index := 0 + target := sortedArray[q[0]-1] + for pre := q[0] - 2; pre >= 0 && sortedArray[pre] == target; pre-- { + index++ + } + ans[i] = indies[target][index] + } + + return ans } diff --git a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go index 14ff50eb4..b877bb7c3 100644 --- a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go +++ b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums []string + queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"102", "473", "251", "814"}, [][]int{{1, 1}, {2, 3}, {4, 2}, {1, 2}}, []int{2, 2, 1, 0}}, + {"TestCase2", []string{"24", "37", "96", "04"}, [][]int{{2, 1}, {2, 2}}, []int{3, 0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 150cb113a1427f7d9254eb5ec90b25745803f0ec Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 23 Sep 2024 09:07:27 +0800 Subject: [PATCH 068/450] Add solution and test-cases for problem 1078 --- .../1078.Occurrences-After-Bigram/README.md | 23 ++++++++----------- .../1078.Occurrences-After-Bigram/Solution.go | 23 +++++++++++++++++-- .../Solution_test.go | 21 ++++++++--------- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/leetcode/1001-1100/1078.Occurrences-After-Bigram/README.md b/leetcode/1001-1100/1078.Occurrences-After-Bigram/README.md index 2e50e3c34..0a78ea56b 100644 --- a/leetcode/1001-1100/1078.Occurrences-After-Bigram/README.md +++ b/leetcode/1001-1100/1078.Occurrences-After-Bigram/README.md @@ -1,28 +1,23 @@ # [1078.Occurrences After Bigram][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 +Given two strings `first` and `second`, consider occurrences in some text of the form `"first second third"`, where `second` comes immediately after `first`, and `third` comes immediately after `second`. + +Return an array of all the words `third` for each occurrence of `"first second third"`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: text = "alice is a good girl she is a good student", first = "a", second = "good" +Output: ["girl","student"] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Occurrences After Bigram -```go ``` - +Input: text = "we will we will rock you", first = "we", second = "will" +Output: ["we","rock"] +``` ## 结语 diff --git a/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution.go b/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution.go index d115ccf5e..2f2464c09 100644 --- a/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution.go +++ b/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(text string, first string, second string) []string { + testlist := strings.Split(text, " ") + fm := make(map[string]struct{}) + sm := make(map[string]struct{}) + for _, w := range strings.Split(first, " ") { + fm[w] = struct{}{} + } + for _, w := range strings.Split(second, " ") { + sm[w] = struct{}{} + } + ans := make([]string, 0) + for i := 0; i < len(testlist)-2; i++ { + _, ok1 := fm[testlist[i]] + _, ok2 := sm[testlist[i+1]] + if ok1 && ok2 { + ans = append(ans, testlist[i+2]) + } + } + return ans } diff --git a/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution_test.go b/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution_test.go index 14ff50eb4..14ea77ac2 100644 --- a/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution_test.go +++ b/leetcode/1001-1100/1078.Occurrences-After-Bigram/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + a, b, c string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "alice is a good girl she is a good student", "a", "good", []string{"girl", "student"}}, + {"TestCase2", "we will we will rock you", "we", "will", []string{"we", "rock"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a, c.b, c.c) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.a, c.b, c.c) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From aa819211a1d52eda88e00311c8a377a052de8b99 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 23 Sep 2024 09:27:56 +0800 Subject: [PATCH 069/450] Add solution and test-cases for problem 400 --- leetcode/301-400/0400.Nth-Digit/README.md | 26 ++++++++++++++++++ leetcode/301-400/0400.Nth-Digit/Solution.go | 27 +++++++++++++++++-- .../301-400/0400.Nth-Digit/Solution_test.go | 13 +++++---- 3 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 leetcode/301-400/0400.Nth-Digit/README.md diff --git a/leetcode/301-400/0400.Nth-Digit/README.md b/leetcode/301-400/0400.Nth-Digit/README.md new file mode 100644 index 000000000..839e1bb58 --- /dev/null +++ b/leetcode/301-400/0400.Nth-Digit/README.md @@ -0,0 +1,26 @@ +# [400. Nth Digit][title] + +## Description +Given an integer `n`, return the `nth` digit of the infinite integer sequence `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...]`. + +**Example 1:** + +``` +Input: n = 3 +Output: 3 +``` + +**Example 2:** + +``` +Input: n = 11 +Output: 0 +Explanation: The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/nth-digit +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/301-400/0400.Nth-Digit/Solution.go b/leetcode/301-400/0400.Nth-Digit/Solution.go index d115ccf5e..4156b2857 100755 --- a/leetcode/301-400/0400.Nth-Digit/Solution.go +++ b/leetcode/301-400/0400.Nth-Digit/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + if n <= 9 { + return n + } + fixed := 9 + base, pow := 1, 1 + cur := base * pow * fixed + for cur < n { + n -= cur + base, pow = base+1, pow*10 + cur = base * pow * fixed + } + need := n / base + target := pow + (need - 1) + mod := n % base + if mod == 0 { + return target % 10 + } + + shift := base - mod + target++ + for ; shift > 0; shift-- { + target /= 10 + } + return target % 10 } diff --git a/leetcode/301-400/0400.Nth-Digit/Solution_test.go b/leetcode/301-400/0400.Nth-Digit/Solution_test.go index 14ff50eb4..c0c0d2372 100755 --- a/leetcode/301-400/0400.Nth-Digit/Solution_test.go +++ b/leetcode/301-400/0400.Nth-Digit/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", 3, 3}, + {"TestCase2", 11, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a753fe3085a5ddb4df6c11c86c4613216be8096a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 24 Sep 2024 09:18:23 +0800 Subject: [PATCH 070/450] Add solution and test-cases for problem 3043 --- .../README.md | 36 +++++++++------ .../Solution.go | 46 ++++++++++++++++++- .../Solution_test.go | 19 ++++---- 3 files changed, 75 insertions(+), 26 deletions(-) diff --git a/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/README.md b/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/README.md index a0c087176..7fe2b48af 100755 --- a/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/README.md +++ b/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/README.md @@ -1,28 +1,36 @@ # [3043.Find the Length of the Longest Common Prefix][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 two arrays with **positive** integers `arr1` and `arr2`. + +A **prefix** of a positive integer is an integer formed by one or more of its digits, starting from its **leftmost** digit. For example, `123` is a prefix of the integer `12345`, while `234` is **not**. + +A **common prefix** of two integers `a` and `b` is an integer `c`, such that `c` is a prefix of both `a` and `b`. For example, `5655359` and `56554` have a common prefix `565` while `1223` and `43456` do not have a common prefix. + +You need to find the length of the **longest common prefix** between all pairs of integers `(x, y)` such that `x` belongs to `arr1` and `y` belongs to `arr2`. + +Return the length of the **longest** common prefix among all pairs. If no common prefix exists among them, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr1 = [1,10,100], arr2 = [1000] +Output: 3 +Explanation: There are 3 pairs (arr1[i], arr2[j]): +- The longest common prefix of (1, 1000) is 1. +- The longest common prefix of (10, 1000) is 10. +- The longest common prefix of (100, 1000) is 100. +The longest common prefix is 100 with a length of 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find the Length of the Longest Common Prefix -```go ``` - +Input: arr1 = [1,2,3], arr2 = [4,4,4] +Output: 0 +Explanation: There exists no common prefix for any pair (arr1[i], arr2[j]), hence we return 0. +Note that common prefixes between elements of the same array do not count. +``` ## 结语 diff --git a/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution.go b/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution.go index d115ccf5e..cc0627f9b 100644 --- a/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution.go +++ b/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "strconv" +) + +type trieNode3043 struct { + child [10]*trieNode3043 +} + +func (r *trieNode3043) insert(intStr string) { + walker := r + for i := range intStr { + index := intStr[i] - '0' + if walker.child[index] == nil { + walker.child[index] = &trieNode3043{child: [10]*trieNode3043{}} + } + walker = walker.child[index] + } +} + +func (r *trieNode3043) prefixMatch(intStr string) int { + walker := r + i := 0 + for ; i < len(intStr); i++ { + index := intStr[i] - '0' + if walker.child[index] == nil { + break + } + walker = walker.child[index] + } + return i +} + +func Solution(arr1 []int, arr2 []int) int { + ans := 0 + tree := &trieNode3043{} + for _, intVal := range arr1 { + v := strconv.Itoa(intVal) + tree.insert(v) + } + for _, intVal := range arr2 { + v := strconv.Itoa(intVal) + ans = max(ans, tree.prefixMatch(v)) + } + return ans } diff --git a/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution_test.go b/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution_test.go index 14ff50eb4..77a4e97e8 100644 --- a/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution_test.go +++ b/leetcode/3001-3100/3043.Find-the-Length-of-the-Longest-Common-Prefix/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + a1, a2 []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 10, 100}, []int{1000}, 3}, + {"TestCase2", []int{1, 2, 3}, []int{4, 4, 4}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a1, c.a2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.a1, c.a2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From aceb14a2d058330d3237f38e16b26b9f8338453c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 25 Sep 2024 21:47:14 +0800 Subject: [PATCH 071/450] Add solution and test-cases for problem 2416 --- .../README.md | 45 +++++++++++++------ .../Solution.go | 45 ++++++++++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 81 insertions(+), 22 deletions(-) diff --git a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md index f06f2e380..17e4a6201 100755 --- a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md +++ b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md @@ -1,28 +1,45 @@ # [2416.Sum of Prefix Scores of Strings][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 `words` of size `n` consisting of **non-empty** strings. + +We define the **score** of a string `word` as the **number** of strings `words[i]` such that `word` is a **prefix** of `words[i]`. + +- For example, if `words = ["a", "ab", "abc", "cab"]`, then the score of `"ab"` is `2`, since `"ab"` is a prefix of both `"ab"` and `"abc"`. + +Return an array `answer` of size `n` where `answer[i]` is the **sum** of scores of every **non-empty** prefix of `words[i]`. + +**Note** that a string is considered as a prefix of itself. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["abc","ab","bc","b"] +Output: [5,4,3,2] +Explanation: The answer for each string is the following: +- "abc" has 3 prefixes: "a", "ab", and "abc". +- There are 2 strings with the prefix "a", 2 strings with the prefix "ab", and 1 string with the prefix "abc". +The total is answer[0] = 2 + 2 + 1 = 5. +- "ab" has 2 prefixes: "a" and "ab". +- There are 2 strings with the prefix "a", and 2 strings with the prefix "ab". +The total is answer[1] = 2 + 2 = 4. +- "bc" has 2 prefixes: "b" and "bc". +- There are 2 strings with the prefix "b", and 1 string with the prefix "bc". +The total is answer[2] = 2 + 1 = 3. +- "b" has 1 prefix: "b". +- There are 2 strings with the prefix "b". +The total is answer[3] = 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sum of Prefix Scores of Strings -```go ``` - +Input: words = ["abcd"] +Output: [4] +Explanation: +"abcd" has 4 prefixes: "a", "ab", "abc", and "abcd". +Each prefix has a score of one, so the total is answer[0] = 1 + 1 + 1 + 1 = 4. +``` ## 结语 diff --git a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go index d115ccf5e..64d160afe 100644 --- a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go +++ b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { +type trieNode2416 struct { + count int + child [26]*trieNode2416 +} + +func (r *trieNode2416) insert(word string) { + walker := r + for i := range word { + index := word[i] - 'a' + if walker.child[index] == nil { + walker.child[index] = &trieNode2416{} + } + walker.child[index].count++ + walker = walker.child[index] + } +} + +func (r *trieNode2416) score(word string) int { + walker := r + x := 0 + for i := range word { + index := word[i] - 'a' + x += walker.child[index].count + walker = walker.child[index] + } return x } +func Solution(words []string) []int { + ans := make([]int, len(words)) + tree := &trieNode2416{} + for _, w := range words { + tree.insert(w) + } + d := make(map[string]int) + for i, w := range words { + if v, ok := d[w]; ok { + ans[i] = v + continue + } + score := tree.score(w) + ans[i] = score + d[w] = score + } + + return ans +} diff --git a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go index 14ff50eb4..5dd4b10f5 100644 --- a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go +++ b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"abc", "ab", "bc", "b"}, []int{5, 4, 3, 2}}, + {"TestCase2", []string{"abcd"}, []int{4}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f25d09060e1589b4cc2f24bc3d75055cc867c550 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 26 Sep 2024 09:22:14 +0800 Subject: [PATCH 072/450] Add solution and test-cases for problem 849 --- .../1.jpg | Bin 0 -> 33127 bytes .../README.md | 43 ++++++++++++------ .../Solution.go | 29 +++++++++++- .../Solution_test.go | 14 +++--- 4 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/1.jpg diff --git a/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/1.jpg b/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bd9c798da4b84f06666852972d377aefecd815a GIT binary patch literal 33127 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 TuKu [!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 representing a row of `seats` where `seats[i] = 1` represents a person sitting in the `ith` seat, and `seats[i] = 0` represents that the `ith` seat is empty **(0-indexed)**. + +There is at least one empty seat, and at least one person sitting. + +Alex wants to sit in the seat such that the distance between him and the closest person to him is maximized. + +Return that maximum distance to the closest person. + +**Example 1:** -**Example 1:** +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: seats = [1,0,0,0,1,0,1] +Output: 2 +Explanation: +If Alex sits in the second open seat (i.e. seats[2]), then the closest person has distance 2. +If Alex sits in any other open seat, the closest person has distance 1. +Thus, the maximum distance to the closest person is 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximize Distance to Closest Person -```go ``` +Input: seats = [1,0,0,0] +Output: 3 +Explanation: +If Alex sits in the last seat (i.e. seats[3]), the closest person is 3 seats away. +This is the maximum distance possible, so the answer is 3. +``` + +**Example 3:** +``` +Input: seats = [0,1] +Output: 1 +``` ## 结语 diff --git a/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution.go b/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution.go index d115ccf5e..736a09373 100644 --- a/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution.go +++ b/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(seats []int) int { + ans := 0 + pre := -1 + i := 0 + for ; i < len(seats); i++ { + s := seats[i] + if s == 0 { + continue + } + if pre == -1 { + ans = i + } else { + diff := i - pre - 1 + add := 0 + if diff&1 == 1 { + add = 1 + } + diff = diff/2 + add + ans = max(ans, diff) + } + pre = i + } + if seats[i-1] != 1 { + diff := i - pre - 1 + ans = max(ans, diff) + } + return ans } diff --git a/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution_test.go b/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution_test.go index 14ff50eb4..31274cd59 100644 --- a/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution_test.go +++ b/leetcode/801-900/0849.Maximize-Distance-to-Closest-Person/Solution_test.go @@ -10,12 +10,12 @@ 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, 0, 0, 0, 1, 0, 1}, 2}, + {"TestCase2", []int{1, 0, 0, 0}, 3}, + {"TestCase3", []int{0, 1}, 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c907b5be87f21eabf84235a430619eb25ddf4c29 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 27 Sep 2024 09:23:01 +0800 Subject: [PATCH 073/450] Add solution and test-cases for problem 949 --- .../README.md | 27 +++++++------- .../Solution.go | 36 +++++++++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 53 insertions(+), 23 deletions(-) diff --git a/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/README.md b/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/README.md index 96aabfa37..2b1c9b0a4 100644 --- a/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/README.md +++ b/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/README.md @@ -1,28 +1,27 @@ # [949.Largest Time for Given Digits][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 +Given an array `arr` of 4 digits, find the latest 24-hour time that can be made using each digit **exactly once**. + +24-hour times are formatted as `"HH:MM"`, where `HH` is between `00` and `23`, and `MM` is between `00` and `59`. The earliest 24-hour time is `00:00`, and the latest is `23:59`. + +Return the latest 24-hour time in `"HH:MM"` format. If no valid time can be made, return an empty string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,2,3,4] +Output: "23:41" +Explanation: The valid 24-hour times are "12:34", "12:43", "13:24", "13:42", "14:23", "14:32", "21:34", "21:43", "23:14", and "23:41". Of these times, "23:41" is the latest. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Largest Time for Given Digits -```go ``` - +Input: arr = [5,5,5,5] +Output: "" +Explanation: There are no valid 24-hour times as "55:55" is not valid. +``` ## 结语 diff --git a/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution.go b/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution.go index d115ccf5e..0d5c5321f 100644 --- a/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution.go +++ b/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(arr []int) string { + in := make(map[int]int) + for _, n := range arr { + in[n]++ + } + var a, b, c, d int + for i := 23; i >= 0; i-- { + a, b = i/10, i%10 + if a == b { + if in[a] < 2 { + continue + } + } else if in[a] < 1 || in[b] < 1 { + continue + } + in[a]-- + in[b]-- + + for j := 59; j >= 0; j-- { + c, d = j/10, j%10 + if c == d { + if in[c] >= 2 { + return fmt.Sprintf("%d%d:%d%d", a, b, c, d) + } + } else if in[c] > 0 && in[d] > 0 { + return fmt.Sprintf("%d%d:%d%d", a, b, c, d) + } + } + in[a]++ + in[b]++ + } + return "" } diff --git a/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution_test.go b/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution_test.go index 14ff50eb4..ca04aad68 100644 --- a/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution_test.go +++ b/leetcode/901-1000/0949.Largest-Time-for-Given-Digits/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4}, "23:41"}, + {"TestCase2", []int{5, 5, 5, 5}, ""}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f8b377f5ecc40a538bebbb11be9c5264b9db065d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 29 Sep 2024 10:04:25 +0800 Subject: [PATCH 074/450] Add solution and test-cases for problem 939 --- .../0939.Minimum-Area-Rectangle/1.jpeg | Bin 0 -> 29546 bytes .../0939.Minimum-Area-Rectangle/2.jpeg | Bin 0 -> 29931 bytes .../0939.Minimum-Area-Rectangle/README.md | 27 ++++++------- .../0939.Minimum-Area-Rectangle/Solution.go | 38 +++++++++++++++++- .../Solution_test.go | 13 +++--- 5 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 leetcode/901-1000/0939.Minimum-Area-Rectangle/1.jpeg create mode 100644 leetcode/901-1000/0939.Minimum-Area-Rectangle/2.jpeg diff --git a/leetcode/901-1000/0939.Minimum-Area-Rectangle/1.jpeg b/leetcode/901-1000/0939.Minimum-Area-Rectangle/1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..06b5ae9083fd1f04355a4d580357edf15ae324af GIT binary patch literal 29546 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