From bfcca2e95ab3ebb837f7f4fac880e5a84099c734 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 27 Sep 2023 23:12:41 +0800 Subject: [PATCH 001/253] Add solution and test-cases for problem 260 --- .../201-300/0260.Single-Number-III/README.md | 29 ++++++++++--------- .../0260.Single-Number-III/Solution.go | 21 ++++++++++++-- .../0260.Single-Number-III/Solution_test.go | 16 +++++----- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/leetcode/201-300/0260.Single-Number-III/README.md b/leetcode/201-300/0260.Single-Number-III/README.md index 4c374ae60..16a18d61c 100644 --- a/leetcode/201-300/0260.Single-Number-III/README.md +++ b/leetcode/201-300/0260.Single-Number-III/README.md @@ -1,28 +1,31 @@ # [260.Single Number 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 integer array `nums`, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once. You can return the answer in **any order**. + +You must write an algorithm that runs in linear runtime complexity and uses only constant extra space. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,1,3,2,5] +Output: [3,5] +Explanation: [5, 3] is also a valid answer. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Single Number III -```go +``` +Input: nums = [-1,0] +Output: [-1,0] ``` +**Example 3:** + +``` +Input: nums = [0,1] +Output: [1,0] +``` ## 结语 diff --git a/leetcode/201-300/0260.Single-Number-III/Solution.go b/leetcode/201-300/0260.Single-Number-III/Solution.go index d115ccf5e..bb9e857b4 100644 --- a/leetcode/201-300/0260.Single-Number-III/Solution.go +++ b/leetcode/201-300/0260.Single-Number-III/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + a := nums[0] + for i := 1; i < len(nums); i++ { + a ^= nums[i] + } + bitIndex := 0 + for a&1 == 0 { + bitIndex++ + a >>= 1 + } + c, d := 0, 0 + for _, n := range nums { + if (n>>bitIndex)&1 == 1 { + c ^= n + } else { + d ^= n + } + } + return []int{c, d} } diff --git a/leetcode/201-300/0260.Single-Number-III/Solution_test.go b/leetcode/201-300/0260.Single-Number-III/Solution_test.go index 14ff50eb4..91fa8be0a 100644 --- a/leetcode/201-300/0260.Single-Number-III/Solution_test.go +++ b/leetcode/201-300/0260.Single-Number-III/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 []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 1, 3, 2, 5}, []int{3, 5}}, + {"TestCase2", []int{-1, 0}, []int{-1, 0}}, + {"TestCase3", []int{1, 0}, []int{0, 1}}, } // 开始测试 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) @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1efd774d27c9c543bb25ecbbda080e2076964f97 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 28 Sep 2023 00:28:25 +0800 Subject: [PATCH 002/253] Add solution and test-cases for problem 284 --- .../201-300/0284.Peeking-Iterator/README.md | 38 ++++++----- .../201-300/0284.Peeking-Iterator/Solution.go | 63 ++++++++++++++++++- .../0284.Peeking-Iterator/Solution_test.go | 17 +++-- 3 files changed, 91 insertions(+), 27 deletions(-) diff --git a/leetcode/201-300/0284.Peeking-Iterator/README.md b/leetcode/201-300/0284.Peeking-Iterator/README.md index 7e41e5565..ed49a4dd1 100644 --- a/leetcode/201-300/0284.Peeking-Iterator/README.md +++ b/leetcode/201-300/0284.Peeking-Iterator/README.md @@ -1,28 +1,34 @@ # [284.Peeking Iterator][title] -> [!WARNING|style:flat] -> 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 iterator that supports the `peek` operation on an existing iterator in addition to the `hasNext` and the `next` operations. -**Example 1:** +Implement the `PeekingIterator` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `PeekingIterator(Iterator nums)` Initializes the object with the given integer iterator `iterator`. +- `int next()` Returns the next element in the array and moves the pointer to the next element. +- `boolean hasNext()` Returns `true` if there are still elements in the array. +- `int peek()` Returns the next element in the array without moving the pointer. -## 题意 -> ... +**Note**: Each language may have a different implementation of the constructor and `Iterator`, but they all support the `int next()` and `boolean hasNext()` functions. -## 题解 +**Example 1:** -### 思路1 -> ... -Peeking Iterator -```go ``` - +Input +["PeekingIterator", "next", "peek", "next", "next", "hasNext"] +[[[1, 2, 3]], [], [], [], [], []] +Output +[null, 1, 2, 2, 3, false] + +Explanation +PeekingIterator peekingIterator = new PeekingIterator([1, 2, 3]); // [1,2,3] +peekingIterator.next(); // return 1, the pointer moves to the next element [1,2,3]. +peekingIterator.peek(); // return 2, the pointer does not move [1,2,3]. +peekingIterator.next(); // return 2, the pointer moves to the next element [1,2,3] +peekingIterator.next(); // return 3, the pointer moves to the next element [1,2,3] +peekingIterator.hasNext(); // return False +``` ## 结语 diff --git a/leetcode/201-300/0284.Peeking-Iterator/Solution.go b/leetcode/201-300/0284.Peeking-Iterator/Solution.go index d115ccf5e..86a7a06d3 100644 --- a/leetcode/201-300/0284.Peeking-Iterator/Solution.go +++ b/leetcode/201-300/0284.Peeking-Iterator/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +type Iterator struct { + data []int + idx int +} + +func (this *Iterator) hasNext() bool { + return this.idx < len(this.data)-1 +} +func (this *Iterator) next() int { + ans := this.data[this.idx] + this.idx++ + return ans +} + +type PeekingIterator struct { + iter *Iterator + peekV int +} + +func Constructor284(iter *Iterator) *PeekingIterator { + return &PeekingIterator{iter: iter, peekV: -1} +} + +func (this *PeekingIterator) hasNext() bool { + if !this.iter.hasNext() { + return this.peekV != -1 + } + return this.iter.hasNext() +} + +func (this *PeekingIterator) next() int { + if this.peekV != -1 { + ans := this.peekV + this.peekV = -1 + return ans + } + return this.iter.next() +} + +func (this *PeekingIterator) peek() int { + if this.peekV == -1 { + this.peekV = this.iter.next() + } + return this.peekV +} + +func Solution(iter *Iterator, options []string) []interface{} { + ans := make([]interface{}, 0) + o := Constructor284(iter) + for _, op := range options { + if op == "next" { + ans = append(ans, o.next()) + continue + } + if op == "peek" { + ans = append(ans, o.peek()) + continue + } + ans = append(ans, o.hasNext()) + } + return ans } diff --git a/leetcode/201-300/0284.Peeking-Iterator/Solution_test.go b/leetcode/201-300/0284.Peeking-Iterator/Solution_test.go index 14ff50eb4..e40c7a51c 100644 --- a/leetcode/201-300/0284.Peeking-Iterator/Solution_test.go +++ b/leetcode/201-300/0284.Peeking-Iterator/Solution_test.go @@ -9,19 +9,18 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs *Iterator + operations []string + expect []interface{} }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &Iterator{data: []int{1, 2, 3}}, []string{"next", "peek", "next", "next", "hasNext"}, []interface{}{1, 2, 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.inputs, c.operations) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 839bd2199a458c18d49c3768e5cefdce73e0a0e1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 29 Sep 2023 20:31:36 +0800 Subject: [PATCH 003/253] Add solution and test-cases for problem 991 --- .../901-1000/0991.Broken-Calculator/README.md | 34 ++++++++++++------- .../0991.Broken-Calculator/Solution.go | 13 +++++-- .../0991.Broken-Calculator/Solution_test.go | 22 ++++++------ 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/leetcode/901-1000/0991.Broken-Calculator/README.md b/leetcode/901-1000/0991.Broken-Calculator/README.md index 2e75d496d..1a912ba4e 100644 --- a/leetcode/901-1000/0991.Broken-Calculator/README.md +++ b/leetcode/901-1000/0991.Broken-Calculator/README.md @@ -1,28 +1,36 @@ # [991.Broken Calculator][title] -> [!WARNING|style:flat] -> 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 broken calculator that has the integer `startValue` on its display initially. In one operation, you can: + +- multiply the number on display by `2`, or +- subtract `1` from the number on display. + +Given two integers `startValue` and `target`, return the minimum number of operations needed to display `target` on the calculator. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: startValue = 2, target = 3 +Output: 2 +Explanation: Use double operation and then decrement operation {2 -> 4 -> 3}. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Broken Calculator -```go ``` +Input: startValue = 5, target = 8 +Output: 2 +Explanation: Use decrement and then double {5 -> 4 -> 8}. +``` + +**Example 3:** +``` +Input: startValue = 3, target = 10 +Output: 3 +Explanation: Use double, decrement and double {3 -> 6 -> 5 -> 10}. +``` ## 结语 diff --git a/leetcode/901-1000/0991.Broken-Calculator/Solution.go b/leetcode/901-1000/0991.Broken-Calculator/Solution.go index d115ccf5e..3e988a833 100644 --- a/leetcode/901-1000/0991.Broken-Calculator/Solution.go +++ b/leetcode/901-1000/0991.Broken-Calculator/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(startValue, target int) int { + ans := 0 + for target > startValue { + ans++ + if target&1 == 1 { + target++ + continue + } + target /= 2 + } + return ans + startValue - target } diff --git a/leetcode/901-1000/0991.Broken-Calculator/Solution_test.go b/leetcode/901-1000/0991.Broken-Calculator/Solution_test.go index 14ff50eb4..5cc1dcb18 100644 --- a/leetcode/901-1000/0991.Broken-Calculator/Solution_test.go +++ b/leetcode/901-1000/0991.Broken-Calculator/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 int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 3, 2}, + {"TestCase2", 5, 8, 2}, + {"TestCase3", 3, 10, 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.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 e69ddf277d800b3803419cd457c43284a25c0101 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 30 Sep 2023 10:56:36 +0800 Subject: [PATCH 004/253] Add solution and test-cases for problem 456 --- leetcode/401-500/0456.132-Pattern/README.md | 31 ++++--- leetcode/401-500/0456.132-Pattern/Solution.go | 80 ++++++++++++++++++- .../401-500/0456.132-Pattern/Solution_test.go | 12 +-- 3 files changed, 102 insertions(+), 21 deletions(-) diff --git a/leetcode/401-500/0456.132-Pattern/README.md b/leetcode/401-500/0456.132-Pattern/README.md index 283946cc6..b44c19894 100644 --- a/leetcode/401-500/0456.132-Pattern/README.md +++ b/leetcode/401-500/0456.132-Pattern/README.md @@ -1,28 +1,33 @@ # [456.132 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 +Given an array of `n` integers `nums`, a **132 pattern** is a subsequence of three integers `nums[i]`, `nums[j]` and `nums[k]` such that `i < j < k` and `nums[i] < nums[k] < nums[j]`. + +Return `true` if there is a **132 pattern** in `nums`, otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4] +Output: false +Explanation: There is no 132 pattern in the sequence. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -132 Pattern -```go +``` +Input: nums = [3,1,4,2] +Output: true +Explanation: There is a 132 pattern in the sequence: [1, 4, 2]. ``` +**Example 3:** + +``` +Input: nums = [-1,3,2,0] +Output: true +Explanation: There are three 132 patterns in the sequence: [-1, 3, 2], [-1, 3, 0] and [-1, 2, 0]. +``` ## 结语 diff --git a/leetcode/401-500/0456.132-Pattern/Solution.go b/leetcode/401-500/0456.132-Pattern/Solution.go index d115ccf5e..db3c39be1 100644 --- a/leetcode/401-500/0456.132-Pattern/Solution.go +++ b/leetcode/401-500/0456.132-Pattern/Solution.go @@ -1,5 +1,81 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +// 借鉴了题解,本想通过排序部分+二分会超时. +func Solution(nums []int) bool { + ll := len(nums) + if ll < 3 { + return false + } + minArr := make([]int, ll) + minArr[0] = nums[0] + for i := 1; i < ll; i++ { + minArr[i] = nums[i] + if minArr[i-1] < minArr[i] { + minArr[i] = minArr[i-1] + } + } + //var bsearch func(int, int, int) int + /* + bsearch = func(l, r, target int) int { + if l == r || target < nums[l] { + return -1 + } + for l < r { + mid := r - (r-l)/2 + if mid >= ll { + break + } + if nums[mid] < target { + l = mid + continue + } + r = mid - 1 + } + return l + } + */ + // 搜索第一个大于等于target的下表 + /* + bsearch = func(l, r, target int) int { + + for l <= r { + mid := (l + r) / 2 + if nums[mid] >= target { + r = mid - 1 + continue + } + l = mid + 1 + } + return l + } + */ + k := ll + for j := ll - 1; j >= 0; j-- { + if minArr[j] >= nums[j] { + continue + } + /* + sort.Ints(nums[j+1:]) + + index := bsearch(j+1, ll, nums[j]) + if index != -1 && nums[index] > minArr[j] { + return true + } + */ + index := sort.Search(ll, func(i int) bool { + if i >= j+1 && i < ll && nums[i] >= minArr[j]+1 { + return true + } + return false + }) + k = index - 0 + if k < ll && nums[k] < nums[j] { + return true + } + k-- + nums[k] = nums[j] + } + return false } diff --git a/leetcode/401-500/0456.132-Pattern/Solution_test.go b/leetcode/401-500/0456.132-Pattern/Solution_test.go index 14ff50eb4..da33605de 100644 --- a/leetcode/401-500/0456.132-Pattern/Solution_test.go +++ b/leetcode/401-500/0456.132-Pattern/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, 4, 2}, true}, + {"TestCase2", []int{-1, 3, 2, 0}, true}, + {"TestCase3", []int{-2, 1, 1}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a54ed4cb6099c6fd3b9f8b8cacf264aff8086893 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 Oct 2023 09:56:16 +0800 Subject: [PATCH 005/253] Add solution and test-cases for problem 442 --- .../README.md | 28 ++++++++++--------- .../Solution.go | 16 +++++++++-- .../Solution_test.go | 14 +++++----- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/README.md b/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/README.md index ac2870b40..b2f2dade5 100644 --- a/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/README.md +++ b/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/README.md @@ -1,28 +1,30 @@ # [442.Find All Duplicates 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 an integer array `nums` of length `n` where all the integers of `nums` are in the range [`1, n`] and each integer appears **once** or **twice**, return an array of all the integers that appears **twice**. + +You must write an algorithm that runs in `O(n)` time and uses only constant extra space. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,3,2,7,8,2,3,1] +Output: [2,3] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find All Duplicates in an Array -```go +``` +Input: nums = [1,1,2] +Output: [1] ``` +**Example 3:** + +``` +Input: nums = [1] +Output: [] +``` ## 结语 diff --git a/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/Solution.go b/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/Solution.go index d115ccf5e..b8c9ff09b 100644 --- a/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/Solution.go +++ b/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + ans := make([]int, 0) + for _, n := range nums { + if n < 0 { + n = -n + } + targetIndex := n - 1 + if nums[targetIndex] < 0 { + ans = append(ans, n) + continue + } + nums[targetIndex] = -nums[targetIndex] + } + return ans } diff --git a/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/Solution_test.go b/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/Solution_test.go index 14ff50eb4..c92c39298 100644 --- a/leetcode/401-500/0442.Find-All-Duplicates-in-an-Array/Solution_test.go +++ b/leetcode/401-500/0442.Find-All-Duplicates-in-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{4, 3, 2, 7, 8, 2, 3, 1}, []int{2, 3}}, + {"TestCase2", []int{1, 1, 2}, []int{1}}, + {"TestCase3", []int{1}, []int{}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3ebd495cdc1b17e045eb04d6fd2b3fda781e9151 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 Oct 2023 13:22:49 +0800 Subject: [PATCH 006/253] Add solution and test-cases for problem 454 --- leetcode/401-500/0454.4Sum-II/README.md | 28 +++++++++---------- leetcode/401-500/0454.4Sum-II/Solution.go | 20 +++++++++++-- .../401-500/0454.4Sum-II/Solution_test.go | 21 +++++++------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/leetcode/401-500/0454.4Sum-II/README.md b/leetcode/401-500/0454.4Sum-II/README.md index 5a75dd441..f9bf32362 100644 --- a/leetcode/401-500/0454.4Sum-II/README.md +++ b/leetcode/401-500/0454.4Sum-II/README.md @@ -1,28 +1,28 @@ # [454.4Sum 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 four integer arrays `nums1`, `nums2`, `nums3`, and `nums4` all of length `n`, return the number of tuples (`i, j, k, l`) such that: + +- `0 <= i, j, k, l < n` +- `nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0` **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2] +Output: 2 +Explanation: +The two tuples are: +1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0 +2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -4Sum II -```go ``` - +Input: nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0] +Output: 1 +``` ## 结语 diff --git a/leetcode/401-500/0454.4Sum-II/Solution.go b/leetcode/401-500/0454.4Sum-II/Solution.go index d115ccf5e..1824b5c2f 100644 --- a/leetcode/401-500/0454.4Sum-II/Solution.go +++ b/leetcode/401-500/0454.4Sum-II/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int, nums3 []int, nums4 []int) int { + l := len(nums1) + cache := make(map[int]int) + for i := 0; i < l; i++ { + for j := 0; j < l; j++ { + cache[nums1[i]+nums2[j]]++ + } + } + ans := 0 + for i := 0; i < l; i++ { + for j := 0; j < l; j++ { + target := 0 - nums3[i] - nums4[j] + if v, ok := cache[target]; ok { + ans += v + } + } + } + return ans } diff --git a/leetcode/401-500/0454.4Sum-II/Solution_test.go b/leetcode/401-500/0454.4Sum-II/Solution_test.go index 14ff50eb4..da88b2db0 100644 --- a/leetcode/401-500/0454.4Sum-II/Solution_test.go +++ b/leetcode/401-500/0454.4Sum-II/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n1, n2, n3, n4 []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2}, []int{-2, -1}, []int{-1, 2}, []int{0, 2}, 2}, + {"TestCase2", []int{0}, []int{0}, []int{0}, []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.n1, c.n2, c.n3, c.n4) 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.n1, c.n2, c.n3, c.n4) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b865fcb6563335aeecb79d31aa8afbaf4c906d31 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 Oct 2023 16:17:00 +0800 Subject: [PATCH 007/253] Add solution and test-cases for problem 477 --- .../0477.Total-Hamming-Distance/README.md | 27 +++++++++---------- .../0477.Total-Hamming-Distance/Solution.go | 27 +++++++++++++++++-- .../Solution_test.go | 13 +++++---- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0477.Total-Hamming-Distance/README.md b/leetcode/401-500/0477.Total-Hamming-Distance/README.md index 8454b7223..f87285b25 100644 --- a/leetcode/401-500/0477.Total-Hamming-Distance/README.md +++ b/leetcode/401-500/0477.Total-Hamming-Distance/README.md @@ -1,28 +1,27 @@ # [477.Total Hamming 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 [Hamming distance](https://en.wikipedia.org/wiki/Hamming_distance) between two integers is the number of positions at which the corresponding bits are different. +Given an integer array `nums`, return the sum of **Hamming distances** between all the pairs of the integers in `nums`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,14,2] +Output: 6 +Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just +showing the four bits relevant in this case). +The answer will be: +HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Total Hamming Distance -```go ``` - +Input: nums = [4,14,4] +Output: 4 +``` ## 结语 diff --git a/leetcode/401-500/0477.Total-Hamming-Distance/Solution.go b/leetcode/401-500/0477.Total-Hamming-Distance/Solution.go index d115ccf5e..9b8d6b78f 100644 --- a/leetcode/401-500/0477.Total-Hamming-Distance/Solution.go +++ b/leetcode/401-500/0477.Total-Hamming-Distance/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func countOfOne477(x int, v *[32]int) { + index := 31 + for ; x > 0; index-- { + if x&1 == 1 { + v[index]++ + } + x >>= 1 + } +} + +func Solution(nums []int) int { + ans := 0 + l := len(nums) + ones := [32]int{} + for i := 0; i < l; i++ { + countOfOne477(nums[i], &ones) + } + for i := 0; i < 32; i++ { + if ones[i] == 0 { + continue + } + + ans += ones[i] * (l - ones[i]) + } + return ans } diff --git a/leetcode/401-500/0477.Total-Hamming-Distance/Solution_test.go b/leetcode/401-500/0477.Total-Hamming-Distance/Solution_test.go index 14ff50eb4..37457c3c3 100644 --- a/leetcode/401-500/0477.Total-Hamming-Distance/Solution_test.go +++ b/leetcode/401-500/0477.Total-Hamming-Distance/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, 14, 2}, 6}, + {"TestCase2", []int{4, 14, 4}, 4}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8bce205a84b4097ba1caf4b2d501116733f821b7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 Oct 2023 09:41:22 +0800 Subject: [PATCH 008/253] Add solution and test-cases for problem 2038 --- .../README.md | 56 +++++++++++++++---- .../Solution.go | 33 ++++++++++- .../Solution_test.go | 12 ++-- 3 files changed, 81 insertions(+), 20 deletions(-) diff --git a/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/README.md b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/README.md index 2f52c94c6..021221672 100755 --- a/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/README.md +++ b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/README.md @@ -1,28 +1,60 @@ # [2038.Remove Colored Pieces if Both Neighbors are 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 +There are `n` pieces arranged in a line, and each piece is colored either by `'A'` or by `'B'`. You are given a string `colors` of length `n` where `colors[i]` is the color of the ith piece. + +Alice and Bob are playing a game where they take **alternating turns** removing pieces from the line. In this game, Alice moves **first**. + +- Alice is only allowed to remove a piece colored `'A'` if **both its neighbors** are also colored `'A'`. She is **not allowed** to remove pieces that are colored `'B'`. +- Bob is only allowed to remove a piece colored `'B'` if **both its neighbors** are also colored `'B'`. He is **not allowed** to remove pieces that are colored `'A'`. +- Alice and Bob **cannot** remove pieces from the edge of the line. +- If a player cannot make a move on their turn, that player **loses** and the other player **wins**. + +Assuming Alice and Bob play optimally, return `true` if Alice wins, or return `false` if Bob wins. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: colors = "AAABABB" +Output: true +Explanation: +AAABABB -> AABABB +Alice moves first. +She removes the second 'A' from the left since that is the only 'A' whose neighbors are both 'A'. + +Now it's Bob's turn. +Bob cannot make a move on his turn since there are no 'B's whose neighbors are both 'B'. +Thus, Alice wins, so return true. ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: colors = "AA" +Output: false +Explanation: +Alice has her turn first. +There are only two 'A's and both are on the edge of the line, so she cannot move on her turn. +Thus, Bob wins, so return false. +``` + +**Example 3:** -### 思路1 -> ... -Remove Colored Pieces if Both Neighbors are the Same Color -```go ``` +Input: colors = "ABBBBBBBAAA" +Output: false +Explanation: +ABBBBBBBAAA -> ABBBBBBBAA +Alice moves first. +Her only option is to remove the second to last 'A' from the right. +ABBBBBBBAA -> ABBBBBBAA +Next is Bob's turn. +He has many options for which 'B' piece to remove. He can pick any. + +On Alice's second turn, she has no more pieces that she can remove. +Thus, Bob wins, so return false. +``` ## 结语 diff --git a/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution.go b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution.go index d115ccf5e..9a2672461 100644 --- a/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution.go +++ b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(colors string) bool { + a, b := 0, 0 + x := 0 + for _, b := range []byte(colors) { + if b == 'B' { + if x >= 3 { + a += x - 2 + } + x = 0 + continue + } + x++ + } + if x >= 3 { + a += x - 2 + } + x = 0 + for _, bb := range []byte(colors) { + if bb == 'A' { + if x >= 3 { + b += x - 2 + } + x = 0 + continue + } + x++ + } + if x >= 3 { + b += x - 2 + } + return a > b } diff --git a/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution_test.go b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution_test.go index 14ff50eb4..95cd65c8b 100644 --- a/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution_test.go +++ b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/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", "AAABABB", true}, + {"TestCase2", "AA", false}, + {"TestCase3", "ABBBBBBBAAA", false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2b5df8966177fa547964442b3aecec2cb255b753 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 Oct 2023 22:35:33 +0800 Subject: [PATCH 009/253] Add solution and test-cases for problem 355 --- .../301-400/0355.Design-Twitter/README.md | 41 +++--- .../301-400/0355.Design-Twitter/Solution.go | 125 +++++++++++++++++- .../0355.Design-Twitter/Solution_test.go | 12 +- 3 files changed, 153 insertions(+), 25 deletions(-) diff --git a/leetcode/301-400/0355.Design-Twitter/README.md b/leetcode/301-400/0355.Design-Twitter/README.md index 6f0787a84..3bd8a98f0 100644 --- a/leetcode/301-400/0355.Design-Twitter/README.md +++ b/leetcode/301-400/0355.Design-Twitter/README.md @@ -1,28 +1,35 @@ # [355.Design Twitter][title] -> [!WARNING|style:flat] -> 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 simplified version of Twitter where users can post tweets, follow/unfollow another user, and is able to see the `10` most recent tweets in the user's news feed. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `Twitter` class: -## 题意 -> ... +- `Twitter()` Initializes your twitter object. +- `void postTweet(int userId, int tweetId)` Composes a new tweet with ID `tweetId` by the user `userId`. Each call to this function will be made with a unique `tweetId`. +- `List getNewsFeed(int userId)` Retrieves the `10` most recent tweet IDs in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user themself. Tweets must be **ordered from most recent to least recent**. +- `void follow(int followerId, int followeeId)` The user with ID `followerId` started following the user with ID `followeeId`. +- `void unfollow(int followerId, int followeeId)` The user with ID `followerId` started unfollowing the user with ID `followeeId`. -## 题解 +**Example 1:** -### 思路1 -> ... -Design Twitter -```go ``` - +Input +["Twitter", "postTweet", "getNewsFeed", "follow", "postTweet", "getNewsFeed", "unfollow", "getNewsFeed"] +[[], [1, 5], [1], [1, 2], [2, 6], [1], [1, 2], [1]] +Output +[null, null, [5], null, null, [6, 5], null, [5]] + +Explanation +Twitter twitter = new Twitter(); +twitter.postTweet(1, 5); // User 1 posts a new tweet (id = 5). +twitter.getNewsFeed(1); // User 1's news feed should return a list with 1 tweet id -> [5]. return [5] +twitter.follow(1, 2); // User 1 follows user 2. +twitter.postTweet(2, 6); // User 2 posts a new tweet (id = 6). +twitter.getNewsFeed(1); // User 1's news feed should return a list with 2 tweet ids -> [6, 5]. Tweet id 6 should precede tweet id 5 because it is posted after tweet id 5. +twitter.unfollow(1, 2); // User 1 unfollows user 2. +twitter.getNewsFeed(1); // User 1's news feed should return a list with 1 tweet id -> [5], since user 1 is no longer following user 2. +``` ## 结语 diff --git a/leetcode/301-400/0355.Design-Twitter/Solution.go b/leetcode/301-400/0355.Design-Twitter/Solution.go index d115ccf5e..736e74fe7 100644 --- a/leetcode/301-400/0355.Design-Twitter/Solution.go +++ b/leetcode/301-400/0355.Design-Twitter/Solution.go @@ -1,5 +1,128 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type operation struct { + name string + userId int + tweetId int + followerId, followeeId int +} + +type Tweet struct { + tweetId, id int +} + +type Tweets []Tweet + +func (t *Tweets) Len() int { + return len(*t) +} + +func (t *Tweets) Swap(i, j int) { + (*t)[i], (*t)[j] = (*t)[j], (*t)[i] +} + +func (t *Tweets) Less(i, j int) bool { + return (*t)[i].id < (*t)[j].id +} + +func (t *Tweets) Push(x interface{}) { + *t = append(*t, x.(Tweet)) +} + +func (t *Tweets) Pop() interface{} { + old := *t + l := len(old) + x := old[l-1] + *t = old[:l-1] return x } + +type Twitter struct { + tid int + userTweets map[int][]Tweet + following map[int]map[int]struct{} +} + +func Constructor355() Twitter { + return Twitter{ + tid: 0, + userTweets: make(map[int][]Tweet), + following: make(map[int]map[int]struct{}), + } +} + +func (this *Twitter) PostTweet(userId int, tweetId int) { + if _, ok := this.userTweets[userId]; !ok { + this.userTweets[userId] = make([]Tweet, 0) + } + this.userTweets[userId] = append(this.userTweets[userId], Tweet{tweetId: tweetId, id: this.tid}) + this.tid++ +} + +func (this *Twitter) getUserTweets(userId int, tweets *Tweets, limit int) { + for _, tt := range this.userTweets[userId] { + if len(*tweets) < limit { + heap.Push(tweets, tt) + continue + } + top := heap.Pop(tweets).(Tweet) + if tt.id > top.id { + heap.Push(tweets, tt) + } else { + heap.Push(tweets, top) + } + } +} + +func (this *Twitter) GetNewsFeed(userId int) []int { + tweets := Tweets{} + this.getUserTweets(userId, &tweets, 10) + for following := range this.following[userId] { + this.getUserTweets(following, &tweets, 10) + } + l := tweets.Len() + tids := make([]int, l) + index := l - 1 + for ; l > 0; l, index = l-1, index-1 { + top := heap.Pop(&tweets).(Tweet) + tids[index] = top.tweetId + } + return tids +} + +func (this *Twitter) Follow(followerId int, followeeId int) { + if _, ok := this.following[followerId]; !ok { + this.following[followerId] = make(map[int]struct{}) + } + this.following[followerId][followeeId] = struct{}{} +} + +func (this *Twitter) Unfollow(followerId int, followeeId int) { + if v, ok := this.following[followerId]; ok { + delete(v, followeeId) + this.following[followerId] = v + } +} + +func Solution(opts []operation) [][]int { + ans := make([][]int, 0) + twitter := Constructor355() + for _, opt := range opts { + if opt.name == "p" { + twitter.PostTweet(opt.userId, opt.tweetId) + continue + } + if opt.name == "f" { + twitter.Follow(opt.followerId, opt.followeeId) + continue + } + if opt.name == "u" { + twitter.Unfollow(opt.followerId, opt.followeeId) + continue + } + ans = append(ans, twitter.GetNewsFeed(opt.userId)) + } + return ans +} diff --git a/leetcode/301-400/0355.Design-Twitter/Solution_test.go b/leetcode/301-400/0355.Design-Twitter/Solution_test.go index 14ff50eb4..a09edd60e 100644 --- a/leetcode/301-400/0355.Design-Twitter/Solution_test.go +++ b/leetcode/301-400/0355.Design-Twitter/Solution_test.go @@ -10,12 +10,10 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []operation + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []operation{{name: "p", userId: 1, tweetId: 5}, {name: "g", userId: 1}, {name: "f", followerId: 1, followeeId: 2}, {name: "p", userId: 2, tweetId: 6}, {name: "g", userId: 1}, {name: "u", followerId: 1, followeeId: 2}, {name: "g", userId: 1}}, [][]int{{5}, {6, 5}, []int{5}}}, } // 开始测试 @@ -30,10 +28,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2e67bd816024bc1cf662a801de69439423e8dcb4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 3 Oct 2023 09:59:50 +0800 Subject: [PATCH 010/253] Add solution and test-cases for problem 2196 --- .../README.md | 36 ++++++++++------- .../Solution.go | 32 ++++++++++++++- .../Solution_test.go | 37 ++++++++++++++---- .../example1drawio.png | Bin 0 -> 22849 bytes .../example2drawio.png | Bin 0 -> 13146 bytes 5 files changed, 82 insertions(+), 23 deletions(-) create mode 100644 leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/example1drawio.png create mode 100644 leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/example2drawio.png diff --git a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md index 205d98382..288b79bf1 100755 --- a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md +++ b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md @@ -1,28 +1,36 @@ # [2196.Create Binary Tree From Descriptions][title] -> [!WARNING|style:flat] -> 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 `descriptions` where `descriptions[i] = [parenti, childi, isLefti]` indicates that `parenti` is the **parent** of `childi` in a **binary** tree of **unique** values. Furthermore, + +- If `isLefti == 1`, then `childi` is the left child of `parenti`. +- If `isLefti == 0`, then `childi` is the right child of `parenti`. + +Construct the binary tree described by `descriptions` and return its **root**. + +The test cases will be generated such that the binary tree is **valid**. -**Example 1:** +**Example 1:** + +![example1](./example1drawio.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: descriptions = [[20,15,1],[20,17,0],[50,20,1],[50,80,0],[80,19,1]] +Output: [50,20,80,15,17,19] +Explanation: The root node is the node with value 50 since it has no parent. +The resulting binary tree is shown in the diagram. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./example2drawio.png) -### 思路1 -> ... -Create Binary Tree From Descriptions -```go ``` - +Input: descriptions = [[1,2,1],[2,3,0],[3,4,1]] +Output: [1,2,null,null,3,4] +Explanation: The root node is the node with value 1 since it has no parent. +The resulting binary tree is shown in the diagram. +``` ## 结语 diff --git a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution.go b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution.go index d115ccf5e..8c1f3a114 100644 --- a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution.go +++ b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(descriptions [][]int) *TreeNode { + indies := [100001]*TreeNode{} + children := [100001]bool{} + for _, desc := range descriptions { + parent, child, left := desc[0], desc[1], desc[2] + children[child] = true + if indies[parent] == nil { + indies[parent] = &TreeNode{Val: parent} + } + if indies[child] == nil { + indies[child] = &TreeNode{Val: child} + } + if left == 1 { + indies[parent].Left = indies[child] + } else { + indies[parent].Right = indies[child] + } + } + for _, desc := range descriptions { + if !children[desc[0]] { + return indies[desc[0]] + } + } + + return nil } diff --git a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution_test.go b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution_test.go index 14ff50eb4..bb627b9b5 100644 --- a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution_test.go +++ b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution_test.go @@ -10,12 +10,35 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {20, 15, 1}, {20, 17, 0}, {50, 20, 1}, {50, 80, 0}, {80, 19, 1}, + }, &TreeNode{ + Val: 50, + Left: &TreeNode{ + Val: 20, + Left: &TreeNode{Val: 15}, + Right: &TreeNode{Val: 17}, + }, + Right: &TreeNode{ + Val: 80, + Left: &TreeNode{Val: 19}, + }, + }}, + {"TestCase2", [][]int{ + {1, 2, 1}, {2, 3, 0}, {3, 4, 1}, + }, &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 4}, + }, + }, + }}, } // 开始测试 @@ -30,10 +53,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/example1drawio.png b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/example1drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a8cc13acfa0884dd305f08520e73eb096e160407 GIT binary patch literal 22849 zcmaI81z1#F+cr!LEiI+Q(A_x#QUfz|r%HDY4TCgD-ZTgbh|+=}NOviz2uez)q<}#w zerxo8pYM79|3CiYP}uHRd+ilhoacF&pr?Z%CB8w7g@r|`j)WUvVPThnzgmR&;7mjf z{Wkc8?Q4Kg#;SS8xPyg-FX5+Z=I0UQ=;H2x#VM}x_lQ$W#M#T&k5e4ZDJEuvLJ8Ts z*f{yvc=!r=I{1N8;JSyGy^EuZgZ`HYh110vg~kb@8R_ws z0^Y7BDK0G}E(K2WXd;cYwK&C8z_GiFn*;cTaIkap!aSnl?BnGD&Zxnpg+zoTq+nt~ zFc>&*Xya(($v_3x2^Uhreg-9RghJz&pXmtAerochErlF8>abMlc#_tZlBVVjzt~!)*gC zG|i;{HsWamI{Rn15k593=f7=;o4D&3!+Zl(^+ZH%g3Xm3Je)MO(H_R0 zuHFu&D*86IDt;zvx>_QlqK*h-544540n9H@N!8y*gHuddL=*f7@beWn*U>Wy(v}hR zwa{{~a8)hGrsCxsq@-2D5m7$U>ay@VyB`CPK&7` zl$9*(Wh|WhJk3osT~v*Nob~;54J>Seyv;NN4OP8^>``_w7hfZLdjq77sgl3Bk*2Pj ztE04&uZ6dnjjFPevl-0Y5pE-{E286M;isjp%P7cW-xBq_(ZIw7s~fi#O;|K!At65*%d;4#5*fCN3ty zwwiX5hQ4TZgt)7eub8`&w!HyN*U!~XO$zO7YOAHGfzr0sGey`tnwx2wYWR68IT-l* zsd<>|AU$1mVbZ25C=}AwM%CLvPY>y2>|vx~5#%E!iZ-!vlF?G~RWr7gcG0tt^f1x) z^$|gO1Z&xAqg2rvt|pQ$7EU^7q>47^i>;0>+Q-GrNMBFK2I(SVig5JQ_VZHpaSkw3 zazh5HNZ2^5>FT-LIjiV7X*)^7T%A3|O(g=6o)UgR(rRMnK^`7jGDfzJrjEhx{u*MU z?&coa{sw{KDyBh3(qN`MEOc$bCQ;UtHV+8)MM&w&1b9e^_?p=2iW=)+c88X>n2&p) zW}vvYu`62D*u_FAz!|0_qlO08q}_a+j5X2j?#?o%D0NqNSE&FM(Lhs8Pg5UbcVlB; zNihqxU>6Y&Qv-D`aJxU+#NRzoS{okVpduxyVS_{TtS+sl=VsvIp=axi_OY;W zv%pM;ikh>grjn|gejwb&$q3<&)K`{KhO4P)>N)s;y{c^F7vyK?Z($=QjrOwl4bU<+ z(a<$O=}C*2ddqmh9o@h-RF)BOQ1IR3w6JP5r@jmtYmR ziI|ig(ow_LTgJgdRa)9n*;dmCW@cmHtY;8xswd;<>@5Zt7k5$i_b|8f3v$!b3o>(+ z(or{up}oA_+yh+QRn#@mqULUhATwWaDQ^$Zbps_CZx581iJ^Xwt(Jkiw+h1DE7;c! zuIJ_Dtzn`ht!AMvtttgKaKS7zi9nQw9!gUe4RiGMwDECuv=>*?HxLyU^AA!+!&J>| z?VR+~rR+ho`qIGksp*P(x(BMe83iImT%2VP(l$P5n2IB?Dar`&Noo>K;K>0eC8B|fs1zWMz!*Ctges=hKc6KA_cPR!_V9Ors|GkoyTe^Aw8W7CTFRP8b6_*o5Kd@E zLw~r9kDipFS+Epl>45f?;XVO@7(;~l1MI5W{}{1977hISUk4$sS_`erz`}xJsl%0w zf-Db0gFAGlK3yG*5>+yi4qfMsH6>1GKc_}kn(gaE_0_&unu&;^6ed}&xw$!?l^*Q5_Q2ZxrOrDk%<_-QQyUs2T$Vao zf1Y;#&i--mNfV8}Wvm2|OTbDP&U9TZ>Wk`;{nEky%4t03p(UDkJgaWhW%lLMkClc9 z*N+uXk;Byy`M0mm?B*I=GONvBsU38E^ZEK#TC>@6vBc#=nPdCbS9p&;1gVwMH~KC? z(GQ{s&*aiJD0xa0ATGUtif-^+w0I|fdiT@Q%d5*T4m*>jCvR?gRou(tf_7j1x+IBD zREBg!fXNxZ4{uQt}Ob}TNA1{I#!FkJ+esYCs{N&h$Br-CSi5R<>EkaS-0YU~T_uQ$P*%U$!c*H;!1>0>! z2o-zLGVkhV9oZ4hg-He76&`X#$O7yf;S|Qin=oAaXuU-~I^s%)x1yvZ@&z~d5-j)) z1Xr4Z%5cSKgs3$EtK-WfNjKV|^>#Cv-PG?UHFwp$?emqsiA`y-!GVjyp>Ki38 zUo^Nz)%`4)pgyCRkaZ8%8hanLtYS-C;|UWdpimt4y?#z&;TUKCbn@9?Zspt}5 z?FXzy6}vn!<;y707O|^4H6H{lXO7p2G={!Qubfh|gspBHeU%oUtF9KP)O#A`no&?7 zxU;k4_~@%STM_uQ35s|{97x0d>f6WC4{7*KW)o+=?R?N)HVr-MB{1j?`<1&cD8hvUmFrR#>@;`Fretr9JGAi5+KR6u|AHUub zxE@rm7>QH1%u>&GXrdeP!+SY%rz>Y<@9^)n`RQw~*2@Q<*emt8b=^Pz`1^7_RUr$PK*NMl zE=cd4>=(HyuBE!7IdA9jVn#w7kDUT1nqE{hyJ+m4-}#|9kQEzzU2*PR!56>-EM6)e zwr(@~Ljp&5%grW<0(hI3&{gv^k*KY)yv$F{UHwR$y~Xxsx$})ogBFyH=9hn_kX17f zay4rtD~=%QGx!{4+TAfyK zVj;jbDtk>i!};(o+ovXvS2X;c>$r@xD`H&%2NwPv_~Wf!UFT|)H2L(N9mi@)?t0ZB z&;fy`X3M~Nm#SxSC2qWfZRfYFPc^sxn0L#j9x!(*aM)w4GOZPQ5_VDPbEsH)hnP|% z5o|UdgZn~$gaVcwW;NYc=uOdPza4`++o>GoU;qv4)Qqc4Xcz}s#RCN*w--v(GoJ|^ z?M=VP#3#K`Q3h>wDhyU@O&p}AUDuJhie zy9H7E=SHakJ}J{JBefJpmrp;v-Q$=(JX1|Fk|O%{PeBGP;mvclpcelxOZOI)ltj1& z2wWI$c4%nPbBhf8jQHP8HLO?&XSKZ_>U&2VsQjh#w9vIi_xrlB?OMukV%Z!%SgFnga40^G&Z4L}Hsi1!!8Q6K4Rgh< z@h7$M#LqUr_IKZDweuO_PYu*Ek$5Y`!8MOX86O>yX&LMosSvQAJMu2#LOXq+B#@LY0z1;gs*K zrZq_5(Q+I=tnsosTZ*g5FjXvNSittaCB}%|f#Qf#p!mMxMw#m$;!JjhhWN{wHaJhT zpyR6-OUNx6Gcu6jKLZDu0tr(DNoe@&s{}>9M!!HkcrH$5Sn=`g@FS(3%DchHiRj%L z9%KDh9|t8aPy6tAZrOnSG+_9LK=>74@OX%$M$HupD;S{hwW*O4pMK-?9WyNCa3~p$ zjy>IPU>c2fi;|PCeRs@qA6(R{mf?cTvoTF91}?uS{4)LGu~wd#YT8{B>e}p1>j3Yo z>I@|idR#-h-wcA}R}5ZPml)a-ahn!sq)y~QYR0r_qs$b^!_KJj&tIp@ z^|r5xv)^rleXdvhx;vFw{-T5}0xB!N3T53h)RpHPVyqED2H-p^}L73 zvdQoc@VP|JBckz1Gk{y(YEla4S-u)%3E$Wu|Duc~fFv%A4A4B7Z`=fN*%&pU`>E`# z6$)%eJk#dMCX-^rW3aB$) z_ZfGBa63Sky;&ivwTFpTj+~N24R{97?>yDy@i;PUL0tIPt+!JJn#;8xbA?`ftDDtCJ(j=Re>L)p3A_KM zwCA-$I81yHd;^S3)QaLd1eF!X-bo_dp$D89O_s}?R4NGchaXynRi+%FvJl|);9hgp zlmq1itSGBy_qk^{_Xx-s={2rB(?+iiB=GU8zOZOCvKEXbIX`;1&RHBwm|pu3J0gWJW4OuVlhn6diii#1XgT9p?!-}G3v?vW z3T9w(kz@vO<#@#f`Fn2?B=82^+DtZx=xOm@--sk&*7G9cgYBpj zO?e@b>C191Fp5Dh! z;LUQ~E;)c(|Ja|K>^fp8|LTWA)|a$jJp+6K$VEac0e&atix|>g$BF5fq*Ry zf&+ZKA&H-kPRhLK_q`e2Y>63-m;Kp{h>);kU*&u%jS@R2$i!h*S`^_|HW;UkjQb5b zkj0Y55OPFfExfK%M3iwyH8Th3qc{;1Lda2F2DY?`r{TY^_=0GKR$n>3%_!4;yv3&K zqtWL)E5Qm@YYfFPHX8*~VI2No-ENh*P3p)aRJ% z;cGH7MH08_V^oq$7}#KV^J9imFe<~5qV1$#iCE8Hfe_r3blF*eoT~fwxA!Vh^$ZkQ z35xRE!bW{~!%*YTKUFc*=;8vmF5o$Kw=t@Tqx} zDR6;xT<&XfrG8ZI%g=TX@p^xeGID|dk#BSKq4bog7`fA5OyGLm8uPU%ws4gP*XoRP z6E?DvrDmn5z({&T5#}mlLBs+N?>5?5bcb~&H6; zW9ismv59-6jyj(%(J8n!GQm3M^O=KtbgSn9CB`{X!F!-My0_0uZiVq1Riw=y8@;fY zvL2mH?F}LK)`RkOTANP4v{Au!DQbX&^hUee?euW*IS0Xz7YMkxv*idV{r9E?Q=1ER z9>OJ{FwP|CCtM6-5kW|=xYBvLlnFwVO788qkGVlUDfNEjj2$HY8L=dEBWtgdrabYz z_0hZl0b(n!cNo=3pyDhstFy&K*t~j05g1ed|GKU0tFVCEfFh1!TTN+j*nAEBeP8kC0L5Q#{Hy%7QFOL@lgNE&lkYm?VMaQM2%c|X} zs;at~S}Q9`{`fIcR#F?8kIBe$CLsVdV?AFEnDUlw0n?A1Cf zcZEi&ve+lwqe5P@k6tvKc&2KcY?LSFu<`Tjc%VDN-fx40yBK-gio|RhB8-cK4D=b2 zBAjMB&06<}#Ctf(MckGz7Sy$->+D7&*k1w<>@rth`iS!|e7@0*?ubEFTs|XHyam72 zl*%xzakSN34GXr0l8!DGhrCI-Avxk><<7HvmY!hcLZk-FE`w^~cq}n?Pz~!KQ-IcJ zjv&d@Lct?};bC6;=o#U^Mk51`)w-`&K%-O>ZD^*_0b&{ZjiGcgzt4K* zmNXY(>N-!QBU`Y*ieiDU{APb&Z7!~q2;I-M4FBc7wkCqZ!5xSF!~2wji-kW`rI|cZ zDH?y6T37BVjv-~O-&UT}{0uB4F#&5h;SJ><#Eb14VaLyt(bl|1(-#(;AfY6a=kml+ z^zotg2=7Q5*dUkp&LU%tzzJ(~o5`^X|23ue+9d7)<%Q>;j>us;LjF{3WrV*ri~RPP zqG#(SZJt7SSVbN3`-Zws<#a^glCJGZijWM|LrO*Oj^Rvh&1^p7kDZg1<%PQ^glBDF z;&d8_fF*s#6hjr6C+;-j(Y#o;m2yJ$eRqn4lgu(-Vt6>o!aGolgDdcO>yunW4=@nM z9h0CloQ7pu=>UTKfLpvq@r^Jozt4l5qYSmDkoAgymvxFFKufseNSR0UsJ}#AC+vNO zxE+TmESf*$I}c7L`n!R>QL!4Ss?Pbz=GV_im;hAKhq#<6Ew``oRPP;n_haSm?4iQ% z^HiSzESP>rD%SAu<*oXV7!Iy>N{8@5xOM*n(pECESy7i1@`}fY+ZoImdNxGfvGW30^CLN93o$jzu8ZFIZ zVa(;-cVk29T8{76UUjKh17Gd~a)9S6<_r9+xjAcIV6d*HpQKM@<|Y>nINeX^Y5&so z_;K3z*K}56+8=jEhf(i?DWEXCPf(;*@3fb*)5C&-7g5fEUzP*`wD^S2MTv+Obklmr zP~j$(A2f8 znU$W%4f6)w;1b2tEq_`#ak4pD3Q|F0+$;nl&rjos61-XyU?bK$;vZj~gLrYObFz6k ztSUeY1Q^#OnQb0}$7ODCi{c?3K7FDNtc1f{y+c&Eka<1Fx1bnGtPDeu1|3`C2h1u8 zNjCithAZ@oOZ;{w`7C!9e8)-Uxoq$vHa5cFX6F8^?SDVM@{jaV8i2~w4^*dToiUfDEswk%tVV@CTXJm#8MhMs}Bqa0k)ygnO0w?SUjIKN!O3@;Ce1tjXxb2Ik>`il8R~4fl+=QQo0;=sm-O8 z3&kZM;}C*FfyXV6p$Ogrkc^X2ZzR2H5!kKuo{P5{?H);c6;3$bPa%BI+Q%)WXnT_I zOlB;cLJ@BslUrYHhhHH;SNM$L-&0^45~8;4iEFatv}`qq_U~8HKmcyYDj)L0NE=vO zVc<6!CrLk1U?1kodE#<#rSix3UlK&7DqNW@^8W%!iR+*r$jB&eu%%tcS%7ikJt_W2 z{SPF6ptv%SKy6TEBB-hZ_DjZgVaU4_&p86hm3PC%m`+vL%2bC__8c>%94qRym_DPx zmc?AtkvIVGhdp`9{%ckU%AFuC?&tYeeuK9C`cXzSbvvmzSm$0YPX;ywLs1g9AS+a4 zGpM1lJn_m2Wr`hkuuzDiNuO>THTMZo)7zVF$}PVg&@IYN*}Nj zmPD|qGNr%u=)<8AE9NCkeJL&=p8+kjU|Nu@u+v+9!bX2U5|0&BX452!=$u@tt z?{xdQfS%CIkB`^}i>yyZBr@kU$tj3)Z#l zb5_yTXz^t#+(?rb7QfY^Mrv7fv$add>j%wp)8PjS9I5y)hUBjsZ$*vQ46{QD;J{5^qsBW zrYFSkMVq~&@80Ez+PxWC>5WdHp*-RQbL{j{&DICsbS6aJ?{nJyU*Biyy_Rnq|J*-X z?f2QA6@>w`^E!{7A~Bti0AO3PL7-Aq{Oaqtf)z-^?y+!N2ECP>K{`5?&5H_}y@Ybw zt!O3y+&w5g|7Qa;`~w(Np*_DkmNZh@fUMY_#W9e*YyezHQa%dgW17HwOdXbjB{Nx} z&#r2#GXjDnerj%=EKFYY50kw*D^3^!n!T~H{T-UKq^@=QTy=$n@Ko&R?^T7G`M z9J}!Un=-4sM-`9%AZd|0X zq<&L+`Ti@vy=m=ILJgCE{n@8$*4agYGk3hGgQR6R3?0b>F$r84h@ zY&_xXW5pYftfhT1$)5lbxV7ehT_tS~43qH>y!{ag?DOwmmaPEfrm`S^hEN0o{L(7X^5F}(FZ8c)jM#IAaE}vaK58%^}kG;tOoGH9B-&j?3zFuEn ze?3y}_s_4br>3*VfM6T&8z}+~+OSNgfbS2+Sr7P+wq!ml1Y|+AN63eG4Q&ml=HO!I zX+0YIFXF8iX1&rAIa#jDLbt^Hn`Zp>W%aGFO8|XLMGrZ|^~{cB^K&zP0#jKOPZP!T z0i@UIFG*RTI7*681|Q;Gw6#$!2Ujr?cDC>zDo*CVsW|S9dRd>1_!~F)-u8_O8c2eko3Ymt zhdC3*7XUu)2Aj`<4Z`@jQKg*9)n0A)bzYCfHe(EXmUla}&9r>Ln-UvADWajHWJx}T z1MFH-uJ(9;dl^_iyI1(IwUy6BrJw6|Xi@^c&b!s}#>E2wyDH?R`76iGcmQxjB)KE%$no$lFueMO5ZiRa_cOTsXl_w+CBX!#^*8@y5-x1Cw;>TF%i`91W*F1Kjj zgE2HNJv4Du>1A5TL~rlz{tErmz?hzt9T2`Y%`<(XjO<}6;^y|q0N<~cOwS5JC-G8U zOekEfQ2mGN^L^U1RD5c&hT-}ss;o4Y9@8M;kbMLeOU1lS!d~z2Sw`-Db89C0;}ceb zDZ)neyt0h!aK;^Oz?z-9y*`0q=J4)~Cl-Uz})XH~rG{O)>*nN3YdA*PVp< z2A5*gQ;J9t)}HUs+NOW1L02A!vzi6j#1B!Wh*4VV47q;&XcrI{p`3NBXyS976+U+j z^cxp6tTSDo{vBW@Uu$vIHT4f!ozoYF`$}5Vif5rG+xqc}^b{*-ihH98)3{Wb|8$dO zDRgb--1&HD4d@rCAB@R0|Dg+Q4IJj9Bk`Rm{U9yO12d=&Osng)xKrlR9`ggwf<#4B z7r8isU;IlJs%^{xhrtYbu(rps1U{{PxUeza6Osm!`0+B!=oxL0?-})oiYr5OoAW2S z!KjHilGb6mA^MZ*b}YM``yxy52BqcY0PP%&rs9V(sniH%vMj zCka5DR?D{X4SfW>dsX|ssb#S0bj`iTmzS>#On^9|1Yhv5is(_YD9g`0FAzj-YMPfrX+7bf8V_u z1^d$R)gE}1r~+MyNXkBIFiOv_uHmYM$2XoGG%wo&=di1(b$K)K*V7}btDonYa9%Ip zjWOk>V<1BLZpl3~K8^iKoXwg7(?bwHBfl(lZoX(<8et-(g0FwvsO`R@lDTV5P&yoe zjcfny^MpYOl5!a{@6q^ld!lbI@sngHTR(9g-34wh>6UBs%JN_`1N)Kf1j#$+xN8h- z!redXFP3LvZ=WdqE(sBGpILQ}2!o>L3W4o}t{8thSs$VpjO8)+2FV2W#8c9XhC6y> zkO7S^a_#93;g#^7%I{bM(R{OKFI1ibJ`DprVI1S>X%c(aj8*tOOcwE7G>Kd{e{IG2 zwn0Z1*!CF>wn4eQuLcg$nnQInz)(xJ0q0>^ru#$)NOa`uZz82a9 zw4-tRvmn_jWb|vg`Aps0c}K_|fnR#;V)0U}RiYimbvDjn+;Yg5&fIRRT3{K=I0Vf|C@y!aYD+K@q#r+Y zeZR#XoC0Y~Nz<;3Wxo)2Vb3VpCTEk^a*dqt`>lN6clz2G^3~rav49-n^s%MrAMT(4 z5FPBMJIlVb=WYu*^=w^Hzsm$vBaqO+7K1wD={+0KrX>+I7 z2P_^KI(1WrS>5qyqgNCw;>GP zY7~}{?W_X=YjBQ9N{z=~0Fr0qZE&4uz-xcX)XG>i_0gFPX4Y*wljwv^Qiz~YASwl) z>Z84?efnO7yt1~!`A+D7qNMYC#b1IG=M7R+zZ~2o)^$7wem6X*;y-+t%qTd2eEWwI zBp=>0{2i-t?Be?#x9|2lV?#v&HpUt@6+t!?1Tyy`oCI~8j${YD z80Ib-uRFIiGfBD{2?euq*iToR8?^dt%Ax-Kn%>!`JqL51rrzQz^WEXy79Sdm7By9ttWISN{YWR8+R32Umr|0r8kI=ctVM?lkX8_w9Q))y{W5c4Xp%# zXyLb97T`_{sk$LNVY4r7FlgH*=Xw+TjqoZ7QJ^M|Q3YM?4YrrK4|>S{ZzJiueD{$ByW1R5g=uTn1A1qrwgQBQ)_5;Embzg}Vtg@~JUSK2dD z@)RNwy@N9${S-OSpFpsFSRSLvFeY)RBToh&v7{+zqL0firfS|`cwGTF|1yrTPydK- z4z2dmTt9_dGz6*!ZKT4RY3K29Pr{C5@;TY#n43t8L^fU#8!|CYnE z7yUrDW1rk4>=U>=l^q7wd7i57X-8)I(!3jmToM!6yIM(uC~sTY)KOh_TTZ-$uy(I+ zgVy!}7f!k7y@0n~8YPrzWd5AsG7wKWLM@ZdC>x*^I<^Xv^Dh~_ZdcR6k({b69~WV`7g?B_%={X0n7bl3 z0dW1;ygv&pW9z_3%4UIgRiIV($!*v27^K&A;(_oxm1nz+5~pKAg(a(Xt=yC-Tlx3P zq743UjV$5uJ&cu7{~GZ8N~0vixq87&Ev~jU{&9sKRLEQ3fNAo@9cd6BX^fqWsV%dd zGw%H%20M}?sP~jgOqoY4p+AI8W4 zpKGMS?pj$eIZZsujLj^aGVh&!&NcTA3{V}jb(h+DE-E}mRIA{Yac|7B2yx0Z&*FPqr>RnzG64JWkoWOWsTKtv@@Y$`{b91)@*w-E5g# z1DyQGk&y|TXWqcm+`0YpNJZ3VIlDsms(>))ukjWF&Q`^gaC4>kd^ zu-m=L7^~4-@u4jA{;v1Q$)9lK*=kWlZc%>px&lP($R~jT#=#)QAt~!0LTtIp#;IfMc!f}~?z(IZ8wzZ#er2*$TCdsE{ zPB{TW#~~2v$JZ_fVKTNYEBrNrCO~y()B@z?{npa2Pm2JZ#KRke1_3DV7@U56`3R2 zaKB0i%0cJA!v)@Ke$yX=JunS6Yidm5hBt{x-0FwV*xGylLxazW%`u|MNIy(?rc>7f z60bh|FWTH@_Y9o;D~ zZ)u#2RKjod0LX6-pcy{~X&e6g5@&?YHEV!9$OhVjI7fMrDs!q#^8u~fsn%lm8CEMm zju9q$hkasQgP=n$u2B9ClW`w4WgZI; zJc2NO1QLz5m$^6u#?pBj_f;DJkW|M8zKST)uep>LaLM5C-)%wlO+&c^E>Oa8D_8g_ zR6vrP4Zv(}cdr>-AlMOeddJwf-YZWJQN4O_jls61&;X$381sawcK}-V7xz@`6yQA% z2|Iu~cCsVbm)Ec?d4I8e<~?In12g@jqu=521NQiWnd5zSq$HOBIx7xfbc8tM)r~55 zM01I_US}PU&!)D#-$EW0$K=WtsU@K#N5#lAmZQQV>6(>j)sqYOM}P4T+ppkI6k&tg zjLxqnpbg{&r5BQt-Oy?RM=k*KMdu_qgd+M!yYsTo3orbJo;=d*R*t#N#i31DHH|k z!5lx=2kO(F`smCjGq~b>tUwt%I`HbKroWEv(5@kbo%*dV`Wt{d>OpE}-Vszc{}yEH z8^LABbhgBN)O~z09+T?aTek%MH~+tjh_r*GO->XezJ5#3$tg>@u`;~`bbRW%y1I@- z&tK4*B{R)@&{Zh#3*V0*Jfn=n#>KCorpSM$_2jnv4)2-2yvQv;aqE|8-3|nr>QS(H zK2Decid(BG<+n^c*Wb#P@&Fi+wv2WXh<#;SurdZkEij&sKpb#G(zPUhOy~S_aq7oK zqo>NT*LnN)(v%^<=60AJ*PUH{>8@&D2jc$uTcHXs2-LWBY{e3@61FXaH)(c0R%Tj! zQ#jwCrWSmmkSJUM5CIF=%@x7}KsUHPgcRe=S)Up;IP3ezM2wnJlrzb)v9o&uKV1!o zjl!TcBIButf8Nx`he_3404RgWkh3d8g5^bU0HH{z!SzJx{Q@9d`7^n7b3m>!YQMK4 zpW;p@GZ{nj6Qs;h(n{~*2?vyl3`#ZlKH37Uf)5})sQGb$0OVSP{T8L5n@CFaOJ82I zmqmG7k)b~_G==noaq1q!dqiUiW3aJH7~6Kr9ALZJ66(n7}W%{3av zq-3(JaEe?pheTqLH}bRrnSb0?P3zVTf0nTi)V}jvqIv!Nhab?V&h|bnXKP6w`-{u> zegVDgE)KoZGS4Np6A8cw#BfkL%6T^zHv5jZvkY~JPW(IyZYB(?$pD<_1L(>=?jPWo74L;8sj1XdwZ#5H8kQ5~+k=vwlDDX_gOc5>N z&$rUcNRX)!Qc@Cf;QT%f|IH03j>1PbZShy}G(}UuP|BEiKY=?wxZ~NXD%APS0E3@t zcjDLHw1!ku+)rlW`V)X~*sHzMwAT$jeoYrGql(yu+tw3V9%OvYb1F=iJ#6X6AcJqg ziVy~dv@t*Q$J~gUD8R*fA9FZecZGn8s;6ss={frtZ45x&_&x@i<;h`+2q-=D0tvsz zQS>Cf&Uu)BtfZRK4I;4-4EV1<-H%UgO$Ue4VP_@md}^+}8@!p#N5J`74(Qju<`#Th zYx?AANOLcJ3Tuv(=a{l*LJf%AHtR=)4At#<;ZP(Yv{EeP>o(BhrkwI_fkDa}6woEf zLQZSwVM+{qCRFJ-=j>!2xuvk_Y*1Yzh{`Xeqr`wGe45eoE<@Ssbq~Ps-0*CD(eOy6 zqA_ZJ`MMpU+>cp1OyN%}kP#TY@dJ~AgEKVN4HT40{*eI65Fs?w7-j@fcpuqAy_N@T z>bx3iddaLP094VSk~m%={gPsu0UqH5N!w(xY(+jwj+hr8m-{gOL49XdT}!>Eb}@TJ zi(!+AXN#ic>pNKoAbl7~qFhS;^NjQO50}(|EJzM24fZL{Q2M(j^zE{O{5<2g8l6`Z=oG*`_Uc)-f4dVJDJLTPT z3(_EKxFGs;jD!;gWIMFSdrO_|0Fk{zgQapMohS+U{Mw#Wy6J=#=bKogDGLV|Nf2PU zP7R(L@lH|2e$m59wPnH-ax8wm9LVP$yT2W@W9_++Y#{9hzii*RBoEl*+{uC<-dMx^`c>tCtd7g#>ja$e z<(d;)%vqo?Yfs|XJC|s1*C&ACR%Wb-AO{5X_EoJH+x#bslyHFwHs!r%c6-3`{@mkG z!k=Jc^Oa6NRf&VJRL8rN%*KJ01I+;l%Zn^tLpAwd0PGzBF@^O@P8RX#2osd|$;PnH z%)P)oml3Cg2sc8E2pR+A{BuJxBXBu%rt$Q_rYe9-ABBNJkj-=ib2>nhMgVi^`jUo4 zJPGS%C$LQ=Ac%;{QUxnR6_V!T3`%-V0M1Xg|-Sfg{)lpQ+=Zt|2r{n>b{$J(76tVX#tWh5eyzr_5Z52uO52)fJQR9S zZx}6tI*QzM@>$b|Djy>Ay^xW`y%HZ>JUuXo=^@()I-DnAXilOwbu`)?S;35)H#d2ZYU1^DkjZI) zP-W^_O!eX{XQZ=r%dEVElM}z4;&kj{d*JAQJa6K6)_&nhyt%q!x!LR{bkL~amOn&YPD#TNZ{yqXAj>FFf*QT&53oWj(PFm*ar<(| z2#^o`h!7j*d8_D65DAb}4S-KgjUI_cvESui3%q= z%+J{QCg&=`&(`oaB!%!p51;De*5%_*r^`~JJSJCbK?eqSUh{C%!1M?t%f%p zHplSm!E5>Vj?%5+QTE|#TYKM~qDsi`iub@sSUNF5C@83@9)K!C*x{_=^X1Uff@+IKjT@jm@+3IM8w>ar6GQ_L z+Zqhk*Kx%E*mepf&}L~#QS{bBZ?)NFH&J{56t&MH*J^200X}lr4aY~hNT8z&iqh-? z6{5vthT?F6%ptBbRSdNfq{tf`7!aQxlVk279e)W1VBOsbuI|FF3jb- z=tB$!Viq9*aDZ0mXC6!x$N5maMC%{m+qU#z0P(SWm|-XICpCt7eT|6?^Ym%2NDucV z;L;6LznNN67rMiLtIN(nKUwYSODjYb?b?AiV3bn4=Jh2j%#YXPaB>oemLzBA*{%qQ zql-b*%aqSjr|qS=TE>>%Y<;GqC0 zM10mJ-hb~pXCvW?CL;@Z8aSgIi@y>iT=C>rQ$>rvJB z+NECpI0Yo%C{SeO$4pLlMRzef|9Ie*2vo~11XUvs z>|&NEpBa|xaO2_KIe2`Kfxsf;F}>@p>WNTlQi$P!TE5w%D*J8?`ohP6^_mHCjXLvc zln@a(ub(K}@3$=|GxEV_buOEDupph_x1h}{h1xIq6{#z~w+vt^Dgz}7Dr9`TE*kGM zspU@$Tps=Idi-OXRNlF`=ypeGDl~;(_G$-Q>j7zCQg3YF|ko+|c^=Ml>-$bbR89i^mIIJInHYRWNk+RP(E) zu6F{_|0TRb3{jqN!me0;*j0iL)Ac~gqF=$IR~6)5JN=7R#qC~6>RSIpd$X)(WyDhb zEr(qQ+DXa?CI9p!8S6mTCGM|u<*|}o(9XCYf%Q^`E`Oe)ELlc(wC2OL zDx`t4&*^apK$<*#L;_1BRm(x?HhDGuro*1!bKyzG!lEk1{J#KJes0L@U-~RdlL)iv zM7e>OlfmW%pQL%F{rN_I0ebpECjc{k6rv)se4FDU{WF6?0eP8Jd%yW0_2MY!c3*?U z1}oPFn~F|7fJK9!om9_Uk8INpz5HPedzB`eWGjr*(0vxv_V<%)zSO?`)VWEONjvdR z#O;rb<#0q1aNv9^xeToPjTG}wMCBIi6?XgYT!=_LT9M1v)RO7zpJs}EsYj6nNb&2{ zxN0&Z{prlFnIX>MZ%}^!&e^PU)YmMwGO&Hs>ug_ttTv10>GFB?mk!^3y1(xZf)4T& z$r5L-28H#WcAGx~WpiJmH`stOGe@u``0Ey?q{-BgU}g`a&Rb~p-Hax`od)8Ho9Hip zDs98_c9w^r77fm<3=9mdG+zHStcurB9<}`fUO@-oI%!$N2MtQ)2jhDe@kRrHdw%-- z#yVsj6SiZD8Q;l$)p7xBGI1zIwM`uEt&u++XSn{ur#msXfziw}y8%?=iB?_NTJ<|Fm%){#3qkA4i19 zIVdE1OX7r(?7fp&630rzamYya-g~cX5>fV^$4pidML3kb_kOOs@w|S|>-GEr=bZao zewk8$t12%9L7w{fB4V@lmz%I%yN8cUT0)7g4 zU!L2sP9XFdgBDa#td(R**V=)?=S#;nvZ<2sZn@TVzd5G-Ae0qsA;n8yf_j zxO9Bd>lS2>(n(g~1^*E#gFd-;qquz833h;KNx#2Gg}U zo=(v!P)#!qf+%lPPvPkzV{yAjDl!N{Urj(m0=yPo#ZO$6xMH21F_mq?LqB>2{ya<( zPqn+}%rL0&zN_D$&`s=!VyvGV$OEYN=4_0n3P_B9l497qpTCX#j^j2$PS&7#iTj?M z`^k>}_kdG?q!jWcfhB6V6ZT>XM1u=>g~PGyLQi57x5HuJu-6vjKi=2o&QEhpo|^aH zP#Y=FX#cq1a!ThwX@Nxv8~HgVTn_0{Gib4fbo(C0T8piAmz1v&k&31 zP_wUo<;T_L{sD}E7v?_kOS#gI9mrq0m;!EiB#qJ2pfvM%Y^N8cu+}wkKg@$(@O!_h8#do68}0UeTS)Wc4fOYWY@iJrJwKcy^Pu+ zJ>`2rJ2#WQWclThfU!No1!s9Rl>XZa8MRlPgzC7X%q<5vXTx|7(_YzUbun|t4=l9k zCQX>L5@n@6@=p;Sg$S2{tH506WMqRL?jAeWxi+}{vL>H6;F_qo!bVx312gS4(tSz?X0iy)NiKT{u z)Ptb$43CpbuqZwt)HCh~HK05!9aRn3K1kItJAO|$-u5zcVbf9wr5JA{uMZW;GVpf5 z=q*-LG>ncz+_oY;)Yg zEZ>*49@u<_qTJK=1bbd^&Q-sakpSn9WEv#K%ZWwJVQH7^(UI0PSh+;tyR&e5IHGXeWvan%JG=bn~>Ix)p9O`(Qu^m zyqp0BKSsceOm5@a$%L{w${orTzludOhGm<+R5w-3)#X5YCxTU$R*9`@be)NNOf}jy zLkq_0k%(nQ^qzCmOE38p3-i1qh)RmnMQcMlc=6mubTcC&Y<<)x;6`aH6De*%2smOA zI2|cA6h^Hx>HO17t0b1`QYH`W1jD(hX!QE_r*Uw7WZA@n-PvzzL8SbP zMOG{yzZ_dgdoEXwVHFCn^OxfC`)?p`AzdQvZ>Cfj?NX1ys1!z7hqPKKpMxmhHObd0 z*xx5u)7fd=h4?Q|AF*#%%kSXN^9Trh{t%&)zdfC&?z~`BJZu)6`hH9-PbmwbO+!jT zsPchTy)muzkY_hzLE$9be1)&{1ZdhDQ1u9~k%esKCH0%Z*SxTKA{O9X7a(y_r#@RW zHaMV)*|8d)U)m^^3lp~PQC+ip=l#xo$TEo7dT(vAWHaiC{DG99l2b`PJk(me@zI7* zZcPMs5*Wa|1SC}Dm!0&A$_X{9uH|t&^Eli+ROvAQNAX(_7~I7%eNUag4EE!|n)mt! zaRS;mVBTX69q%0?a?MC~TuHOT#Kq@)>eL5UQ2V~)CC?!JBt_V!GXE=ng8?&#eGNd% zfvswTdP?plMURc2vh|^$Nj5nOFJZ51uo;lFdy$!{m}Q2qkF&F(`onpSz9MDE=i~{$ zOUp(J_t932MEv#pS>X#6IEK|8tRK%n_ln%rc=Cr4^{?Q^7xi&~0=A$1ij9?^yHW(Z z{V5?P<^`U7CH!*Ob7H07`Emnxj!=?LE-=v^<2UJS)kb{g0{(5NNu+w)2VtkvU3r;dSOOaz{dtquKlM#)x4M>RU6 zZ=n`Z(}1vX`@`yX6(22&zXO`(DQ7Dg0eJ>6>;rpx=EF%k*tASp_7lN8JoY{ zE!*HaFeMy;3Cq9L?D&aL?NMbl#y8W7eCpfABbtX@LSG;DCS73|7wYP&8a&m5++giO z{E6=ckXaz$kKB@?prHJbZ*jGwsZN)+?Uys{s)i~u;(RXyisqIgW6p`_g_4E70@&xs z4_?anq~w%`bpKk89c4tvypH|XYfM?>pjsO|OsdStgQnpCq4Cik8a)3X;)w;490Fbe z-_!jYmvxoH3V6mf2T$vBJs_1#G-Rblu07kw{g)@`OpC7iWO$aVairQ%{3c>}i7Aj3 z*hV@gAx25KP)((&H>w5k~2pf<65fM)l^(MeYW zOnXz;pGa;PyljmL`ditZ0K52l)BS?Ct*9vBxAd6#yV~^Em!~FB;GQF7|4A&r2qtD!d1h-iTg?{q*PI6A5a!Pf4G5%TD{|VI# zflz&-WmkXR(b_05euh{f8)x5Euo6zm5iS=26W@+xQkTHDV1b7&`KeTol6(CpPESf% zdN^om7Mip>$7^v9*ct(o3T9UkPbdiy$U(&q(nPB^0Oe-?TZ*sq*VNOC2RwqJsNmGU z_&ida{cHKuX^54_su{yt*l#l?VQ^GK?Hfib{t6j6U;=vDvw$FdOT>KVAaxzgTvymRyf)9fK}=;HTTr=rddRJ8R24^hM>=6f*B@9n$RX~tn4ufsWu)2;Ua9uGy-AR@4|tn4Saf0a6|J;LSw z-?*2z(UqaCDv%omd9{XMvCf}2!D}!9S9AR~w8YlGSv_RsIKfB@CM6~PPIZ19tF$&; z6_32)iT2QKc;(QtTKF%YW)6zEFx+qHRm(om4A=7~$HKMCgJwt;0hb&POd(>^FfvAo zB1dKZ2ay*YH36Qai@0ae6B`ATT)G$wpTS+J4ymK9c$VMWYi00Q(*Mo#tg_5O6zGYJ Nqb#o>S1e=V{Xg@6wvhk; literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/example2drawio.png b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/example2drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..76c5db89a6891c80318bc4059a939130e3cf8e07 GIT binary patch literal 13146 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 Wh4ixI9|Hd@gQu>n1FwKuKlxu#{d(H~ literal 0 HcmV?d00001 From 34954b98e0643e0ae1e686bf7162d2c1a5d9f949 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 3 Oct 2023 20:17:19 +0800 Subject: [PATCH 011/253] Add solution and test-cases for problem 2125 --- .../README.md | 46 ++++++++++++------ .../Solution.go | 25 +++++++++- .../Solution_test.go | 17 ++++--- .../laser1.jpeg | Bin 0 -> 34307 bytes .../laser2.jpeg | Bin 0 -> 9254 bytes 5 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/laser1.jpeg create mode 100644 leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/laser2.jpeg diff --git a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/README.md b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/README.md index 43ad51916..755181ab0 100755 --- a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/README.md +++ b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/README.md @@ -1,28 +1,46 @@ # [2125.Number of Laser Beams in a Bank][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Anti-theft security devices are activated inside a bank. You are given a **0-indexed** binary string array `bank` representing the floor plan of the bank, which is an `m x n` 2D matrix. `bank[i]` represents the ith row, consisting of `'0'`s and `'1'`s. '0' means the cell is empty, while `'1'` means the cell has a security device. + +There is **one** laser beam between any **two** security devices **if both** conditions are met: + +- The two devices are located on two **different rows**: `r1` and `r2`, where `r1 < r2`. +- For **each** row `i` where `r1 < i < r2`, there are **no security devices** in the ith row. + +Laser beams are independent, i.e., one beam does not interfere nor join with another. -**Example 1:** +Return the total number of laser beams in the bank. + +**Example 1:** + +![example1](./laser1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: bank = ["011001","000000","010100","001000"] +Output: 8 +Explanation: Between each of the following device pairs, there is one beam. In total, there are 8 beams: + * bank[0][1] -- bank[2][1] + * bank[0][1] -- bank[2][3] + * bank[0][2] -- bank[2][1] + * bank[0][2] -- bank[2][3] + * bank[0][5] -- bank[2][1] + * bank[0][5] -- bank[2][3] + * bank[2][1] -- bank[3][2] + * bank[2][3] -- bank[3][2] +Note that there is no beam between any device on the 0th row with any on the 3rd row. +This is because the 2nd row contains security devices, which breaks the second condition. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./laser2.jpeg) -### 思路1 -> ... -Number of Laser Beams in a Bank -```go ``` - +Input: bank = ["000","111","000"] +Output: 0 +Explanation: There does not exist two devices located on two different rows. +``` ## 结语 diff --git a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution.go b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution.go index d115ccf5e..318174cd2 100644 --- a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution.go +++ b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(bank []string) int { + l := len(bank) + ones := make([]int, l) + for row, str := range bank { + for _, b := range str { + if b == '1' { + ones[row]++ + } + } + } + ans := 0 + index := 0 + for ; index < l && ones[index] == 0; index++ { + } + + for next := index + 1; next < l; next++ { + if ones[next] == 0 { + continue + } + ans += ones[index] * ones[next] + index = next + } + return ans } diff --git a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution_test.go b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution_test.go index 14ff50eb4..0f1ad222b 100644 --- a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution_test.go +++ b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution_test.go @@ -10,12 +10,15 @@ 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{ + "011001", "000000", "010100", "001000", + }, 8}, + {"TestCase2", []string{ + "000", "111", "000", + }, 0}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/laser1.jpeg b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/laser1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a26626de248dbbc1f6b0b514925fbd9f22c76c33 GIT binary patch literal 34307 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 EUu6?X)Bpeg literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/laser2.jpeg b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/laser2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..931df9d369bb156948e9d5a4b55ba65095cb403e GIT binary patch literal 9254 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 literal 0 HcmV?d00001 From dd61526faf5b99f575b818f69e92b5fc990fa22a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 4 Oct 2023 18:51:19 +0800 Subject: [PATCH 012/253] Add solution and test-cases for problem 706 --- .../701-800/0706.Design-HashMap/README.md | 41 ++++++++++------- .../701-800/0706.Design-HashMap/Solution.go | 46 ++++++++++++++++++- .../0706.Design-HashMap/Solution_test.go | 12 ++--- 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/leetcode/701-800/0706.Design-HashMap/README.md b/leetcode/701-800/0706.Design-HashMap/README.md index 5fe656227..286cc42f3 100644 --- a/leetcode/701-800/0706.Design-HashMap/README.md +++ b/leetcode/701-800/0706.Design-HashMap/README.md @@ -1,28 +1,35 @@ # [706.Design HashMap][title] -> [!WARNING|style:flat] -> 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 HashMap without using any built-in hash table libraries. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `MyHashMap` class: -## 题意 -> ... +- `MyHashMap()` initializes the object with an empty map. +- `void put(int key, int value)` inserts a (`key, value`) pair into the HashMap. If the key already exists in the map, update the corresponding `value`. +- `int get(int key)` returns the `value` to which the specified `key` is mapped, or `-1` if this map contains no mapping for the `key`. +- `void remove(key)` removes the `key` and its corresponding `value` if the map contains the mapping for the `key`. -## 题解 +**Example 1:** -### 思路1 -> ... -Design HashMap -```go ``` - +Input +["MyHashMap", "put", "put", "get", "get", "put", "get", "remove", "get"] +[[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]] +Output +[null, null, null, 1, -1, null, 1, null, -1] + +Explanation +MyHashMap myHashMap = new MyHashMap(); +myHashMap.put(1, 1); // The map is now [[1,1]] +myHashMap.put(2, 2); // The map is now [[1,1], [2,2]] +myHashMap.get(1); // return 1, The map is now [[1,1], [2,2]] +myHashMap.get(3); // return -1 (i.e., not found), The map is now [[1,1], [2,2]] +myHashMap.put(2, 1); // The map is now [[1,1], [2,1]] (i.e., update the existing value) +myHashMap.get(2); // return 1, The map is now [[1,1], [2,1]] +myHashMap.remove(2); // remove the mapping for 2, The map is now [[1,1]] +myHashMap.get(2); // return -1 (i.e., not found), The map is now [[1,1]] +``` ## 结语 diff --git a/leetcode/701-800/0706.Design-HashMap/Solution.go b/leetcode/701-800/0706.Design-HashMap/Solution.go index d115ccf5e..d5284ba48 100644 --- a/leetcode/701-800/0706.Design-HashMap/Solution.go +++ b/leetcode/701-800/0706.Design-HashMap/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +type MyHashMap struct { + // e + data map[int]int +} + +func Constructor706() MyHashMap { + return MyHashMap{data: map[int]int{}} +} + +func (this *MyHashMap) Put(key int, value int) { + this.data[key] = value +} + +func (this *MyHashMap) Get(key int) int { + if v, ok := this.data[key]; ok { + return v + } + return -1 +} + +func (this *MyHashMap) Remove(key int) { + delete(this.data, key) +} + +type operation struct { + name string + k, v int +} + +func Solution(opts []operation) []int { + c := Constructor706() + ans := make([]int, 0) + for _, opt := range opts { + if opt.name == "put" { + c.Put(opt.k, opt.v) + continue + } + if opt.name == "remove" { + c.Remove(opt.k) + continue + } + ans = append(ans, c.Get(opt.k)) + } + return ans } diff --git a/leetcode/701-800/0706.Design-HashMap/Solution_test.go b/leetcode/701-800/0706.Design-HashMap/Solution_test.go index 14ff50eb4..aebb323e4 100644 --- a/leetcode/701-800/0706.Design-HashMap/Solution_test.go +++ b/leetcode/701-800/0706.Design-HashMap/Solution_test.go @@ -10,12 +10,10 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []operation + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []operation{{name: "put", k: 1, v: 1}, {name: "put", k: 2, v: 2}, {name: "get", k: 1}, {name: "get", k: 3}, {name: "put", k: 2, v: 1}, {name: "get", k: 2}, {name: "remove", k: 2}, {name: "get", k: 2}}, []int{1, -1, 1, -1}}, } // 开始测试 @@ -30,10 +28,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0b47072fa367c75f3f8a5845e48ef612e97ece93 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 5 Oct 2023 16:39:39 +0800 Subject: [PATCH 013/253] Add solution and test-cases for problem 1239 --- .../README.md | 40 +++++++++---- .../Solution.go | 60 ++++++++++++++++++- .../Solution_test.go | 15 ++--- 3 files changed, 93 insertions(+), 22 deletions(-) diff --git a/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/README.md b/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/README.md index 9bd70cb06..c9fe25bd2 100644 --- a/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/README.md +++ b/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/README.md @@ -1,28 +1,42 @@ # [1239.Maximum Length of a Concatenated String with Unique 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 +You are given an array of strings `arr`. A string s is formed by the **concatenation** of a **subsequence** of arr that has **unique characters**. + +Return the **maximum** possible length of `s`. + +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: arr = ["un","iq","ue"] +Output: 4 +Explanation: All the valid concatenations are: +- "" +- "un" +- "iq" +- "ue" +- "uniq" ("un" + "iq") +- "ique" ("iq" + "ue") +Maximum length is 4. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Length of a Concatenated String with Unique Characters -```go ``` +Input: arr = ["cha","r","act","ers"] +Output: 6 +Explanation: Possible longest valid concatenations are "chaers" ("cha" + "ers") and "acters" ("act" + "ers"). +``` + +**Example 3:** +``` +Input: arr = ["abcdefghijklmnopqrstuvwxyz"] +Output: 26 +Explanation: The only string in arr has all 26 characters. +``` ## 结语 diff --git a/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution.go b/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution.go index d115ccf5e..3f1036a8d 100644 --- a/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution.go +++ b/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []string) int { + filter := make([]string, 0) + for _, x := range arr { + tmp := [26]bool{} + add := true + for _, b := range []byte(x) { + if tmp[b-'a'] { + add = false + break + } + tmp[b-'a'] = true + } + if add { + filter = append(filter, x) + } + } + if len(filter) == 0 { + return 0 + } + + ans := 0 + var ( + subset func(int, int, int, [26]bool) + canSelect func(a [26]bool, b string) bool + ) + canSelect = func(a [26]bool, b string) bool { + for _, v := range b { + if a[v-'a'] { + return false + } + } + return true + } + subset = func(index, subsetLen, strLen int, path [26]bool) { + if subsetLen == 0 { + if strLen > ans { + ans = strLen + } + return + } + if index >= len(filter) { + return + } + if canSelect(path, filter[index]) { + for _, v := range filter[index] { + path[v-'a'] = true + } + subset(index+1, subsetLen-1, strLen+len(filter[index]), path) + for _, v := range filter[index] { + path[v-'a'] = false + } + } + subset(index+1, subsetLen, strLen, path) + } + for l := 1; l <= len(filter); l++ { + subset(0, l, 0, [26]bool{}) + } + return ans } diff --git a/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution_test.go b/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution_test.go index 14ff50eb4..e80194827 100644 --- a/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution_test.go +++ b/leetcode/1201-1300/1239.Maximum-Length-of-a-Concatenated-String-with-Unique-Characters/Solution_test.go @@ -10,12 +10,13 @@ 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{"un", "iq", "ue"}, 4}, + {"TestCase2", []string{"cha", "r", "act", "ers"}, 6}, + {"TestCase3", []string{"abcdefghijklmnopqrstuvwxyz"}, 26}, + {"TestCase4", []string{"abcdefghijklm", "bcdefghijklmn", "cdefghijklmno", "defghijklmnop", "efghijklmnopq", "fghijklmnopqr", "ghijklmnopqrs", "hijklmnopqrst", "ijklmnopqrstu", "jklmnopqrstuv", "klmnopqrstuvw", "lmnopqrstuvwx", "mnopqrstuvwxy", "nopqrstuvwxyz", "opqrstuvwxyza", "pqrstuvwxyzab"}, 26}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1605a7330dc3e9d2ed04ba10ebb6ba0f4b570018 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 5 Oct 2023 19:45:30 +0800 Subject: [PATCH 014/253] Add solution and test-cases for problem 1130 --- .../README.md | 35 +++++++++++------- .../Solution.go | 33 ++++++++++++++++- .../Solution_test.go | 14 +++---- .../tree1.jpeg | Bin 0 -> 21502 bytes .../tree2.jpeg | Bin 0 -> 6918 bytes 5 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/tree1.jpeg create mode 100644 leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/tree2.jpeg diff --git a/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/README.md b/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/README.md index 2316916b7..5f09012b2 100644 --- a/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/README.md +++ b/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/README.md @@ -1,28 +1,35 @@ # [1130.Minimum Cost Tree From Leaf 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 +Given an array `arr` of positive integers, consider all binary trees such that: + +- Each node has either `0` or `2` children; +- The values of `arr` correspond to the values of each **leaf** in an in-order traversal of the tree. +- The value of each non-leaf node is equal to the product of the largest leaf value in its left and right subtree, respectively. + +Among all possible binary trees considered, return the smallest possible sum of the values of each non-leaf node. It is guaranteed this sum fits into a **32-bit** integer. + +A node is a **leaf** if and only if it has zero children. -**Example 1:** +**Example 1:** + +![example1](./tree1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [6,2,4] +Output: 32 +Explanation: There are two possible trees shown. +The first has a non-leaf node sum 36, and the second has non-leaf node sum 32. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./tree2.jpeg) -### 思路1 -> ... -Minimum Cost Tree From Leaf Values -```go ``` - +Input: arr = [4,11] +Output: 44 +``` ## 结语 diff --git a/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/Solution.go b/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/Solution.go index d115ccf5e..2983aef5c 100644 --- a/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/Solution.go +++ b/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +type node1130 struct { + maximum, sum int +} + +func Solution(arr []int) int { + la := len(arr) + dp := make([][]node1130, la) + for i := 0; i < la; i++ { + dp[i] = make([]node1130, la) + dp[i][i] = node1130{maximum: arr[i]} + } + + for l := 2; l <= la; l++ { + // 0, 1, 2 + for end := l - 1; end < la; end++ { + start := end + 1 - l + for k := start; k < end; k++ { + nodeValue := dp[start][k].maximum * dp[k+1][end].maximum + sum := dp[start][k].sum + dp[k+1][end].sum + nodeValue + m := dp[start][k].maximum + if dp[k+1][end].maximum > m { + m = dp[k+1][end].maximum + } + if dp[start][end].sum == 0 || dp[start][end].sum > sum { + dp[start][end].maximum = m + dp[start][end].sum = sum + } + } + } + } + return dp[0][la-1].sum } diff --git a/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/Solution_test.go b/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/Solution_test.go index 14ff50eb4..1290a9d09 100644 --- a/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/Solution_test.go +++ b/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/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{6, 2, 4}, 32}, + {"TestCase2", []int{4, 11}, 44}, + {"TestCase3", []int{1, 2, 3, 4}, 20}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/tree1.jpeg b/leetcode/1101-1200/1130.Minimum-Cost-Tree-From-Leaf-Values/tree1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b444493e9df20d3cab98668cf0315b68e62d6095 GIT binary patch literal 21502 zcmd3N1z4QTlI~!^U6SDLkl^klFhdA1xCaQ%;O=h0JwR~RFu*Waf;+)=AUMI@f+UxJ zch5a%&+eY{-@W_X=l1l>)O7dPUDI7(b@f~I{ht553LpTz2EGO$AprnLk1xRQb!1kc zoSd;LSmibF&8vT@Kz;^zOvnTP0L0$a8LS{ntD~z&`$ySdl8Kp%<6r3ijlFK`%Yh;t)HxKgRka{lPJgxxJ?P~$ z`;p=Wyaez71b-s{asU+MKhhtcD31yC3F;pSUYI9S+t*qE5O zgt&P41O$WxSU5z)L*yxX~kdRSO0ccOq zF$jt1i0OGSd1cg0NEl?nPC=x6rq3AVoXMUtG4sC)P82e8&#!|v2-iP$L-IG>|Jx{k zloI}R(7%)}0&q|s86rd>1V{lc-=-8J|AX9U-)^s@1lu=>cOBz)Xm@UY(NRCo73){B z>+YL?qE;9(6wioP*d;?tgb8S3s@0-u*>zny+a(-M9lX|u>2Mx68@C!#Zz@F31Clgk z7y}hS8q$max2pyBVUIrhGa+=iNR>JHR0=<3I#*9ve}7?_bCxS=j+~;j8YnGiPr`73 zv5Y4&vFR8de-&Cenq?37jXRLDp?~q5@6g%v1)DG5vohB!6+GG`3~_A{$uR@T1IdXp ziqN??Uu^E+2lq3x2=rSDYc>p(0cXz&XbMr%6$)~P;8r#Vhh8!;GRYK0wdz&S%( z5+%*sd_&hIgfE4~6aT{b!H(w^s`B!g>V#C&y%%;TC4Z`T)c*(PP>;l(h&6f{$Q(0tXs~-4`3l699 z;Uo&!)&?o?sgM(RSQwq$YEiDS9?qA4ux|gZs@kVkZz1aNTQ+kB4DKdCOk>_pz zKH_*$PnvkDH`8$;4k)G`!50)=|=~69g8l;F$EeM(nhc zG#S$B=}py=!Dlo%d|&7YW8(N^)vRzQKEI>=4jQMCTAH)02o98pdeRujb8tS%fd~KL z6FQ4sT(24qD&5BRSF$j7JoHoA2aiQI!ak=>5@02W%6g${TtYcfh=(NdT0T}TB3alV zieS&6Tz2ia1=G)YKPgE!Q89#GxaHde#E>SX0VN@mcKzJ_pDDEtGq=(OtFL?*6_`hp z_5ziZ=@`p?wYTC&t!mXQ9vw7nxX+L7b4=O3euYdLy~5~6KBN=*<{?p;nkCQpQv$>IBOzb~H%TeRY`N=dnwi=6PC)e@W zbgUG3bARoSY{4{ob=o32#C(b z52nNuX4uF<&ABK~XP=p1dps_&p}4!mzKzDS{(3>~5_@g&+1QEY!-eAD`}L)Iy?09% zeFjdmC_vA`ZdD}+6D_JpzxWw0np08cZjs*Mdk?xv@!PqiuDHCYC-ejEqLG{EdOAw6 zNfOADB2|66E=>y%Xzf$$Sotut)PbbCid{KnIwlY}z5{?+%Y7wN0;8l@lqh#M1bpN= z{nwMj<)VvjlnQRAT|f#9;OIh%*ZR?OvFx2=f+P(#A3Dc5Eh=hJM1 z1gtFBVy28sr!M-8FLKfOAR6YqUvT||a`(>Bdet?@uh?w{x~4^@NIq%;rdPOM$DdB3 zhL3A*(VitJ1nA9wkfoH(a-svO(g7I~WNygMe*?~hjN(-l#H>;5 z#R{e+ityn*FGg^sI~F7o2_xnv1Sx!P>F`m;6MRrporYp{X2_4ZK;2Dpuvq0lQN{q0 zb{(d~Ut%v_%Pz`(iPF=M{#j9#QqG~MhtHd|{=pTX9 zmgV_~@B3=vD4Lh(i9Ty9B~0a_V+_*v*KH+;Lij~*&yZoSp80T^^qoRjKj@QN1HG^g ztEAZ=YD(o08dbyc(cuR$WfV-g!Me{d9Qccv$GuQ;88Qi{pE7?Xf3%>s+2dT9ANXuEC6s1pYG zl&$<>f=hR=Merz7=;Xo}g{Q1lQQaAGE~s5iS{bgAtt5Fe+Cy!()AZNhBP);5YKNCQ zmsWPGIhOB|HHr+P82~;bsWAitYjWr3-pw`hy?A-Pjk8JWw(jfM!6pjUI)fiHIb%C=N?eB9fu*N!>kzvg?mGYl<-I zFG#WL30o~RiPVEOrq~W59V&X0Ltv5`0AkYFEX}Vb>-_3HLijqA`v0464Y?)18kQWWs_oo(bJJv`%YqxorTm*AK@#!Y|;V2Bc72;Hrf+P;3UbsnN$cU(LOrtZqOX?tDQdY z@Fg5~-2U$6oG?4DlM=mt2M%`dv_ zjk)_TZymj9D0rzLA-OB{ItWOc%IfAZFNmAr5b+XbYY&^>T5$CqrhU`ts2jCwxMsH0 zvNW+%l(<}?!Vq!_WLo6YZFr$9u#e}1F&$&W^$odynY1vhUz;jrF#=15hCjhyUeyju zgLgLd*x1&fcfwC4tn8Uaz>RN!2xI{(dX8maWE<{Ai;N8ZfuVvj+p3uLV+l7OS<)72 zdsf6y=ii;uojv?@Iwhr8kwzAn*HC$$NEaC+!md6F9cJYg-iXEo5ur25=X4+~C9Am} z9@?AH%6tes7}9L-y&{JC*6_RQ-j;_?8tB|I$$mz}#oKGUK$B^lG7Fjo(aP97C2^)c zb17Y(4J8$Be2Lo_YIMXvWmPq6o&DZG1rFf=@+Y}1i0Wj8khRNCD`~uvqAEM84C{%m zdo+57_6Ii|^8l*aIpc_&T+^Fy6wCDJdR(&7>H{IGH?Pp3krK49qB3XFSz&GQ93N^g z=C4$uh#bOb(?c^M9Ggi9Zl8v{u6|51CQcbaQ8lXL5850rN+O_m&SinrcLz&<<=+6F zFNYO(Lbscs4s-FZ%Ww5(8~s3-_bcD9^-_Bp4I$}>_ewKqYt(*Ud{~poG%V#}B_}(; zT45{+MF}#f?zD5<|J(|CR9JfPZr&!PuTBwfm;*lWC9sW8RwWgl!AkPq z$6?`@p^`FzR2V8?Z{n6d zYW18$xLw^%*f<>z(LFcnL@rTW9K*a|AGViC`9lw&~Z8n)ukk_i6{2H-BFuzfZ zncHc79RG1u%f}t15p5V0S8(?lw-G7(*qVIJE<=n{&n{-!4CM@;ZrbJcVy@@d%I(+5 zg5?{SN7Yl^P{;X!0)@~0;4hSI>r1PCo_SD?G05q00CgMP@|RuacLyA9eXFC%qGM~& zraZIL?@S!ghygT7u^%3(lA8`rn01p#%Qh*Hl`Cc8ETCGV)kLfB)UvQVY(Cf<;mPS(ELq^4R^K5ZpX!XX zcPR7yFjw((nXluJhi9HO-ZmBuK3mci{2S0pIJ2JW&m^p(rrn&q}L+#pF)lbNI>Yi!xLX%4CtuwKmLL#++d+{s3rVKAkrzQ$j zFj=q&7LY2E0Zt!sQOqX&-^m<#-_F|<-qcZ)czjwhU8vHsAZ30($i9Y~=M9k1C{V;y zL@i4IFa}Bgxn|%r+z<X5x%+y=kQ|FqyiQk)z(Zf1w~32HH`qAU?nN*n+s5G}wOgy!br6yv^Lu!*2#(el$OA)XHK7pa*{p`s9eP2bgm z=zo_a#V2EYe{R^#$@Bd4h`Z{P^#zEC2>pQLq8J&TuCEEbvr9K`*WVax8Z&n)ew8%t zRJy3c1|~~&CP~6XrS2i$nha+94e)CJ^i$}*?+#XZu(F@Xfs}Ig8{j75pf_{L%5okc zI{YV8z~sIS%ovh%&{XN`b@lV0hQAD|hsS@XgvKsAStFYyLmM(5qE>o0dT>1Wbz5k; z(b(cQz#vKor!@VpeAs)owp>Ok>u0Ae7@k&H{m6BcH*|^N53Y$!hhldA;2H}wUUWv1 zgh3nk$n`iINcA6Nj;cXt{U=oK;O4rT>r546HgV1B7DKLrQ@FIw#pMd00qRVHcF){` z*HX>3BhxA+Dnz%Gv)INFZ}@|T(u%1&kkqO(M^k;|p=Aqc=1x z(jK7`Hi?uBpz0QGuFv%KW)YdKpynabP@#ox3Po6iJ=yc1JJP6=62>1ydfI94i>|;X zOmZoLe#h!7Nm)jWifK179YLfS6NQ3ly5=dUf>YL%Ol*n=DS-fhI{^Go>a`E0Yg6;_ zXkqI_MP-iQ`~mteUPHL3pJcy*zFE6!5j5VQEa?hdtup^(G)YuF^%- zqg4EdPO45o9LAHvY!`-MiJa#5Tq4u9+51P|9iTmSW-Lhs`!_E8lKQ?|-Wf$#kg20z z*`bKk=`GI^p-*NWlu|FDJ*^A&r*mX>Y|3E`cOa_C{NDgL1Duwy6ENn1gyqG_CMlR=9AVT>7Ks1(5efh6j`AM}Er&J?z=_o3rh^ zIgX@zY>D9cxkdYQ%Rztuxv+TIne?7GBM}m90=Bc>r3s=YU3rW@_c7SNw2OU|(bpQU&6L`SH+KUv45 z4e51BKDg{Y>OLe7f-AcYZ`ZcQjg1;YJ_qE(k`hAiBUqv<*<{#WynD%sa;T@>yzJav zQrK$pT(6{?=+=VvlrAd9*pRWoYh6Pzz!Z!0UcvgZ_RGUzhaC#(T;OSFU8GkWzW+9B z-c1aU&7^ZYL3HoZfo&BGhG``pRW}wZs@|}%Onc-F|E+o@eJExn`I}7I)3R9oXxX%K z?XCP_*>J?NbEbtnS~i`agoesT%SMs*>d~@EAyoM%S_|<**F&Yyn;}Bq`QQV?Q_W3Q z**b(~0%rYjg%0(z@JamdXl^WH1JZkxmGG?=KlAPerPoJ4$qdbG=?tf_nJTH&WoC>m z2hnh4aZkL1?=IcN={Uq`Y!4ruoQNr4wys|3wU{%H@y4T&0?IxehF~gJhZ8eePy!_rP`AkxO-sSj%7y zy_m^ngO9aN0~TUzTlR2&AXPgMC0P%Pxy0dv6DF~1vdTdwOZdQ=TJ6VHX2_MgymPu< z6T{KMk6gEPuZ@J7%lX4|doLs1w7M3^?8})c@Q=dYIvvXMj;^(`OCf48%fzb$VGh@` zyc$pOOD;`i)RIpb`)C(_g{nepRa49yEpu_LyXTj+nB9bR8@4o#%`&G`yK7@r>%TkiwTetnVN>LuQd(a z4W|7N-&OpP$^|7zz(-Pu&aV<(C~6kWe4%ro7h;|sR{wm^!6=y#TWeU;GZg2D>4(Z z_2K2Ri3?mL=vTpX$ny!KbR}`$Wn-fy?0rA|cThgnTkU8wuUR3d?sIHTrS`OADkqDs zlzDxXhWurAn!8}JU?fTcTm|86g)|=t=K(#JvN@5t<+c^`$oW1MrdM+(KW2SlKZh=P zfCq@u_Wb_lMUB3#co$t8Q%5dmbFC20h2{lhNHJ;a{2?IK@uF||!aN5^|uriAH zge_|=NnX2>D>;mu^hxDr@9r5mIU+XwHiunuT#He-6U3WxxzsHewFCg$L}L&-5Gh+3CjOIYYKp;O(;T9Y72sQVs7 zZbI&)oF%24r9~qN-_e%tpTH%FX7ax#D6Zi{aGC~_J2%+NX+eCZ(lgs&(dkpllY(K) zU6f$ebs1C_%^8sYn8pVfO(l5{!nbuxp_j;0^kyeX zqiboI31ovv^2Mc;D(E@i?frubK3zgA4K8&LjbVqA)UXZTz>-|h-EU49)Wq-r>3nJ?-rE5T?P!~ zUp&ANaozSx2}2Qd+|_dw*6gdnYO@+hltBa4@lAfyR^N82h-zC@5=EGXos*)jc4Nqx z<=C%%Uk}oTbglu}fva&|q{R&z3%mI(${%g;p!K2n3BkV-ZAM3Ghmmp7=?xPHDxwPZe}SUmM)2zV5VN{T;3 zsd%`9GR6M?)O{2DDwg<8-r@TO`>Ov$#Nq6Gx9YrjTJB&C#=d%wOVvmW(wB+8TLaiX`KPDLHOzj zg?SBM($=7tA**=`V>yUr6Cg0Jf!m&qU|ITBE;m1$Xs{HIS@Jbzk84|m>7|KK*91u- zqTC1!R&gWiM0HbDqcC2+%CMhZNi^ginn~=5jUBe94Es(G?T;xgD(A2g+z%}c{l%TU zM)JitzYU52#&^3F#2Iy{ZN6kW%b`1M2L1|zzBqhp`LVJ+ zW@o;_&S}u;o6+l4jnIw-i8yO5%wZIi?3MXL$wqk7D)3P z6O2g%w&JYN9=27gF7BZQepLV zIq+U%G*2A7hT9Z)62>`s%^vv5pVsI=ueUtO_uPd_dw?+=zru{Sfw$XuOBw`!uwq{X zr;sCbg=q2-{$bSipKT;6DTz8YEU5Rrm3FBs?8VshD-|W8FlosT8nW~*N)36s)2z9j zAcI_y#^L*k8b$D~n@zgeG@=dA##d}baqZaaQAI>}vHiZzrIMG5Q7suZ&Rn$?rTfzU zpue^CR~DO8}rAtJs9tXEmi}+2{1tP8hy!zv)_%3AfMZxnCn01 zz%sXSZCmrDy(|(=%Kx#N<0m)4{!@=&odgku1q#9fQU>F9%+0Ved};`4qMERwoKx zggP%YYH&YB^F%waV_&6QDT+3pr{bvih2=WhQE!#rN0u=mo*Ca@pyO=`ABP;Lz%LEd z%J|vf>S8vTvc@cTgbU(e7UJDnk=9Dud4aBm#wEqABXgmb5f?!TQt>A#3iOn?)6y)? z94>A_#8Xy+Ts{~n*@5nbsKSrg&3#?Q_id0Mm2nRokMp0&H$P#BzLHk4nRU`juL3nc ztZ}DtZJS?e)6cf;p$vtlEuS+{VO-8Wkfp^BZHMIieSNaHKoZdu7is@pTNv7@pvI%7zo7;EIkxlcY>@_1F| zqe$ZvX`DeG6a@95XTYy5uoL`wAxn*(PkV*QzL82^S0V6SFEzqG0z#eza8>-p=KWcT z;ojXSCafXMkEo$6=v-5m4Xl;WK>c|1mg13l_=m`p44WOAX(x)FYmIi2Jypfr^pmmj z2qr~uv9AT4x-`X_jkMcSuNRuS?WVo<2pzfn!zjqxfZ|LUUYz`iX#J#P0P!((xu*8n z0?#Lvd$?TfD!&0q0s+4P3Wiemd(|ulQDC)tC7Tp!;YMAh|83rgOtL+bh?+IsXYmf8(QX$9%GhU5d$K60~GrORxV ze$7Z8t2s29c89G`Z)Dj`_Ex_y2We5+GbZl=Pi)(|U0=vIY#&vHsJMEd_Z~%?tECE# z#>l+zvW~9VfgV3=Rz%RAc!J@L-(A&sWb`ezH?f)gL~)&A&boZt_9T zN5nFG*PtBuD?Jwr?1ypAIBt}7!B$3?Y1|gBntU4?z4;$PLx|Ekv^WU_N}HFo7Wr)zHq8sT*d3PY)=XTaOJGPkn^x@op1g4FzX#X!|f0zVlNYMDER)6u>+ zW5;vZQj(uLrx1`67J-HVb7sxaDXP`U47Heogr}1#c#ZSkG@#4dx~dm%E>@Hg8MB{u zuLM5OudjNW+QHIjqqy-r^@CDas^yZG&U|K-q{}LO)Dsiz&FpV*)MvNa?~YW2@lSMZ zc=b&bc1p3P?lcSOPn^^^*{#FyeutBmz;Ine+Uxvafc8US%AK3pVkT zlEv`h=uIsQiwl9aKq?n)H{j$Qg^$d^7ft!f(lL_{o4ld9(~R2me{ryDlpg%lsWW! zK4IB=>5^$M89@z6^6pA(81$!}Th^VDbIh=v77N#+CG{Zf7Y2C)#cVFv)RwulrCZ1(dhuX6s|(4fbM{57&qQC;422IgNF-#3s&NbFi8(hC%Va&W`$4Fm=V^7%VfT|5@9!2H zz5~UNg3q%~$5n3piVLK88=|Gz$o{H@{pm4N3d-$8bVx(js*p_ULASwb*czyqMosv6-dx_$L?sW;WjMnCa@ z?VB(D+TqJ6JU}R>lymZ`Uv|^j8avyOvbhgVi*Di}#>}1McVn!HCOXmEkAXl~@v1H^ zSKSVh#~~e5jKrls1*=6M*;?Oa3AOLYyQx?(Ypb(}sZN5!n-Lm%SEhbCi-=adVJr*! z4*kS25z9G2>8JB0<=t$X&Ek4@ToYyu*=@%v*Bl9GNt>!!FKRu6|8dtNbBHs2p&x|^ z$9;C$Hrn?y5rlG2X4WIC5B?IZmy&q-q^ilfTMD7MlZrztYM6YL{exY$khnXE2M=OqiK*npghuEMMD&^o zGc(RxBb7kI6V)^O(n6Fl|M^wPj|mUmmI2ncS}DolCSit-Cp$JrscbCJAFPgAP!XA* ztV~=-%U0vdf^#Dh_b{6U(w z$Pr&gP1Cl));a?%f?k*4Ms!8{kBEAX46(7~dS z#1Idb$!WlL{`or9-0slKW9~`y$FMex`92fcw8I6vm)?5X(Y5SMPLm|5)EWU*KdZ1h z1PbL`5ymgCPufBK42HBVn2@(D$IpyAt#sCa4BJWg1JO9YQgIrKedZSDcwCLu*KD4U z()^;K`KIqKThKUo#wSukr3eU2Y3?HKxU89E{&|gJB^{r6ka=H@abWy;>*WvL<4Yzc zHZb~lk`)*G{pNqYvm1)}=w}QNn68TPraCzJg&yQ`#8RdCSC}-UlSxLYRtattB2t$Q ziu#u<%4(E@Y_N>*L--G{!4JOBqOzOgLiky=0WuO63FSlQ5#C`dMZ-fYWbt7ACCQ6} zg>5g2pZIk*hp@|A(c-vaN9Ua6jxClk4J*OaMScWP2o}P|eyN*~;xT-VxFhyCt!sQP z7>;_r@?$CU-ZfXI?vrRkM__LOj_~XzsvNA_ieCJk1U|qkbD~nU+C)k zLBvwQQ!6xl9aUEc=r-7CsZ_77Vkm4-M7~c7bS=De*J)UI-qMG@NiA3Q<8rq)>ihWq z!y5G4N4sMk?s|;1xjxB}6VxuP1 zaG2uzgahFtyl+a5XtWo(w0o52)B1h2CmvzVGg-_P7B4T33DTrJNIJEexQX=-hn;J% zj*yN>$j{hVf+YojJNAoCxE%fYx{&z`F-<6bjs#RHgEU9PX)8zRgE$_LF$bOTR@DWz zTnLk3?}DVY3e+E{zU!73v&A|pdMTDp;?JSitR`9dhf|yV7XYxTef9Uj4(gBC^V32O zgxeK0bh%g>@`J)iwAFFH`8R+)YwKe)J< zWW_NEr{;Kn@E8xrQhn8g7v3QaMFEKQjAi*5B&U~dx%Y*1(J+T5lN?80R@P8c;TldB zGhP{N;bF}xuu3tZ7JuG@xwYbS9bVxgEvGzn!ZnGfDy0>2dH?!3j(}jQ;J(d|e6T`> z@cimolJq7Q>t|byBWy^fIsD#`4CnUSQ+A>@TgYG-S#hV&G*_wmHgFSV{&e0M zlLNxmk1P@j5#5S-MMbFh74(b7SI#Uhg*gDN^oyirknZ6;-t<#0cF_-q&jhERxU?79 zhC$yQ)LBFM++y$t#3R(k_NR=A+wnRS(y4~ zqZ(A?+@~U~jU=#!?fdf=s}p=r4-@Y@s!oUFInNAqSDk^6Cl{8IOGKL1%%w_DcZY;|6hM5*k%H5FdPWsc*rx7uu zvQzVBKWTCf?Gy?q6^}OL0;TWs$SRZtr?WY<9V?CUceidO)_XnQOOPwET!G1wm$89c z?6QGuw80{IgXRDJ=>9MM$UcYLPbKq(+uUkpIy0XxuDF)CCpOCbhjsX$3vlH3yBs`y zq4t&~Q^x^>lEgK~{60Z4z`fA$5;^71nhv&KT35w9JIpN??zf7I$`pc-MZLETwmE(} z6*lcPkp#RGQKLn+RoZzSYPpz|`)b)@pEh4a5B&CdIH_BAcYbAyMp4dic7CVcz!v&u zUJ7hH7GtbYNb*C==&X#ab3;)!9}fF|M1-8SYdKINT|_RpF>wfgP=?LE>JJE3TU+Q^ zzdbv*a$T33<&2Gqgu?Yk<{_KRM180!Cr5RgJ0`<9Kk0A4n7|TmH(?e|zd5d8u6#Zn zt$)|of0?b{Mh~a_4qAUzY)$4Y zo42HuaLroPi?avnQ`0tH>R6`aJ2q_KQCQJgDxEY*f(+%XvRX~iF3h(6&Fn55(l-Cz zh=2X$^kbQx4^9BX`EqsSgs ziIfnayR@w4Rq#u-BPB!SfD3x~$Zi_JP|K7VDDwUo{^+VVt>IuRMkhn7LD<@M!aCwf z(Wm+6RitXE8;AbJmr7Fg7|v0?2#J<7-69W*)m>3BUG6%h7L7P)3^9oDknD86Bw6<= z4!_6~pSdQelhUqTSc%!qj{rtHW#(wk%C8Nz&R37YMS2gIlC{<>v3)9|kX1oVU7|NPiant*M_KhEFPqoc(*B#X zd{`_gY@s;sl8?8a{Z;e!(-W`~9;35lUVO1B?}e1RkE69md#f$#p+?_2@&=qaZxCNe z-|R%TIgTV1;0dB!10W4*7i%}vX|?a-D3UE(PR$X!)V*=%C7YS&8w!2S zCXq%Wf?IW>TDSm2O{~A#s>%4Z-jF#}t|k1f)9+WAhppLaM0Gkd{7qyH$`VQCcmgIU zp$1)C)$S32|2r=#;h$ESv)Wn52<4}i{SZVz)8Nd=zCf_WJkKzBAeiEUd(6o&9~Op8 zy6%_2vgbZq8Eu{^}a6h_&f- zmELeKXZOr@1j=COVi#s?H^fWOrP>Tl15G2Ok=FV_Dc%$S{2m3yaocUd>e}1g-hFq9 zpf>3+hHozoB@!wP>q4o2;Y1mJPwf|{_QN=#I)lt=PZ#M z9@{T=ifQt|1K~%QWxR5ev-9@^HD+N<($qu|!qNa|&0WnyR{mcr9wNc^Pq@Akp%AQX-)W1iRqp#TIy7gR1H1A5P!P)H}J*_WvLo>YZ^1)gCm!+82DvKqs z9EvZm6}Q|6qbSk!oy3cojP@ca1A!F8_IkVVM;yRv(NwdTgQqKd5$-Ta4DSVJ+t7jN zRf$eeJ0>8d9Bb93_sQr##IXM+_L4*4Pp=L7Q{!u6i%Fk*3HGV`xBdlty}QAOwT}Qg znqZumV&>^t?>p~Hj%KPG%q=;9na$#FKuxw$lL?%n2Lmj=fi|^()rfc|bG$l`y1Z-P z()nXNo_$~)WSR?oE`hBo`wC=cnimScij^FxWd2!tu|6gM-M zQ;7Q{4sI4o1gLn{tf(b89;fla zW#q+bQ5vPv695zm?HJ~)x5`1VP&sF+9XmZ7WS{m>suW}W z9&F8fgt2>W87t+xRJE`Y$bUwl;bi%YSAhfeMsZaX5w*p}eyt(BiL8kA`u|{k!68c4 zMJ6@+httZc%>kZuJK0YhvmsbVq05Ygz3>6W8{q_BWUr%CyyaG{8FnAhNoMPuLUR?5 zk4ZKqDlTdD$86nntjBkP?3H;M9<8<3{;3dK7Ofn)K1+*cA6&X!NBW^RisQi%tV)j% zPy!S~f=w2V>e5e3LDa@OCDFadoMZn(k1reL)q5NFqUDO z*}oj(G7PCBax^3`yq)U(F08+wRL==tDN!ytFxTbd8*om3SK8>(r4=0>#5`3SSUpQg z@Z5Bi;ji|ZIJlnU;+j768DX%<3J57_*}3=FG+2o)j}dZoD5n<1(ZyyKi=x9~T|E=g zrad?MFwQRABaN7AAZF++2=M4>{64~)5ra2c?;rCOPgVN%cZfhIwcRi77fSXtAh-mdd z!U2p`m&b=U(OT7O=wPF55OuDxCJy#XLB`4r2j#Y<<8ytlGHdk;x30mHu8G-V)Qd}M zS=9tdlUciS|68-xHK%%AyQ$OclF6a>L-nI>FVLSc;*&-s0i5XMQHCBpoQIv;<%{Pb zCN~rt7(T|Ba3Prvy;c`k8Ioog1+RxAAvQ zZx*C%77E$cd?6s~sXZ@|BpxFTAjhXzuE~C;5tQ?-;c;%u7Sxxw-)EL5FKt!b4LJ^g z#D0xNW7VV-qrPhSY7?G**f0FC#Pf()OmyH-o_;&6v;;>njsQQ@hznjUj6@k2hc50i zMr((gKl|N=Tx0K(Bh>e0gIl?bgoHvu3L}2@%;$UDWuxU^Wey4y zeMM%s0j|7U@I9)SXF{aSYfN*Kabk=&Oz-3ScB%8my`@0l;Qt9pugmz`x&IH3V3e~c zGvGR}*caG@4d3;~%dhfkC9~&>FnX>pSE8X}-su-5gaP`__WN+WCOF0&Dtc1Vp3x7TPk$1(}Z^O(}S*N3*^k$P# zU)GByG<*r*?4LrN^2k&i4}sw2A?m=1RqpaBmq$HL2?I*K-Adt$?i2zkzH&+SF@I41 zF!YPi)M&23)o6yC1abc6wXHXqgs%v}B$<>-D@oq5Ap2@BuSCEE(6YduseBH*kc+xk z5RpktPak<33irAY(AEfovw;wJJ3NLnwMUNP-x+iS^F{HKus``CYTn}Er?MQS)pW8d zQVsQL$BIrJ(p^z1#ljOB9>YG$S>UwsYBJYGulGp%HQO`ATEAVUA&P3uZ~e+7#lwr} z=AKzo^W|>|ma{=Ry31TEhl(BpniZzz*j2p}q1fCtN7`N<5BpoUu2)ZE*yrJn&s|@X zs7G7lq=x!Rh7iBWY!D9tp0+4V7^YSIh={OK zq#u3MZLgNU+*fBd!5a}S;=C5RMV=D9vnHl7M#^=SZ6zA&SLJV?WOD#jwQ(=vU!Wuo zHD4X25Eu>n6_btj@1-`$akd7;hDuw^(92sEzQ;_OcHby+Z3rhO%tJ>H>WZNBCU1Y# zWB-56@83C#{`Ds*>w#ux^n35$fP$nk`6VUwny0VzB%&cr{LJ#N2rn@m&v$HU%26D_ zsW7T>)7DDkrB$!C*PkJ>t~88KMSnIKWK+_xt1NRF2CF8BrAA}@`WhM@ zD#=5IdQd6Wqy}lXAH#6RrgM#*U)mjrD=U76!#-Ts{SkY|2pp}Dj~shFK+IHj*sr*2 zjl;|!jfamCh9`U>;QjcFwYGlJW*Vg!O|!Yzt62%?gjMwB!W83+V%ReXlagNi06-bl zp-n%UcX`?Bb#}KTeO=_!w!ZD4rTk)8MxADV_i@r{rk z#@_&4X#3yRUSGl=EE+ zm=0+-=x6VwI>?^W-*i<=s<_?moM>FWOWK0n_jcRecB+gXihu5Qa%kL#E3D7QQB?j$ z5*qGr0PH+kOHC`BF&nY~59nVIHq#afe-RHwcll`{Htr3T5*(^8+rJj;+v-{_=x!wy(VR>ZODGn*wcyoZs+(kxvlDW1k6}QB!@EI;@}G2rrp~zMO)e+ zD7hR$wQx0g5YyZi`W9N(*%3i}D$po2RcYO3xYXm1P~;cR7GdCkg2~6?GeytHO{Y>{1QBM9gEiDgm2bdn6>m)jDtXB0hgI)bIdbgE62>lXX3Y6G&cv z7@-C_AN$547z}fQCur7MuYNr@s7aBj(O4`oGuMv*2WDz|JSy60^+ZT+5p)FUxCguC zFhx7guY?`Sg&-%_37g-vJQMxzRK?9eRlj7xV}fheXPfrH%TL{A2=LE5>lc9B-a zf1;LQ>a_-zrct%4gW$2oVQ7&|{2~+*lQ7co$V?4)j6DR@(Zz(&q4Zv$lM+2cwimDj zfQSrj0GoN0rq8c(O%|L}56TKvZ#Vc(vSJvcuoa=WwO5cs>He1h`L{M>SXA5Lbbo|O zWQ!pdC2y|2p_*A{9c5A4_R-8DmMkN7T&cH60-E3tYxx>uG!Q;vl7cthPMWp-vokHp z|7Smk{4l~zyjYhSI5VRYTS5cKL<%AghyUWDnc?#hc5&u{Z(8UJJ7nP8>LqN7qw2&V z2_wY{8bE14D3_Nj(H1A>gwT26M^`5s~S!hi-Q}WE)mKgfttmlUt z;;$g-L{|6*hMC9@V$bn9*`Q;a1&2-wv#vY7LZ7GUGIvKzft9Bm#eOg7PH3 z$ATG`YI^yXmQSIyY+T~0X=Cvjuz+`tL-OqMx-QQ}c1-x>tx=}xE295kfei(xccji6 zhb|k4K*C6iLrKIk_?!V3*@tWYP5$P^Jxl+3uX-`iB}i1K-s4n3!`tfI?%ds(&tiZW zz8heBcprDfphflS5sd*kw`-`o#bS>#!71E_!FMvnuK+edW3}8Z?=DZ{b}=mno{8r`2T#Dl|z!e6o@I8d3L?suitgXrA%q}{CZA1 zq&7naqW+W6SA>-VC7=q++DOp&R#P7C)XLE_rV6{QYY(TVUbogBFea7c?7~HxO;q5mdYZL9RP1BDEbYPu{H3zmPh4uQtO4 zmg6=t%;m_sM_c4(31?t42`G*3k4v8w{zQ|V$%VMB+9U9&BtEV(Y*Jj9Rp#`=RonU0e*Bx3+^=^zHE=X)WCYdku4YDPJ#%@Y;8eF?+v;^aofBl9B1>01B{gn~76=pJIlF zUo|Wq`{YG=#fqvW`NYdwlq+IQR*rA0+{C=N6*^k6qhr4`5My6YesG2@EaHTT78kcG z>6P(_$p}_isdyW8oJ31Ih?96)qte!Wi-VCo6VYpi!u&)72))g~{;tRWwVM4Pu>p;x zqUN_3HvDLd>_FM!0KU|_Y)ZEL{=SpF_f6)ec*9aujJk?a76p9;puD`wb^j|WnRWjk zYGcUd9|RVOb1r6mm)S||2g@4;9td`RRr>f+-GD8_>OLXw_L^kursjM{5#7*ZQJNEr z_qkdy^>Iin7r1}QzEDM%p21FhL%fI10HTj;(nL4PO&!CJ8jQUjJz_~5tfGENMCB%r z60rW);_+(%({y!K6ccHsy!+7#!53*v{`r&jwj)8fi#ARR^q-7AsAi|{IkJEsq&>E~ ztk5HB(Hoz==HEwGe>Y#r5CyMWHm$n$v}4cM$wyC1*+bRkhA^L{p`e!{JSEl@ZMPgP I%Wt3l0ks7deE4IozF3?O;{KskG$k(z2e#wMmb=emEw%EsOGpZs6k&;0HV zo_hy?e(`_N{y(X}4{Y6S&WtwBiU;~E_}O3|oN>m7f9F2u-1_hQ={ZO1Bh}AraA#cT z;UC=k5AN;Z>Tzb%c5ZLuiazJ#XIv5GP775_ zKR`i7PC^PM2Awyn(*x&$K_GGvn40+9h6qGV0+5oCQ$QFl@k)X(FiJu7tgPKw`L4;T zA<PEgTTYsW7 z#|!c1@YdGM9CWG&Nt!xLRS%Jzwyb2)#-Ae@6<_(YDsBmElqx&ndcZjxF`!{7^>B1{ z!xFh~C#k!%n#KX;r}rsD2Xa*f4*TE2IbX1lI>=l9QMPSl=EPk*28XF()SrJgNW>++ zC}w3QS~E4Oo6@VM?GMpaC*+Jg7e4wdYV!$tOJZ= zrN&NKT-oL!bh%i7xbf@qwumm%J!B~P*EPp}ZQmxF1yhT}TOYoMrBI)_BO6_385?e z?*&%!76W15tLmuYe$=$P;$)TM#HFP(J4E7{J9A_DX7YtTa*~YZ5Q_P{_ld_`xhzg9 zhB6?{Sm%514>gaoL| z!;*v@1ls^`fh2)*#@=qV|GCmT*{;}YtmVm>Fu$Kn$rtzrJ%5Q~#|jw|=yjg*?{R+E z@2wsCvK838Y+Gb4uYz_9RT8dVrkRLEpa=u5B^>c%xt0vbfCDwy^sS243}<4)cb>_E z9Rq~v@0T>yl72Gcl(9P8TmxLOb~n6~f@Uh6hQz8XT*^jxZ^$~m&xKJlh+&j(#sAv}%+s9YU)^6n=e&A9x&^&rqo-;;wvb)c?)rA&}|d$oD6e1HI+T#9F;opQ((Y3^y~7o zU&1P(n60woD(S#m7jt@BGOQ&JlnXiV`4!670{4Ncv~rwVUt)HpU#W=9_nM?9>ncv8 zPl!K>Kbf2FTGFvz(P>soND64w578WWMJ1ASfU@^2uL|uj1O@+QJO1yc7-2?aT&z0y zMl@+EHPWGChp24csvXG{`*Xb5P;209}$le-<7ttV;szr}hNQuNBiB^nEsQw+8&K+fqH<>|TR zE-_c!XeTuXii!02Lg0nzy+ikhs;^0~96gjRZSJdjVZ_$vy?Cr!gkpm^5gw(PdVCGD!QXi7w%CMiExGh{f__yqE<#{HdZmYMV<(6R|b zPtdi+J*bc*t$aNtSYU4}Olbtr>R?F8;ChC;*?c_XEfX88*#({cd*f-Y+_R+v4+xEM zU+*ww?;B+DszX@O`q`8{3j@PQa<7Z|-}QZAt_vqI}nG4Rwu{0pdcCgyA7kG$9plzKQ%+$)$0uaGRM$VErQ zUQtD%^kV=m?6Q2uK6lY9uNq*K%qnYr52XDFiw*JQg$qL+{)rB z!89c{z3%*IFD#6}Du+FX+8ce*h~T|Co2w(+DTb^15i2Ah1mj3z@CV4z+Bf?vE2^Ic zlU*S$6E@sq8NSoLRrPh`;qp6nxSP#l5@nOKyi&ErmyX+kEe+3SC^QcR}4Fc|4h6f<6CAsYi(%nYdqcPI68RMnP}Fh$@=N=DS*C z_|WsVX;lDM#Fk8-J@*j*kDf3gDA1x}w zj7J+&XTLbopR02;8o;Fw9u=Do6bigwajGBVwal-i*k0Qn(MT!Hl;^PDO$H^D3oC~6 zhfwg9kX3t7A`}0W)KLFaX!huY)I9W^*cE^E+0F`ScRQhwev}+b+>PK5N(@3o10WdV z|IUm_`2Mi0RXs=JNI}h*%?sPFD`LUdNI%&L;=RM;&@1km2??5BFBN0yKJ&jY{$D57 zn7A;4fj%q@&ldzt5vd}OVPTgp3B#s<>wwX2BF@N2j|RKfR9}|O}z37N)Mf){YuCAdMbNt8LT^=F1lrp8dD;Av$hx$D0pI<*(^|oool5Q z$vZA_%9Bb-ElJE;(3W)j`*@hCK^qdrPw!9fApQS8QF26+|fYD^}OvCNuuK&-CneLB?AjLS8PTHs+Yl+<`U6O z5mW!19dDilTnq25$@&?UECEZWG0&!1Z)`~OcP4r68L~thsh8bg0yV7Z%kfcZ@J*vN&6~xEzH&- zl{$To??VCy_niz2kMXepb~`dm=I~n0aqvx!_766?cb(go128k*Vdl0I7@vuLA6l<=%zJpHm=#Qi2Y?f;ictej>UX- zvM#x%6f>DhGbi+Fjgl?)^8G5Y=3j*yCF>T>kG7Do^?t$lPy1O3KXvNFQ%!D86!b1B z(~zzCwhFd>wDm#uWsPkOZ^k4V67(8xmkZnx<_}?MClwJ4AAEK5y|HuoQeEWTVsN8D z>@h^5RS_UW35eR-b1jdV>W9;XBm}hjQP=&s7VeEAgAsp-xmLmZkwAi0>Gy)og|UUw zs=l}FkFNKxi81C@Ml=UDOQT zk8|sI8JIa^|7jBu*%k{WSzzK@7ga~U;pr4u-*fD}z%E=_xw37p9i&GmLBQ=OblP)V zw!Sb>ew`c{r@R$M_15FL!PR4@{#53iDQ`N*(#e@l00lpOzll`ttU>O~PHW3jyK~IA=}Lv;hB}o)f*M z0V$;7c+x&%4RyfOf4jhh12#NPm~OL}5f$^B6BmG+K`YG#6a|0P=(vqmKJ(38)Q=hG zFfz=L#xrVu{A@2^`9Po&SXddY6UFJfWWbNu_ma}rK4mUn?YO~fnJev8*D+!@Hf=XPi}V9W(}x+fv~5aG{ais5BU%$sM(Vo=WNHPJ8X zbkr)qH*+D28R>e5mjBbTK_EkJKD)3HHCfkU&~SK*yVA^tM*aSl>Ep{)d<8m?9!jy| zH0*T&T7G&>84LaF#T{6!)$fuV21R%Du~FMX&Ga@+#(?zL<5FyB!#>&}AGcD<5z!ev zoIN|j`9-N_$T7AWIR`UVcPbC=NPHU*1gf|*yl3%ltho4IDe4+wa^_R(`r~#Nk)Icn z^|#*;S)n2(+!Gmd{3k?y8^(OU@@?lM+V6?$iR*HH9$A#Jll`kaF~J1x>T!1UC&oeu zpQTy3A0Bzxp}n!k>XyGDr$Dtf^mxhTB-4XAd0LJpo87LzTK;)1ayCj_K5BEiQOohA z%p6yD@#tU>-mN1}1OVVNSo=F!#yg?fn-jV%)_0ycwBuylqPpgLqbX1}SPleZd3ZpB z9=GY%i@-yp!QJwn>*Mu5JPi%ze=zKii|KG%%@!)vd_Ve<_(C4Zj;J$&Ek5$yLk{@U zX%McR&`ZbdnR1^3((HYifs{H^lOOU=0cRR+y$AKdC5YFb;>Oz56sQ!Zfhs^HA4hG^-#G=h3({^{nK>(+8;47xj3MuXu437L@|Ejl^+A! z7l=-@#BXUi2^}*|n?4RVmExC#L<%5$2`09rtsHJpVKvp+oae)ULV^Q%Z*GrssE0}H zk0wWVHn&GjS3eghy)J9=DAdn7evwXz42as~@3l<+C7c6!b?-xj?(@B{nA!ibgJei< zFchPg$wtiiT%H~+2vl`CNI~mIX4dYBF~#p0m?3FV(x}t`*>26W3>MJPqFzZ}^YccN z$b=?1y}6tD265Mpw1WSHgJ6(DJ#O*ZDbS_({1kwkk$b{XPD{e?E>*ZD{)`MwZOr~p$M39)yo^WAh4WEQZVw^5t zKPcRjZrQ`XY(~!2Y_uY{Rk><7!uDTbzbdah%O|BvC*gwf^q7)X2V^2j30@_&E1`y6 zjo(R}Y_4LpyjBUUO5&n}d5zKL9^nF-N!)}0L(=H&g|$E^cqRvs=++!7{LK8XT^9(i68JUVBN;bawyZ>mk}KKowy= z4W9BHvcC{;7+lVy+3lr`(GT;I7)GbKzw}-c5D-R^_a;0N7ddFdHs9h%5}qHiO=RJ4 z`%Hod6DPdYxeu(vb85VHDD@ChE z;Bi&mdgiI10mcv9WcI_%_=A00xZcjs%&Lt7a}W_FBggTlb=tLB_VVLe)adHWRYr-C zvaT(;S#FzOYlNKxd3QRy*;P|7g}=kX>8do&sEg@$Jrc|79M zkyRwylMCao_Lr1HZR9=egNdGKu(}nrQADC5dNq6+e7S&4(X^wZ1En6n(SiSZ%woM< zx%i#4=#`CsU)PK_EM#_RR)CT0r86FZ;s z?5tcsvXUt%#OG*Wl>Nu&7xQ}5W5fDyEi<#OZ_nLS%ikTp+dAYGt zvaF8G`?7D*mHhS^^E-NjY_+Yrp#z^nKmYMwnjNvmhKh!UqblT_t)iYaheE(px1M6< zHG6W+LB2n?*U!$`>Clol^5qRdpWjknADksoCp10cRlKhl2lyoQU@!q`3w0<5QegzC z&a2Ra=2PJN9C-+4lLr+Kk10J;Or2qf` literal 0 HcmV?d00001 From 0bf295471a645a64dd96dde6cfcde967d37137c9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 6 Oct 2023 12:11:54 +0800 Subject: [PATCH 015/253] Add solution and test-cases for problem 2120 --- .../1.png | Bin 0 -> 1875 bytes .../2.png | Bin 0 -> 1492 bytes .../3.png | Bin 0 -> 1252 bytes .../README.md | 54 +++++++++++++----- .../Solution.go | 32 ++++++++++- .../Solution_test.go | 22 +++---- 6 files changed, 83 insertions(+), 25 deletions(-) create mode 100644 leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/1.png create mode 100644 leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/2.png create mode 100644 leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/3.png diff --git a/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/1.png b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..9b66080efd7e3183884ec058b7a203c03ce9e071 GIT binary patch literal 1875 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 literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/3.png b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/3.png new file mode 100644 index 0000000000000000000000000000000000000000..2c999be417eea0f941691272687d8acef7157489 GIT binary patch literal 1252 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0004T zP)t-s|NsB}{r&#_{`mO#s;a7nhK7fShq<}AsHmu>rl$7x_U!EJj*gDU$H(yS@PUDW z?(Xihv$K?xl-k+9X!-IbMSpudn?4{E(24%F4=`nwo@!gu1%A_xJaurKR-r^sun7i>I@fxW&@a z(uSwBm)iIJ{{H0k{jlTs`27C9==qG-^>5AdWy@xJG<|T*YQ!|?a~{@n8X-17TL!0@2m_t)|JB(v>&()1;>?jf@6BC_p3z3{Z; z`98ex@cI6`=lS&e{_6Mrp56ES{{A(&?r6*MY0L9Dy6$ex^EbKfY|Qg&%k${={Z+*A zbkFnp{r+;!^M4HQL;#2d9Y_EG00(qQO+^Rg3<(Y)9H6D}J@P8Gw4!6sRlQL(MJ0D_5K37}u`1-nbc( zLbSDa0NlDQ#kg}9n(y6zAeEAbk2)W>C|#{Gj3?c}9_VbBO6t?DFhI{UseHim7cbjh zy_REiym=dZCwmh1Ikl&s6RcK=3F^Dp zr8Svi>B)=*$V{eLDoJE$mC4jJV>2*oF=k(%TX{*h?9vx6Es+=s{+3r_Tz_n3nUd3FmaVRRO?xT7w#u@}n&a{q z>-gq{4d$hd0uJjK7B*vf9V0TnVcaH%v57;m9LDb$af2=MPH`CKo!cri_#LB8We7S( zmBvs+9V3yUi#kRkLlt$58kHgF7(?X$h2Jp}-$fI3jL0bYFiK#3KX@G@GPW@;%3(xt z*arXlvQuKadmP5zE-UT$G0eh|-#-8j0}l4{;K!&qc?^mwjKhQnB6U~^i-;Ii=aKt^ znmclB<)eUMe8+{yhG86|%@{__WuVt=lW~If#ALWqFUuh1)Q3T=*_UTHir^1idy4iH z?N2(x;rxYb3uw)X@SA^JA>-`4_~!!c#oyxj8UMI0hOS`m7`D5}F;$J&EoRmE59rAX z5N4105UK#F)cANEigG$F*G_eGdeOjD=;uRFffU= zE~5Yd03~!qSaf7zbY(hiZ)9m^c>ppnGBGVNGA%GUR53I [!WARNING|style:flat] -> 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 `n x n` grid, with the top-left cell at (`0, 0`) and the bottom-right cell at (`n - 1, n - 1`). You are given the integer `n` and an integer array `startPos` where `startPos = [startrow, startcol]` indicates that a robot is initially at cell (startrow, startcol). + +You are also given a **0-indexed** string `s` of length `m` where `s[i]` is the ith instruction for the robot: `'L'` (move left), `'R'` (move right), `'U'` (move up), and `'D'` (move down). + +The robot can begin executing from any ith instruction in `s`. It executes the instructions one by one towards the end of `s` but it stops if either of these conditions is met: + +- The next instruction will move the robot off the grid. +- There are no more instructions left to execute. + +Return an array `answer` of length `m` where `answer[i]` is the **number of instructions** the robot can execute if the robot **begins executing from** the ith instruction in `s`. + +**Example 1:** -**Example 1:** +![example1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, startPos = [0,1], s = "RRDDLU" +Output: [1,5,4,3,1,0] +Explanation: Starting from startPos and beginning execution from the ith instruction: +- 0th: "RRDDLU". Only one instruction "R" can be executed before it moves off the grid. +- 1st: "RDDLU". All five instructions can be executed while it stays in the grid and ends at (1, 1). +- 2nd: "DDLU". All four instructions can be executed while it stays in the grid and ends at (1, 0). +- 3rd: "DLU". All three instructions can be executed while it stays in the grid and ends at (0, 0). +- 4th: "LU". Only one instruction "L" can be executed before it moves off the grid. +- 5th: "U". If moving up, it would move off the grid. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./2.png) -### 思路1 -> ... -Execution of All Suffix Instructions Staying in a Grid -```go ``` +Input: n = 2, startPos = [1,1], s = "LURD" +Output: [4,1,0,0] +Explanation: +- 0th: "LURD". +- 1st: "URD". +- 2nd: "RD". +- 3rd: "D". +``` + +**Example 3:** + +![example3](./3.png) +``` +Input: n = 1, startPos = [0,0], s = "LRUD" +Output: [0,0,0,0] +Explanation: No matter which instruction the robot begins execution from, it would move off the grid. +``` ## 结语 diff --git a/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution.go b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution.go index d115ccf5e..583a60fd0 100644 --- a/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution.go +++ b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, startPos []int, s string) []int { + ans := make([]int, len(s)) + var steps func(int, int, int) int + + steps = func(x, y, index int) int { + ans := 0 + for i := index; i < len(s); i++ { + a, b := 0, 0 + if s[i] == 'L' { + a, b = 0, -1 + } else if s[i] == 'R' { + a, b = 0, 1 + } else if s[i] == 'U' { + a, b = -1, 0 + } else { + a, b = 1, 0 + } + nx, ny := x+a, y+b + if nx < 0 || nx >= n || ny < 0 || ny >= n { + return ans + } + x, y = nx, ny + ans++ + } + return ans + } + for i := 0; i < len(s); i++ { + ans[i] = steps(startPos[0], startPos[1], i) + } + return ans } diff --git a/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution_test.go b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution_test.go index 14ff50eb4..5fb77a9c6 100644 --- a/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution_test.go +++ b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution_test.go @@ -10,30 +10,32 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + pos []int + s string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, []int{0, 1}, "RRDDLU", []int{1, 5, 4, 3, 1, 0}}, + {"TestCase2", 2, []int{1, 1}, "LURD", []int{4, 1, 0, 0}}, + {"TestCase3", 1, []int{0, 0}, "LRUD", []int{0, 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.pos, 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", + c.expect, got, c.n, c.pos, c.s) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d160ccaac16cca2bbb69caea7c4c2ce274822c84 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 Oct 2023 23:22:20 +0800 Subject: [PATCH 016/253] Add solution and test-cases for problem 1458 --- .../README.md | 42 ++++++++++++++++++ .../Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 94 insertions(+), 12 deletions(-) create mode 100644 leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/README.md diff --git a/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/README.md b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/README.md new file mode 100644 index 000000000..482d3f8ed --- /dev/null +++ b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/README.md @@ -0,0 +1,42 @@ +# [1458. Max Dot Product of Two Subsequences][title] + +## Description +Given two arrays `nums1` and `nums2`. + +Return the maximum dot product between **non-empty** subsequences of nums1 and nums2 with the same length. + +A subsequence of a array is a new array which is formed from the original array by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, [`2,3,5`] is a subsequence of [`1,2,3,4,5`] while [`1,5,3`] is not). + +**Example 1:** + +``` +Input: nums1 = [2,1,-2,5], nums2 = [3,0,-6] +Output: 18 +Explanation: Take subsequence [2,-2] from nums1 and subsequence [3,-6] from nums2. +Their dot product is (2*3 + (-2)*(-6)) = 18. +``` + +**Example 2:** + +``` +Input: nums1 = [3,-2], nums2 = [2,-6,7] +Output: 21 +Explanation: Take subsequence [3] from nums1 and subsequence [7] from nums2. +Their dot product is (3*7) = 21. +``` + +**Example 3:** + +``` +Input: nums1 = [-1,-1], nums2 = [1,1] +Output: -1 +Explanation: Take subsequence [-1] from nums1 and subsequence [1] from nums2. +Their dot product is -1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/max-dot-product-of-two-subsequences +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution.go b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution.go index d115ccf5e..0428783b1 100755 --- a/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution.go +++ b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" +) + +func Solution(nums1 []int, nums2 []int) int { + l1, l2 := len(nums1), len(nums2) + dp := make([][]int, l1) + for i := 0; i < l1; i++ { + dp[i] = make([]int, l2) + for j := 0; j < l2; j++ { + dp[i][j] = math.MinInt + } + } + // -1, -1 + // 1, 1 + //bool是否确定返回的0是否是因为到了边界导致的, 上面的测试用例就是例子,应该返回-1,但是遇到了边界导致返回0,结果不对 + var dfs func(int, int) (int, bool) + dfs = func(i, j int) (int, bool) { + if i == l1 || j == l2 { + return 0, false + } + if dp[i][j] != math.MinInt { + return dp[i][j], true + } + a := nums1[i] * nums2[j] + + if b, ok := dfs(i+1, j+1); ok && b > 0 { + a += b + } + // 因为到了边界,返回的0,导致比-1大 + if c, ok := dfs(i, j+1); ok && c > a { + a = c + } + if d, ok := dfs(i+1, j); ok && d > a { + a = d + } + dp[i][j] = a + return a, true + } + + a, _ := dfs(0, 0) + return a } diff --git a/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution_test.go b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution_test.go index 14ff50eb4..44bf07059 100755 --- a/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution_test.go +++ b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution_test.go @@ -10,30 +10,30 @@ 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{2, 1, -2, 5}, []int{3, 0, -6}, 18}, + {"TestCase2", []int{3, -2}, []int{2, -6, 7}, 21}, + {"TestCase3", []int{-1, -1}, []int{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.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 c3f522a332251740ed778b0b67a603841f48f24c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 9 Oct 2023 22:59:33 +0800 Subject: [PATCH 017/253] Add solution and test-cases for problem 1358 --- .../README.md | 30 ++++--- .../Solution.go | 79 ++++++++++++++++++- .../Solution_test.go | 19 +++-- 3 files changed, 106 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/README.md b/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/README.md index d0c9b0bd0..355d0f2ed 100644 --- a/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/README.md +++ b/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/README.md @@ -1,28 +1,32 @@ # [1358.Number of Substrings Containing All Three 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 +Given a string s consisting only of characters a, b and c. + +Return the number of substrings containing **at least** one occurrence of all these characters a, b and c. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abcabc" +Output: 10 +Explanation: The substrings containing at least one occurrence of the characters a, b and c are "abc", "abca", "abcab", "abcabc", "bca", "bcab", "bcabc", "cab", "cabc" and "abc" (again). ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Substrings Containing All Three Characters -```go +``` +Input: s = "aaacb" +Output: 3 +Explanation: The substrings containing at least one occurrence of the characters a, b and c are "aaacb", "aacb" and "acb". ``` +**Example 3:** + +``` +Input: s = "abc" +Output: 1 +``` ## 结语 diff --git a/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/Solution.go b/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/Solution.go index d115ccf5e..92d561024 100644 --- a/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/Solution.go +++ b/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/Solution.go @@ -1,5 +1,80 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(s string) int { + need := [3][]int{} + for i := 0; i < 3; i++ { + need[i] = make([]int, 0) + } + ans := 0 + for i := len(s) - 1; i >= 0; i-- { + need[s[i]-'a'] = append(need[s[i]-'a'], i) + } + for end := len(s) - 1; end > 1; end-- { + if s[end] == 'a' { + i1 := sort.Search(len(need[1]), func(i int) bool { + return need[1][i] < end + }) + i2 := sort.Search(len(need[2]), func(i int) bool { + return need[2][i] < end + }) + if i1 != len(need[1]) && i2 != len(need[2]) { + x := need[1][i1] + if need[2][i2] < x { + x = need[2][i2] + } + ans += x + 1 + } + } + if s[end] == 'b' { + i1 := sort.Search(len(need[0]), func(i int) bool { + return need[0][i] < end + }) + i2 := sort.Search(len(need[2]), func(i int) bool { + return need[2][i] < end + }) + if i1 != len(need[0]) && i2 != len(need[2]) { + x := need[0][i1] + if need[2][i2] < x { + x = need[2][i2] + } + ans += x + 1 + } + + } + if s[end] == 'c' { + i1 := sort.Search(len(need[0]), func(i int) bool { + return need[0][i] < end + }) + i2 := sort.Search(len(need[1]), func(i int) bool { + return need[1][i] < end + }) + if i1 != len(need[0]) && i2 != len(need[1]) { + x := need[0][i1] + if need[1][i2] < x { + x = need[1][i2] + } + ans += x + 1 + } + } + } + return ans +} + +func Solution1(s string) int { + ans := 0 + + chars := [3]int{} + start := 0 + x := len(s) + for i := 0; i < x; i++ { + chars[s[i]-'a']++ + for chars[0] > 0 && chars[1] > 0 && chars[2] > 0 { + ans += x - i + chars[s[start]-'a']-- + start++ + } + } + return ans } diff --git a/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/Solution_test.go b/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/Solution_test.go index 14ff50eb4..fb36caa0c 100644 --- a/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/Solution_test.go +++ b/leetcode/1301-1400/1358.Number-of-Substrings-Containing-All-Three-Characters/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", "abcabc", 10}, + {"TestCase2", "aaacb", 3}, + {"TestCase3", "abc", 1}, } // 开始测试 @@ -26,14 +26,19 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got1 := Solution(c.inputs) + if !reflect.DeepEqual(got1, 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 e900ba11f63ea4844f0622369eff76613651aa5d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 11 Oct 2023 23:33:09 +0800 Subject: [PATCH 018/253] Add solution and test-cases for problem 2731 --- .../2731.Movement-of-Robots/README.md | 51 ++++++++++++++++ .../2731.Movement-of-Robots/Solution.go | 61 ++++++++++++++++++- .../2731.Movement-of-Robots/Solution_test.go | 21 ++++--- 3 files changed, 121 insertions(+), 12 deletions(-) create mode 100644 leetcode/2701-2800/2731.Movement-of-Robots/README.md diff --git a/leetcode/2701-2800/2731.Movement-of-Robots/README.md b/leetcode/2701-2800/2731.Movement-of-Robots/README.md new file mode 100644 index 000000000..52ab6e26a --- /dev/null +++ b/leetcode/2701-2800/2731.Movement-of-Robots/README.md @@ -0,0 +1,51 @@ +# [2731. Movement of Robots][title] + +## Description +Some robots are standing on an infinite number line with their initial coordinates given by a **0-indexed** integer array `nums` and will start moving once given the command to move. The robots will move a unit distance each second. + +You are given a string `s` denoting the direction in which robots will move on command. `'L'` means the robot will move towards the left side or negative side of the number line, whereas `'R'` means the robot will move towards the right side or positive side of the number line. + +If two robots collide, they will start moving in opposite directions. + +Return the sum of distances between all the pairs of robots `d` seconds after the command. Since the sum can be very large, return it modulo `10^9 + 7`. + +**Note:** + +- For two robots at the index `i` and `j`, pair (`i,j`) and pair (`j,i`) are considered the same pair. +- When robots collide, they **instantly change** their directions without wasting any time. +- Collision happens when two robots share the same place in a moment. + - For example, if a robot is positioned in 0 going to the right and another is positioned in 2 going to the left, the next second they'll be both in 1 and they will change direction and the next second the first one will be in 0, heading left, and another will be in 2, heading right. + - For example, if a robot is positioned in 0 going to the right and another is positioned in 1 going to the left, the next second the first one will be in 0, heading left, and another will be in 1, heading right. + +**Example 1:** + +``` +Input: nums = [-2,0,2], s = "RLL", d = 3 +Output: 8 +Explanation: +After 1 second, the positions are [-1,-1,1]. Now, the robot at index 0 will move left, and the robot at index 1 will move right. +After 2 seconds, the positions are [-2,0,0]. Now, the robot at index 1 will move left, and the robot at index 2 will move right. +After 3 seconds, the positions are [-3,-1,1]. +The distance between the robot at index 0 and 1 is abs(-3 - (-1)) = 2. +The distance between the robot at index 0 and 2 is abs(-3 - 1) = 4. +The distance between the robot at index 1 and 2 is abs(-1 - 1) = 2. +The sum of the pairs of all distances = 2 + 4 + 2 = 8. +``` + +**Example 2:** + +``` +Input: nums = [1,0], s = "RL", d = 2 +Output: 5 +Explanation: +After 1 second, the positions are [2,-1]. +After 2 seconds, the positions are [3,-2]. +The distance between the two robots is abs(-2 - 3) = 5. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/movement-of-robots +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2731.Movement-of-Robots/Solution.go b/leetcode/2701-2800/2731.Movement-of-Robots/Solution.go index d115ccf5e..24de3df63 100755 --- a/leetcode/2701-2800/2731.Movement-of-Robots/Solution.go +++ b/leetcode/2701-2800/2731.Movement-of-Robots/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +const mod2731 = 1000000007 + +func Solution(nums []int, s string, d int) int { + + length := len(nums) + for i := range nums { + if s[i] == 'R' { + nums[i] += d + continue + } + nums[i] -= d + } + sort.Ints(nums) + + sum := make([][]int, length) + for i := len(nums) - 1; i >= 0; i-- { + sum[i] = make([]int, 4) + if i == len(nums)-1 { + if nums[i] < 0 { + sum[i][0] = nums[i] + sum[i][1] = 1 + } else { + sum[i][2] = nums[i] + sum[i][3] = 1 + } + continue + } + if nums[i] < 0 { + sum[i][0] = sum[i+1][0] + nums[i] + sum[i][1] = sum[i+1][1] + 1 + sum[i][2] = sum[i+1][2] + sum[i][3] = sum[i+1][3] + } else { + sum[i][2] = sum[i+1][2] + nums[i] + sum[i][3] = sum[i+1][3] + 1 + sum[i][0] = sum[i+1][0] + sum[i][1] = sum[i+1][1] + } + } + ans := 0 + var a, b int + for i := 0; i < length-1; i++ { + a = nums[i]*sum[i+1][3] - sum[i+1][2] + b = nums[i]*sum[i+1][1] - sum[i+1][0] + if a < 0 { + a = -a + } + if b < 0 { + b = -b + } + a += b + + ans = (ans + a) % mod2731 + } + return ans } diff --git a/leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go b/leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go index 14ff50eb4..ee346b4c8 100755 --- a/leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go +++ b/leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + s string + d int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{-2, 0, 2}, "RLL", 3, 8}, + {"TestCase2", []int{1, -67, 68, -26, -13, -40, -56, 62, 21}, "LLLRLLRRR", 4, 2106}, } // 开始测试 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.s, 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.nums, c.s, c.d) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0fb4194f79946d1b92af19f2cee209ff9b473f73 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 12 Oct 2023 22:09:34 +0800 Subject: [PATCH 019/253] Add solution and test-cases for problem 1095 --- .../1095.Find-in-Mountain-Array/README.md | 39 ++++++---- .../1095.Find-in-Mountain-Array/Solution.go | 78 ++++++++++++++++++- .../Solution_test.go | 25 +++--- 3 files changed, 116 insertions(+), 26 deletions(-) diff --git a/leetcode/1001-1100/1095.Find-in-Mountain-Array/README.md b/leetcode/1001-1100/1095.Find-in-Mountain-Array/README.md index 519129520..588fc018e 100644 --- a/leetcode/1001-1100/1095.Find-in-Mountain-Array/README.md +++ b/leetcode/1001-1100/1095.Find-in-Mountain-Array/README.md @@ -1,28 +1,39 @@ # [1095.Find in 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 +(This problem is an **interactive problem**.) + +You may recall that an array `arr` is a **mountain array** if and only if: + +- `arr.length >= 3` +- There exists some `i` 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 a mountain array `mountainArr`, return the **minimum** index such that `mountainArr.get(index) == target`. If such an index does not exist, return `-1`. + +**You cannot access the mountain array directly**. You may only access the array using a `MountainArray` interface: + +- `MountainArray.get(k)` returns the element of the array at index `k` (0-indexed). +- `MountainArray.length()` returns the length of the array. + +Submissions making more than `100` calls to `MountainArray.get` will be judged Wrong Answer. Also, any solutions that attempt to circumvent the judge will result in disqualification. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: array = [1,2,3,4,5,3,1], target = 3 +Output: 2 +Explanation: 3 exists in the array, at index=2 and index=5. Return the minimum index, which is 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find in Mountain Array -```go ``` - +Input: array = [0,1,2,4,2,1], target = 3 +Output: -1 +Explanation: 3 does not exist in the array, so we return -1. +``` ## 结语 diff --git a/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution.go b/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution.go index d115ccf5e..50127df69 100644 --- a/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution.go +++ b/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution.go @@ -1,5 +1,79 @@ package Solution -func Solution(x bool) bool { - return x +type MountainArray struct { + data []int +} + +func (m *MountainArray) get(index int) int { + return m.data[index] +} +func (m *MountainArray) length() int { + return len(m.data) +} +func Solution(target int, mountainArr *MountainArray) int { + length := mountainArr.length() + l, r := 0, length-1 + // 二分找到index + top := 0 + for l < r { + mid := l + (r-l)/2 + if mid == 0 || mid == length-1 { + return -1 + } + a := mountainArr.get(mid - 1) + b := mountainArr.get(mid) + c := mountainArr.get(mid + 1) + if a < b && c < b { + top = mid + break + } + if a > b { + r = mid + continue + } + l = mid + 1 + } + //fmt.Printf("find top: %d\n", top) + // 二分搜索左侧 + + var ( + sl func(int, int, int) int + sr func(int, int, int) int + ) + sl = func(left, right, target int) int { + // 0, 1 + for left < right { + mid := left + (right-left)/2 + if r := mountainArr.get(mid); r == target { + return mid + } else if r < target { + left = mid + 1 + } else { + right = mid + } + } + return -1 + } + sr = func(left, right, target int) int { + for left < right { + mid := left + (right-left)/2 + if r := mountainArr.get(mid); r == target { + return mid + } else if r > target { + // 5, 4, 3, 2,1 + left = mid + 1 + } else { + right = mid + } + } + return -1 + + } + if r := sl(0, top+1, target); r != -1 { + return r + } + if r := sr(top, length, target); r != -1 { + return r + } + return -1 } diff --git a/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution_test.go b/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution_test.go index 14ff50eb4..aa6bdde3a 100644 --- a/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution_test.go +++ b/leetcode/1001-1100/1095.Find-in-Mountain-Array/Solution_test.go @@ -10,30 +10,35 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + m *MountainArray + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, &MountainArray{data: []int{1, 2, 3, 4, 5, 3, 1}}, 2}, + {"TestCase2", 3, &MountainArray{data: []int{0, 1, 2, 4, 2, 1}}, -1}, + {"TestCase3", 2, &MountainArray{data: []int{1, 2, 3, 4, 5, 3, 1}}, 1}, + {"TestCase4", 5, &MountainArray{data: []int{1, 5, 2}}, 1}, + {"TestCase5", 2, &MountainArray{data: []int{1, 5, 2}}, 2}, + {"TestCase6", 0, &MountainArray{data: []int{1, 2, 3, 5, 3}}, -1}, + {"TestCase7", 1, &MountainArray{data: []int{1, 2, 3, 5, 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.inputs, 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.inputs, c.m.data) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c40186b0116e09d7995fca0d3de98e582ad44682 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 15 Oct 2023 13:52:24 +0800 Subject: [PATCH 020/253] Add solution and test-cases for problem 1269 --- .../README.md | 36 ++++++++++------ .../Solution.go | 42 ++++++++++++++++++- .../Solution_test.go | 23 +++++----- 3 files changed, 75 insertions(+), 26 deletions(-) diff --git a/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/README.md b/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/README.md index 426a9f27a..c8711a063 100644 --- a/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/README.md +++ b/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/README.md @@ -1,28 +1,38 @@ # [1269.Number of Ways to Stay in the Same Place After Some 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 +You have a pointer at index `0` in an array of size `arrLen`. At each step, you can move 1 position to the left, 1 position to the right in the array, or stay in the same place (The pointer should not be placed outside the array at any time). + +Given two integers `steps` and `arrLen`, return the number of ways such that your pointer is still at index `0` after **exactly** steps steps. Since the answer may be too large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: steps = 3, arrLen = 2 +Output: 4 +Explanation: There are 4 differents ways to stay at index 0 after 3 steps. +Right, Left, Stay +Stay, Right, Left +Right, Stay, Left +Stay, Stay, Stay ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Ways to Stay in the Same Place After Some Steps -```go +``` +Input: steps = 2, arrLen = 4 +Output: 2 +Explanation: There are 2 differents ways to stay at index 0 after 2 steps +Right, Left +Stay, Stay ``` +**Example 3:** + +``` +Input: steps = 4, arrLen = 2 +Output: 8 +``` ## 结语 diff --git a/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution.go b/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution.go index d115ccf5e..127c0c1ac 100644 --- a/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution.go +++ b/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +const mod1269 = 1000000007 + +func Solution(steps int, arrLen int) int { + dp := make([][]int, arrLen) + if steps <= arrLen { + arrLen = steps + } + for i := 0; i < arrLen; i++ { + dp[i] = make([]int, steps+1) + } + for i := 0; i < arrLen; i++ { + for j := 0; j <= steps; j++ { + dp[i][j] = -1 + } + } + var dirs = []int{-1, 0, 1} + var dfs func(int, int) int + dfs = func(index, useSteps int) int { + if useSteps == 0 { + if index == 0 { + return 1 + } + return 0 + } + if index >= arrLen { + return 0 + } + if dp[index][useSteps] != -1 { + return dp[index][useSteps] + } + ans := 0 + for _, dir := range dirs { + if ni := index + dir; ni >= 0 { + ans = (ans + dfs(ni, useSteps-1)) % mod1269 + } + } + dp[index][useSteps] = ans + return ans + } + return dfs(0, steps) } diff --git a/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution_test.go b/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution_test.go index 14ff50eb4..7032bd75a 100644 --- a/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution_test.go +++ b/leetcode/1201-1300/1269.Number-of-Ways-to-Stay-in-the-Same-Place-After-Some-Steps/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + steps, arrLen int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 2, 4}, + {"TestCase2", 2, 4, 2}, + {"TestCase3", 4, 2, 8}, + {"TestCase4", 430, 148488, 525833932}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.steps, c.arrLen) 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.steps, c.arrLen) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3baa8dbeb75c9668d91a9d5c9937424222fd88ea Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 18 Oct 2023 21:18:39 +0800 Subject: [PATCH 021/253] Add solution and test-cases for problem 2050 --- .../2050.Parallel-Courses-III/README.md | 44 +++++++---- .../2050.Parallel-Courses-III/Solution.go | 73 +++++++++++++++++- .../Solution_test.go | 27 ++++--- .../2050.Parallel-Courses-III/ex1.png | Bin 0 -> 17123 bytes .../2050.Parallel-Courses-III/ex2.png | Bin 0 -> 28697 bytes 5 files changed, 118 insertions(+), 26 deletions(-) create mode 100644 leetcode/2001-2100/2050.Parallel-Courses-III/ex1.png create mode 100644 leetcode/2001-2100/2050.Parallel-Courses-III/ex2.png diff --git a/leetcode/2001-2100/2050.Parallel-Courses-III/README.md b/leetcode/2001-2100/2050.Parallel-Courses-III/README.md index 7bcddc210..08214c6a2 100755 --- a/leetcode/2001-2100/2050.Parallel-Courses-III/README.md +++ b/leetcode/2001-2100/2050.Parallel-Courses-III/README.md @@ -1,28 +1,44 @@ # [2050.Parallel Courses 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 `n`, which indicates that there are `n` courses labeled from `1` to `n`. You are also given a 2D integer array `relations` where `relations[j] = [prevCoursej, nextCoursej]` denotes that course `prevCoursej` has to be completed **before** course `nextCoursej` (prerequisite relationship). Furthermore, you are given a **0-indexed** integer array `time` where `time[i]` denotes how many **months** it takes to complete the (i+1)th course. + +You must find the **minimum** number of months needed to complete all the courses following these rules: + +- You may start taking a course at **any time** if the prerequisites are met. +- **Any number of courses** can be taken at the **same time**. + +Return the **minimum** number of months needed to complete all the courses. -**Example 1:** +**Note**: The test cases are generated such that it is possible to complete every course (i.e., the graph is a directed acyclic graph). + +**Example 1:** + +![example1](./ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, relations = [[1,3],[2,3]], time = [3,2,5] +Output: 8 +Explanation: The figure above represents the given graph and the time required to complete each course. +We start course 1 and course 2 simultaneously at month 0. +Course 1 takes 3 months and course 2 takes 2 months to complete respectively. +Thus, the earliest time we can start course 3 is at month 3, and the total time required is 3 + 5 = 8 months. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./ex2.png) -### 思路1 -> ... -Parallel Courses III -```go ``` - +Input: n = 5, relations = [[1,5],[2,5],[3,5],[3,4],[4,5]], time = [1,2,3,4,5] +Output: 12 +Explanation: The figure above represents the given graph and the time required to complete each course. +You can start courses 1, 2, and 3 at month 0. +You can complete them after 1, 2, and 3 months respectively. +Course 4 can be taken only after course 3 is completed, i.e., after 3 months. It is completed after 3 + 4 = 7 months. +Course 5 can be taken only after courses 1, 2, 3, and 4 have been completed, i.e., after max(1,2,3,7) = 7 months. +Thus, the minimum time needed to complete all the courses is 7 + 5 = 12 months. +``` ## 结语 diff --git a/leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go index d115ccf5e..9d4f89d87 100644 --- a/leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go +++ b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go @@ -1,5 +1,76 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type courses [][2]int + +func (c *courses) Len() int { + return len(*c) +} + +func (c *courses) Less(i, j int) bool { + return (*c)[i][1] < (*c)[j][1] +} + +func (c *courses) Swap(i, j int) { + (*c)[i], (*c)[j] = (*c)[j], (*c)[i] +} + +func (c *courses) Push(x interface{}) { + *c = append(*c, x.([2]int)) +} + +func (c *courses) Pop() interface{} { + old := *c + l := len(old) + x := old[l-1] + *c = old[:l-1] return x } + +func Solution(n int, relations [][]int, time []int) int { + cost := 0 + in := make(map[int]int) + unlockCourses := make(map[int][]int) + for _, rel := range relations { + pre, next := rel[0], rel[1] + in[next]++ + if _, ok := unlockCourses[pre]; !ok { + unlockCourses[pre] = make([]int, 0) + } + unlockCourses[pre] = append(unlockCourses[pre], next) + } + queue := courses{} + for i := 1; i <= n; i++ { + if in[i] == 0 { + heap.Push(&queue, [2]int{i, time[i-1]}) + } + } + for len(queue) > 0 { + top := heap.Pop(&queue).([2]int) + endCourse := make(map[int]struct{}) + endCourse[top[0]] = struct{}{} + for len(queue) > 0 { + x := heap.Pop(&queue).([2]int) + if x[1] != top[1] { + heap.Push(&queue, x) + break + } + endCourse[x[0]] = struct{}{} + } + for i := 0; i < len(queue); i++ { + queue[i][1] -= top[1] + } + + cost += top[1] + for ec := range endCourse { + for _, next := range unlockCourses[ec] { + in[next]-- + if in[next] == 0 { + heap.Push(&queue, [2]int{next, time[next-1]}) + } + } + } + } + return cost +} diff --git a/leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go index 14ff50eb4..93d889c98 100644 --- a/leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go +++ b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go @@ -9,31 +9,36 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + relations [][]int + time []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{ + {1, 3}, {2, 3}, + }, []int{3, 2, 5}, 8}, + {"TestCase2", 5, [][]int{ + {1, 5}, {2, 5}, {3, 5}, {3, 4}, {4, 5}, + }, []int{1, 2, 3, 4, 5}, 12}, } // 开始测试 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.relations, c.time) 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.relations, c.time) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2001-2100/2050.Parallel-Courses-III/ex1.png b/leetcode/2001-2100/2050.Parallel-Courses-III/ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..4c48c4b166254de5635006f6d14ac1461218e121 GIT binary patch literal 17123 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%0An-TL0V#(={c?0ZKyrS6RiQgWqFk2XhZ%)?@F! z;EGW<1Gkm$D0{MGjybV!_MN|*zIpXZ>E$an?fapB+V2S4bS1AV@p^$`!Uv~$sv5Or z&;KMziWlv^hC5Hbfk!j?(x{wP6nS{iZgc5Qez|I$oe~~4W`{X&Z#93yJXAXMOzL39 zOX6&A-#Hcs=TIWZABuP4;m|{7ACv$CB<9z7%-RA>GOkt9Yv4#xoKAD6PMM=ra_1Lro zm#g;+Az@G%-nEx6pL@prYMLqiAi4a9Xt9eeDL%$>WAbg_uZntBd!H9X_^cmSm`ueQ z@eYvU3}xg5CNbVIW6`oF zx^&;g@yDf6Q-kFoca*bI(;)`Tk#?#bazK)YCEHi*QE>UVa0=+a%0Ae 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 literal 0 HcmV?d00001 From bc4e87b1a17b4106e34ee5c62a100d75355ba55a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 18 Oct 2023 21:34:36 +0800 Subject: [PATCH 022/253] Add solution and test-cases for problem 2530 --- .../README.md | 41 +++++++++++++++++ .../Solution.go | 45 ++++++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 95 insertions(+), 11 deletions(-) create mode 100755 leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/README.md diff --git a/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/README.md b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/README.md new file mode 100755 index 000000000..3d468a260 --- /dev/null +++ b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/README.md @@ -0,0 +1,41 @@ +# [2530.Maximal Score After Applying K Operations][title] + +## Description +You are given a **0-indexed** integer array `nums` and an integer `k`. You have a **starting score** of `0`. + +In one **operation**: + +- choose an index `i` such that `0 <= i < nums.length`, +- increase your **score** by `nums[i]`, and +- replace `nums[i]` with `ceil(nums[i] / 3)`. + +Return the maximum possible **score** you can attain after applying **exactly** `k` operations. + +The ceiling function `ceil(val)` is the least integer greater than or equal to `val`. + +**Example 1:** + +``` +Input: nums = [10,10,10,10,10], k = 5 +Output: 50 +Explanation: Apply the operation to each array element exactly once. The final score is 10 + 10 + 10 + 10 + 10 = 50. +``` + +**Example 2:** + +``` +Input: nums = [1,10,3,3,3], k = 3 +Output: 17 +Explanation: You can do the following operations: +Operation 1: Select i = 1, so nums becomes [1,4,3,3,3]. Your score increases by 10. +Operation 2: Select i = 1, so nums becomes [1,2,3,3,3]. Your score increases by 4. +Operation 3: Select i = 2, so nums becomes [1,1,1,3,3]. Your score increases by 3. +The final score is 10 + 4 + 3 = 17. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximal-score-after-applying-k-operations +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go index d115ccf5e..746018f2d 100755 --- a/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go +++ b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type i64score []int64 + +func (i *i64score) Len() int { + return len(*i) +} + +func (ii *i64score) Less(i, j int) bool { + return (*ii)[i] > (*ii)[j] +} + +func (ii *i64score) Swap(i, j int) { + (*ii)[i], (*ii)[j] = (*ii)[j], (*ii)[i] +} + +func (i *i64score) Push(x interface{}) { + *i = append(*i, x.(int64)) +} + +func (i *i64score) Pop() interface{} { + old := *i + l := len(old) + x := old[l-1] + *i = old[:l-1] return x } + +func Solution(nums []int, k int) int64 { + pq := i64score{} + for _, n := range nums { + heap.Push(&pq, int64(n)) + } + ans := int64(0) + for k > 0 && len(pq) > 0 { + top := heap.Pop(&pq).(int64) + ans += top + a := top / 3 + if top%3 != 0 { + a++ + } + heap.Push(&pq, a) + k-- + } + return ans +} diff --git a/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution_test.go b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution_test.go index 14ff50eb4..d30e670a7 100755 --- a/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution_test.go +++ b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + num []int + k int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{10, 10, 10, 10, 10}, 5, 50}, + {"TestCase2", []int{1, 10, 3, 3, 3}, 3, 17}, } // 开始测试 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.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.num, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c1cc2586fc54ac895127684165e2b8d63feb885c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 19 Oct 2023 23:13:30 +0800 Subject: [PATCH 023/253] Add solution and test-cases for problem 2442 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 16 +++++++++- .../Solution_test.go | 13 ++++---- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/README.md b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/README.md index 6b4e36963..a2ed710e3 100755 --- a/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/README.md +++ b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/README.md @@ -1,28 +1,30 @@ # [2442.Count Number of Distinct Integers After Reverse 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 array `nums` consisting of **positive** integers. + +You have to take each integer in the array, **reverse its digits**, and add it to the end of the array. You should apply this operation to the original integers in `nums`. + +Return the number of **distinct** integers in the final array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,13,10,12,31] +Output: 6 +Explanation: After including the reverse of each number, the resulting array is [1,13,10,12,31,1,31,1,21,13]. +The reversed integers that were added to the end of the array are underlined. Note that for the integer 10, after reversing it, it becomes 01 which is just 1. +The number of distinct integers in this array is 6 (The numbers 1, 10, 12, 13, 21, and 31). ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Number of Distinct Integers After Reverse Operations -```go ``` - +Input: nums = [2,2,2] +Output: 1 +Explanation: After including the reverse of each number, the resulting array is [2,2,2,2,2,2]. +The number of distinct integers in this array is 1 (The number 2). +``` ## 结语 diff --git a/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution.go b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution.go index d115ccf5e..2fd2159fe 100644 --- a/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution.go +++ b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { +func rev(n int) int { + x := 0 + for n > 0 { + digit := n % 10 + n /= 10 + x = x*10 + digit + } return x } +func Solution(nums []int) int { + set := make(map[int]struct{}) + for _, n := range nums { + set[n] = struct{}{} + set[rev(n)] = struct{}{} + } + return len(set) +} diff --git a/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution_test.go b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution_test.go index 14ff50eb4..1462fcdc8 100644 --- a/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution_test.go +++ b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/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, 13, 10, 12, 31}, 6}, + {"TestCase2", []int{2, 2, 2}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 420782bd9bf4e97f424738a669ab274e3c3d3df4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 21 Oct 2023 15:55:02 +0800 Subject: [PATCH 024/253] Add solution and test-cases for problem 1343 --- .../README.md | 23 ++++++++----------- .../Solution.go | 22 ++++++++++++++++-- .../Solution_test.go | 22 +++++++++--------- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/README.md b/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/README.md index 590d4a9ca..9a6d3c4fe 100644 --- a/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/README.md +++ b/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/README.md @@ -1,28 +1,23 @@ # [1343.Number of Sub-arrays of Size K and Average Greater than or Equal to 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 `arr` and two integers k and `threshold`, return the number of sub-arrays of size `k` and average greater than or equal to `threshold`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [2,2,2,2,5,5,5,8], k = 3, threshold = 4 +Output: 3 +Explanation: Sub-arrays [2,5,5],[5,5,5] and [5,5,8] have averages 4, 5 and 6 respectively. All other sub-arrays of size 3 have averages less than 4 (the threshold). ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold -```go ``` - +Input: arr = [11,13,17,23,29,31,7,5,2,3], k = 3, threshold = 5 +Output: 6 +Explanation: The first 6 sub-arrays of size 3 have averages greater than 5. Note that averages are not integers. +``` ## 结语 diff --git a/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/Solution.go b/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/Solution.go index d115ccf5e..cb92063b6 100644 --- a/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/Solution.go +++ b/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, k int, threshold int) int { + ans := 0 + sum := 0 + for i := 0; i < k; i++ { + sum += arr[i] + } + if sum/k >= threshold { + ans++ + } + start := 0 + // 1, 2, 3 + for i := k; i < len(arr); i++ { + sum -= arr[start] + sum += arr[i] + if sum/k >= threshold { + ans++ + } + start++ + } + return ans } diff --git a/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/Solution_test.go b/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/Solution_test.go index 14ff50eb4..b4edab660 100644 --- a/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-than-or-Equal-to-Threshold/Solution_test.go +++ b/leetcode/1301-1400/1343.Number-of-Sub-arrays-of-Size-K-and-Average-Greater-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 + k, threshold int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 2, 2, 2, 5, 5, 5, 8}, 3, 4, 3}, + {"TestCase2", []int{11, 13, 17, 23, 29, 31, 7, 5, 2, 3}, 3, 5, 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, 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 %v", + c.expect, got, c.inputs, c.k, c.threshold) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ab1cefa871fee0f0f5dce6a7d7e7b9c66dcae87c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 22 Oct 2023 15:02:36 +0800 Subject: [PATCH 025/253] Add solution and test-cases for problem 1793 --- .../README.md | 27 ++++++------ .../Solution.go | 41 ++++++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 62 insertions(+), 26 deletions(-) diff --git a/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/README.md b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/README.md index 54fca1c71..1a2ccffbe 100755 --- a/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/README.md +++ b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/README.md @@ -1,28 +1,27 @@ # [1793.Maximum Score of a Good 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 (**0-indexed**) and an integer `k`. + +The **score** of a subarray `(i, j)` is defined as `min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1)`. A **good** subarray is a subarray where `i <= k <= j`. + +Return the maximum possible **score** of a **good** subarray. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,4,3,7,4,5], k = 3 +Output: 15 +Explanation: The optimal subarray is (1, 5) with a score of min(4,3,7,4,5) * (5-1+1) = 3 * 5 = 15. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Score of a Good Subarray -```go ``` - +Input: nums = [5,5,4,5,4,1,1,1], k = 0 +Output: 20 +Explanation: The optimal subarray is (0, 4) with a score of min(5,5,4,5,4) * (4-0+1) = 4 * 5 = 20. +``` ## 结语 diff --git a/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution.go b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution.go index d115ccf5e..1d82d59ca 100644 --- a/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution.go +++ b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) int { + l := len(nums) + minArr := make([]int, l) + minArr[k] = nums[k] + for i := k - 1; i >= 0; i-- { + if nums[i] > minArr[i+1] { + minArr[i] = minArr[i+1] + } else { + minArr[i] = nums[i] + } + } + for j := k + 1; j < l; j++ { + if nums[j] > minArr[j-1] { + minArr[j] = minArr[j-1] + } else { + minArr[j] = nums[j] + } + } + + ans := -1 + for i := 0; i <= k; i++ { + if i > 0 && minArr[i] == minArr[i-1] { + continue + } + for j := l - 1; j >= k; j-- { + if j < k-1 && minArr[j] == minArr[j+1] { + continue + } + a := minArr[i] + b := minArr[j] + if b < a { + a = b + } + if r := a * (j - i + 1); ans == -1 || r > ans { + ans = r + } + } + } + return ans } diff --git a/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution_test.go b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution_test.go index 14ff50eb4..c0031c765 100644 --- a/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution_test.go +++ b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/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, 4, 3, 7, 4, 5}, 3, 15}, + {"TestCase2", []int{5, 5, 4, 5, 4, 1, 1, 1}, 0, 20}, } // 开始测试 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 1485956f68fd65addf65d8825b93b1affc8eaac7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 23 Oct 2023 21:37:05 +0800 Subject: [PATCH 026/253] Add solution and test-cases for problem 1202 --- .../1202.Smallest-String-With-Swaps/README.md | 41 +++++++++---- .../Solution.go | 59 ++++++++++++++++++- .../Solution_test.go | 25 ++++---- 3 files changed, 101 insertions(+), 24 deletions(-) diff --git a/leetcode/1201-1300/1202.Smallest-String-With-Swaps/README.md b/leetcode/1201-1300/1202.Smallest-String-With-Swaps/README.md index c42191129..fd3947182 100644 --- a/leetcode/1201-1300/1202.Smallest-String-With-Swaps/README.md +++ b/leetcode/1201-1300/1202.Smallest-String-With-Swaps/README.md @@ -1,28 +1,43 @@ # [1202.Smallest String With Swaps][title] -> [!WARNING|style:flat] -> 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 array of pairs of indices in the string `pairs` where `pairs[i] = [a, b]` indicates 2 indices(0-indexed) of the string. + +You can swap the characters at any pair of indices in the given `pairs` **any number of times**. + +Return the lexicographically smallest string that `s` can be changed to after using the swaps. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "dcab", pairs = [[0,3],[1,2]] +Output: "bacd" +Explaination: +Swap s[0] and s[3], s = "bcad" +Swap s[1] and s[2], s = "bacd" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Smallest String With Swaps -```go ``` +Input: s = "dcab", pairs = [[0,3],[1,2],[0,2]] +Output: "abcd" +Explaination: +Swap s[0] and s[3], s = "bcad" +Swap s[0] and s[2], s = "acbd" +Swap s[1] and s[2], s = "abcd" +``` + +**Example 3:** +``` +Input: s = "cba", pairs = [[0,1],[1,2]] +Output: "abc" +Explaination: +Swap s[0] and s[1], s = "bca" +Swap s[1] and s[2], s = "bac" +Swap s[0] and s[1], s = "abc" +``` ## 结语 diff --git a/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution.go b/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution.go index d115ccf5e..661c3595f 100644 --- a/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution.go +++ b/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { +type unionFind1202 struct { + fatehr []int +} + +func (u *unionFind1202) findFather(x int) int { + if u.fatehr[x] != x { + u.fatehr[x] = u.findFather(u.fatehr[x]) + } + return u.fatehr[x] +} +func (u *unionFind1202) union(x, y int) { + fx := u.findFather(x) + fy := u.findFather(y) + if fx < fy { + u.fatehr[fy] = fx + } else { + u.fatehr[fx] = fy + } +} + +type stroe1202 struct { + bytes [26]int + index int +} + +func (s *stroe1202) selectByte() byte { + for s.bytes[s.index] == 0 { + s.index++ + } + x := uint8(s.index) + 'a' + s.bytes[s.index]-- return x } + +func Solution(s string, pairs [][]int) string { + bs := []byte(s) + u := &unionFind1202{fatehr: make([]int, len(s))} + for i := 0; i < len(s); i++ { + u.fatehr[i] = i + } + for _, pair := range pairs { + u.union(pair[0], pair[1]) + } + + children := make(map[int]*stroe1202) + for idx := 0; idx < len(s); idx++ { + fidx := u.findFather(idx) + if _, ok := children[fidx]; !ok { + children[fidx] = &stroe1202{bytes: [26]int{}, index: 0} + } + children[fidx].bytes[bs[idx]-'a']++ + } + + for idx := 0; idx < len(bs); idx++ { + fidx := u.findFather(idx) + bs[idx] = children[fidx].selectByte() + } + + return string(bs) +} diff --git a/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution_test.go b/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution_test.go index 14ff50eb4..7c482603d 100644 --- a/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution_test.go +++ b/leetcode/1201-1300/1202.Smallest-String-With-Swaps/Solution_test.go @@ -10,30 +10,35 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + pairs [][]int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "dcab", [][]int{{0, 3}, {1, 2}}, "bacd"}, + {"TestCase2", "dcab", [][]int{ + {0, 3}, {1, 2}, {0, 2}, + }, "abcd"}, + {"TestCase3", "cba", [][]int{ + {0, 1}, {1, 2}, + }, "abc"}, } // 开始测试 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.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", + c.expect, got, c.inputs, c.pairs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From aaba7e47423ae8ffc1bde21ea244f9bba4a1cdd8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 24 Oct 2023 22:11:59 +0800 Subject: [PATCH 027/253] Add solution and test-cases for problem 684 --- .../0684.Redundant-Connection/README.md | 29 +++++++------ .../0684.Redundant-Connection/Solution.go | 40 +++++++++++++++++- .../Solution_test.go | 17 +++++--- .../reduntant1-1-graph.jpeg | Bin 0 -> 6938 bytes .../reduntant1-2-graph.jpeg | Bin 0 -> 9741 bytes 5 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 leetcode/601-700/0684.Redundant-Connection/reduntant1-1-graph.jpeg create mode 100644 leetcode/601-700/0684.Redundant-Connection/reduntant1-2-graph.jpeg diff --git a/leetcode/601-700/0684.Redundant-Connection/README.md b/leetcode/601-700/0684.Redundant-Connection/README.md index 6144aa3b7..3e703b9dd 100644 --- a/leetcode/601-700/0684.Redundant-Connection/README.md +++ b/leetcode/601-700/0684.Redundant-Connection/README.md @@ -1,28 +1,29 @@ # [684.Redundant Connection][title] -> [!WARNING|style:flat] -> 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 this problem, a tree is an **undirected graph** that is connected and has no cycles. + +You are given a graph that started as a tree with `n` nodes labeled from `1` to `n`, with one additional edge added. The added edge has two **different** vertices chosen from `1` to `n`, and was not an edge that already existed. The graph is represented as an array `edges` of length `n` where `edges[i] = [ai, bi]` indicates that there is an edge between nodes ai and bi in the graph. + +Return an edge that can be removed so that the resulting graph is a tree of `n` nodes. If there are multiple answers, return the answer that occurs last in the input. -**Example 1:** +**Example 1:** + +![example1](./reduntant1-1-graph.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: edges = [[1,2],[1,3],[2,3]] +Output: [2,3] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./reduntant1-2-graph.jpeg) -### 思路1 -> ... -Redundant Connection -```go ``` - +Input: edges = [[1,2],[2,3],[3,4],[1,4],[1,5]] +Output: [1,4] +``` ## 结语 diff --git a/leetcode/601-700/0684.Redundant-Connection/Solution.go b/leetcode/601-700/0684.Redundant-Connection/Solution.go index d115ccf5e..d17bdc50c 100644 --- a/leetcode/601-700/0684.Redundant-Connection/Solution.go +++ b/leetcode/601-700/0684.Redundant-Connection/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +type unionFind684 struct { + father []int +} + +func (u *unionFind684) findFather(x int) int { + if u.father[x] != x { + u.father[x] = u.findFather(u.father[x]) + } + return u.father[x] +} + +func (u *unionFind684) union(fx, fy int) { + if fx < fy { + u.father[fy] = fx + } else { + u.father[fx] = fy + } +} + +func Solution(edges [][]int) []int { + n := len(edges) + u := unionFind684{father: make([]int, n+1)} + ans := make([]int, 2) + for i := 1; i <= n; i++ { + u.father[i] = i + } + for _, edge := range edges { + from, to := edge[0], edge[1] + ff, ft := u.findFather(from), u.findFather(to) + if ff == ft { + ans[0] = from + ans[1] = to + continue + } + u.union(ff, ft) + } + + return ans } diff --git a/leetcode/601-700/0684.Redundant-Connection/Solution_test.go b/leetcode/601-700/0684.Redundant-Connection/Solution_test.go index 14ff50eb4..5b29d7040 100644 --- a/leetcode/601-700/0684.Redundant-Connection/Solution_test.go +++ b/leetcode/601-700/0684.Redundant-Connection/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}, {1, 3}, {2, 3}, + }, []int{2, 3}}, + {"TestCase2", [][]int{ + {1, 2}, {2, 3}, {3, 4}, {1, 4}, {1, 5}, + }, []int{1, 4}}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0684.Redundant-Connection/reduntant1-1-graph.jpeg b/leetcode/601-700/0684.Redundant-Connection/reduntant1-1-graph.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5baf163b102b4ec0419c1e65ea31d101d9c711d0 GIT binary patch literal 6938 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0684.Redundant-Connection/reduntant1-2-graph.jpeg b/leetcode/601-700/0684.Redundant-Connection/reduntant1-2-graph.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..72d729161c6d632e11aeafa2ebb0dc6a93409836 GIT binary patch literal 9741 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 Date: Wed, 25 Oct 2023 22:02:07 +0800 Subject: [PATCH 028/253] Add solution and test-cases for problem 779 --- .../0779.K-th-Symbol-in-Grammar/README.md | 37 ++++++++++++------- .../0779.K-th-Symbol-in-Grammar/Solution.go | 33 ++++++++++++++++- .../Solution_test.go | 21 ++++++----- 3 files changed, 66 insertions(+), 25 deletions(-) diff --git a/leetcode/701-800/0779.K-th-Symbol-in-Grammar/README.md b/leetcode/701-800/0779.K-th-Symbol-in-Grammar/README.md index 55057be33..7400c8c00 100644 --- a/leetcode/701-800/0779.K-th-Symbol-in-Grammar/README.md +++ b/leetcode/701-800/0779.K-th-Symbol-in-Grammar/README.md @@ -1,28 +1,39 @@ # [779.K-th Symbol in Grammar][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +We build a table of `n` rows (**1-indexed**). We start by writing `0` in the 1st row. Now in every subsequent row, we look at the previous row and replace each occurrence of `0` with `01`, and each occurrence of `1` with `10`. + +- For example, for `n = 3`, the 1st row is `0`, the 2nd row is `01`, and the 3rd row is `0110`. + +Given two integer `n` and `k`, return the kth (**1-indexed**) symbol in the nth row of a table of `n` rows. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 1, k = 1 +Output: 0 +Explanation: row 1: 0 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -K-th Symbol in Grammar -```go ``` +Input: n = 2, k = 1 +Output: 0 +Explanation: +row 1: 0 +row 2: 01 +``` + +**Example 3:** +``` +Input: n = 2, k = 2 +Output: 1 +Explanation: +row 1: 0 +row 2: 01 +``` ## 结语 diff --git a/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution.go b/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution.go index d115ccf5e..2825a202b 100644 --- a/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution.go +++ b/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +/* +0 +0 1 +0 1 1 0 +0 1 1 0 1 0 0 1 +1 2 3 4 5 6 7 8 +*/ +func Solution(n int, k int) int { + nn := n + path := make([]int, 0) + for nn > 0 { + path = append(path, k) + if k&1 == 1 { + k++ + } + k /= 2 + nn-- + } + ans := 0 + for i := len(path) - 2; i >= 0; i-- { + a, b := 0, 1 + if ans != 0 { + a, b = 1, 0 + } + if path[i] == path[i+1]*2 { + ans = b + continue + } + ans = a + } + return ans } diff --git a/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution_test.go b/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution_test.go index 14ff50eb4..800b21d93 100644 --- a/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution_test.go +++ b/leetcode/701-800/0779.K-th-Symbol-in-Grammar/Solution_test.go @@ -10,30 +10,31 @@ 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", 1, 1, 0}, + {"TestCase2", 2, 1, 0}, + {"TestCase3", 2, 2, 1}, + {"TestCase4", 28, 472, 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 89ee25617b3410210e79a5078367a41e8c483a12 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 26 Oct 2023 22:19:36 +0800 Subject: [PATCH 029/253] Add solution and test-cases for problem 823 --- .../0823.Binary-Trees-With-Factors/README.md | 27 ++++++++--------- .../Solution.go | 30 +++++++++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/leetcode/801-900/0823.Binary-Trees-With-Factors/README.md b/leetcode/801-900/0823.Binary-Trees-With-Factors/README.md index c4f599d87..14efe3ba6 100644 --- a/leetcode/801-900/0823.Binary-Trees-With-Factors/README.md +++ b/leetcode/801-900/0823.Binary-Trees-With-Factors/README.md @@ -1,28 +1,27 @@ # [823.Binary Trees With Factors][title] -> [!WARNING|style:flat] -> 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 unique integers, `arr`, where each integer `arr[i]` is strictly greater than `1`. + +We make a binary tree using these integers, and each number may be used for any number of times. Each non-leaf node's value should be equal to the product of the values of its children. + +Return the number of binary trees we can make. The answer may be too large so return the answer **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [2,4] +Output: 3 +Explanation: We can make these trees: [2], [4], [4, 2, 2] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Binary Trees With Factors -```go ``` - +Input: arr = [2,4,5,10] +Output: 7 +Explanation: We can make these trees: [2], [4], [5], [10], [4, 2, 2], [10, 2, 5], [10, 5, 2]. +``` ## 结语 diff --git a/leetcode/801-900/0823.Binary-Trees-With-Factors/Solution.go b/leetcode/801-900/0823.Binary-Trees-With-Factors/Solution.go index d115ccf5e..c7e19f129 100644 --- a/leetcode/801-900/0823.Binary-Trees-With-Factors/Solution.go +++ b/leetcode/801-900/0823.Binary-Trees-With-Factors/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +const mod823 = 1000000007 + +func Solution(arr []int) int { + ans := 0 + set := make(map[uint64]int) + for _, n := range arr { + set[uint64(n)] = 1 + } + sort.Ints(arr) + for i := 1; i < len(arr); i++ { + for j := i - 1; j >= 0; j-- { + if arr[i]%arr[j] == 0 { + tmp := uint64(arr[i]) / uint64(arr[j]) + if count, ok := set[tmp]; ok { + a := set[uint64(arr[j])] + set[uint64(arr[i])] += (a * count) % mod823 + } + } + } + } + for _, c := range set { + ans = (ans + c) % mod823 + } + return ans } diff --git a/leetcode/801-900/0823.Binary-Trees-With-Factors/Solution_test.go b/leetcode/801-900/0823.Binary-Trees-With-Factors/Solution_test.go index 14ff50eb4..f0243ad63 100644 --- a/leetcode/801-900/0823.Binary-Trees-With-Factors/Solution_test.go +++ b/leetcode/801-900/0823.Binary-Trees-With-Factors/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, 4}, 3}, + {"TestCase2", []int{2, 4, 5, 10}, 7}, + {"TestCase3", []int{2, 4, 5, 10, 100}, 17}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ea23e24285bce30fa6f8a71af32d10f17705554d Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 28 Oct 2023 09:43:30 +0800 Subject: [PATCH 030/253] opt some dir --- go.mod | 35 +++---- go.sum | 97 ++++++++----------- .../Solution.go | 0 .../Solution_test.go | 0 .../2664.The-Knight-Tour/Solution.go | 0 .../2664.The-Knight-Tour/Solution_test.go | 0 .../Solution.go | 0 .../Solution_test.go | 0 8 files changed, 56 insertions(+), 76 deletions(-) rename "leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution.go" => leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution.go (100%) rename "leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution_test.go" => leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution_test.go (100%) rename "leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution.go" => leetcode/2601-2700/2664.The-Knight-Tour/Solution.go (100%) rename "leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution_test.go" => leetcode/2601-2700/2664.The-Knight-Tour/Solution_test.go (100%) rename "leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution.go" => leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-Binary-Tree/Solution.go (100%) rename "leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution_test.go" => leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-Binary-Tree/Solution_test.go (100%) diff --git a/go.mod b/go.mod index 67afdb964..5b81deda8 100644 --- a/go.mod +++ b/go.mod @@ -3,33 +3,34 @@ module awesome-golang-algorithm go 1.21 require ( - github.com/imroc/req/v3 v3.41.6 - github.com/stretchr/testify v1.7.0 + github.com/imroc/req/v3 v3.42.1 + github.com/stretchr/testify v1.8.4 ) require ( - github.com/andybalholm/brotli v1.0.5 // indirect + github.com/andybalholm/brotli v1.0.6 // indirect + github.com/cloudflare/circl v1.3.6 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/gaukas/godicttls v0.0.4 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect - github.com/golang/mock v1.6.0 // indirect - github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17 // indirect + github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/compress v1.17.2 // indirect github.com/kr/pretty v0.1.0 // indirect - github.com/onsi/ginkgo/v2 v2.11.0 // indirect + github.com/onsi/ginkgo/v2 v2.13.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/qtls-go1-20 v0.3.2 // indirect - github.com/quic-go/quic-go v0.37.4 // indirect - github.com/refraction-networking/utls v1.4.3 // indirect - golang.org/x/crypto v0.12.0 // indirect - golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect - golang.org/x/tools v0.12.0 // indirect + github.com/quic-go/qtls-go1-20 v0.4.1 // indirect + github.com/quic-go/quic-go v0.39.3 // indirect + github.com/refraction-networking/utls v1.5.4 // indirect + go.uber.org/mock v0.3.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/mod v0.13.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.14.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 4b7c9837f..075afbc1d 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ -github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= -github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= +github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= +github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -9,83 +11,60 @@ github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17 h1:0h35ESZ02+hN/MFZb7XZOXg+Rl9+Rk8fBIf5YLws9gA= -github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA= +github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b h1:RMpPgZTSApbPf7xaVel+QkoGPRLFLrwFO89uDUHEGf0= +github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= 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.41.6 h1:6plc4nRryRQh9vw16vAdysAZoF9m6h/V9TtdHIIWLyo= -github.com/imroc/req/v3 v3.41.6/go.mod h1:JxpRRITYTOcuqQJxHSPVvEKhAL9ayo7BpUXHbL2T5IE= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/imroc/req/v3 v3.42.1 h1:g82SouLvX7pqwqJjpQJYrVvuI+LOycWhyuwxtLlyQJk= +github.com/imroc/req/v3 v3.42.1/go.mod h1:W7dOrfQORA9nFoj+CafIZ6P5iyk+rWdbp2sffOAvABU= +github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= +github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= 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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= -github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= -github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= +github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= 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/qtls-go1-20 v0.3.2 h1:rRgN3WfnKbyik4dBV8A6girlJVxGand/d+jVKbQq5GI= -github.com/quic-go/qtls-go1-20 v0.3.2/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -github.com/quic-go/quic-go v0.37.4 h1:ke8B73yMCWGq9MfrCCAw0Uzdm7GaViC3i39dsIdDlH4= -github.com/quic-go/quic-go v0.37.4/go.mod h1:YsbH1r4mSHPJcLF4k4zruUkLBqctEMBDR6VPvcYjIsU= -github.com/refraction-networking/utls v1.4.3 h1:BdWS3BSzCwWCFfMIXP3mjLAyQkdmog7diaD/OqFbAzM= -github.com/refraction-networking/utls v1.4.3/go.mod h1:4u9V/awOSBrRw6+federGmVJQfPtemEqLBXkML1b0bo= +github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= +github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= +github.com/quic-go/quic-go v0.39.3 h1:o3YB6t2SR+HU/pgwF29kJ6g4jJIJEwEZ8CKia1h1TKg= +github.com/quic-go/quic-go v0.39.3/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= +github.com/refraction-networking/utls v1.5.4 h1:9k6EO2b8TaOGsQ7Pl7p9w6PUhx18/ZCeT0WNTZ7Uw4o= +github.com/refraction-networking/utls v1.5.4/go.mod h1:SPuDbBmgLGp8s+HLNc83FuavwZCFoMmExj+ltUHiHUw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb h1:mIKbk8weKhSeLH2GmUTrvx8CjkyJmnU1wFmg59CUjFA= -golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= -golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= +go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git "a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution.go" b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution.go similarity index 100% rename from "leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution.go" rename to leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution.go diff --git "a/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution_test.go" b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution_test.go similarity index 100% rename from "leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution_test.go" rename to leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-x-3-Grid/Solution_test.go diff --git "a/leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution.go" b/leetcode/2601-2700/2664.The-Knight-Tour/Solution.go similarity index 100% rename from "leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution.go" rename to leetcode/2601-2700/2664.The-Knight-Tour/Solution.go diff --git "a/leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution_test.go" b/leetcode/2601-2700/2664.The-Knight-Tour/Solution_test.go similarity index 100% rename from "leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution_test.go" rename to leetcode/2601-2700/2664.The-Knight-Tour/Solution_test.go diff --git "a/leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution.go" b/leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-Binary-Tree/Solution.go similarity index 100% rename from "leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution.go" rename to leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-Binary-Tree/Solution.go diff --git "a/leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution_test.go" b/leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-Binary-Tree/Solution_test.go similarity index 100% rename from "leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution_test.go" rename to leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-Binary-Tree/Solution_test.go From 28b77fe9d7bd1b0174745b6a22c18e8da9fb3af0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 28 Oct 2023 15:35:13 +0800 Subject: [PATCH 031/253] Add solution and test-cases for problem 2658 --- .../README.md | 43 ++++++++++++++++++ .../Solution.go | 31 ++++++++++++- .../Solution_test.go | 23 +++++++--- .../example.png | Bin 0 -> 20870 bytes .../example2.png | Bin 0 -> 19434 bytes 5 files changed, 88 insertions(+), 9 deletions(-) create mode 100755 leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/README.md create mode 100644 leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/example.png create mode 100644 leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/example2.png diff --git a/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/README.md b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/README.md new file mode 100755 index 000000000..00b18e5cc --- /dev/null +++ b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/README.md @@ -0,0 +1,43 @@ +# [2658.Maximum Number of Fish in a Grid][title] + +## Description +You are given a **0-indexed** 2D matrix `grid` of size `m x n`, where `(r, c)` represents: + +- A **land** cell if `grid[r][c] = 0`, or +- A **water** cell containing `grid[r][c]` fish, if `grid[r][c] > 0`. + +A fisher can start at any **water** cell `(r, c)` and can do the following operations any number of times: + +- Catch all the fish at cell `(r, c)`, or +- Move to any adjacent **water** cell. + +Return the **maximum** number of fish the fisher can catch if he chooses his starting cell optimally, or `0` if no water cell exists. + +An **adjacent** cell of the cell `(r, c)`, is one of the cells `(r, c + 1), (r, c - 1), (r + 1, c) or (r - 1, c)` if it exists. + +**Example 1:** + +![example1](./example.png) + +``` +Input: grid = [[0,2,1,0],[4,0,0,3],[1,0,0,4],[0,3,2,0]] +Output: 7 +Explanation: The fisher can start at cell (1,3) and collect 3 fish, then move to cell (2,3) and collect 4 fish. +``` + +**Example 2:** + +![example2](./example2.png) + +``` +Input: grid = [[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]] +Output: 1 +Explanation: The fisher can start at cells (0,0) or (3,3) and collect a single fish. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-fish-in-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution.go b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution.go index d115ccf5e..5f6fab1e7 100755 --- a/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution.go +++ b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + m, n := len(grid), len(grid[0]) + var dfs func(int, int, [][]bool) int + dfs = func(x, y int, visited [][]bool) int { + if x < 0 || x >= m || y < 0 || y >= n || grid[x][y] == 0 { + return 0 + } + if visited[x][y] { + return 0 + } + visited[x][y] = true + return grid[x][y] + dfs(x+1, y, visited) + dfs(x-1, y, visited) + dfs(x, y+1, visited) + dfs(x, y-1, visited) + } + ans := 0 + for r := 0; r < m; r++ { + for c := 0; c < n; c++ { + if grid[r][c] == 0 { + continue + } + v := make([][]bool, m) + for i := 0; i < n; i++ { + v[i] = make([]bool, n) + } + if r := dfs(r, c, v); r > ans { + ans = r + } + } + } + return ans } diff --git a/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution_test.go b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution_test.go index 14ff50eb4..38c8c1549 100755 --- a/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution_test.go +++ b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution_test.go @@ -10,12 +10,21 @@ 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, 0}, + {4, 0, 0, 3}, + {1, 0, 0, 4}, + {0, 3, 2, 0}, + }, 7}, + {"TestCase2", [][]int{ + {1, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + {0, 0, 0, 1}, + }, 1}, } // 开始测试 @@ -30,10 +39,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/example.png b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/example.png new file mode 100644 index 0000000000000000000000000000000000000000..50c65c7d6fef9f322c62b297aeffa2981056099c GIT binary patch literal 20870 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 as&lTTU%S+G;14Tu?b0{Z%h1_-@P7cUG@v#B literal 0 HcmV?d00001 diff --git a/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/example2.png b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/example2.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd3de81b408a0272ae454bb7ad2802cd3a9568a GIT binary patch literal 19434 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 literal 0 HcmV?d00001 From c4a9e8938718e48ae3738b7ac375d9717506c017 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 29 Oct 2023 21:41:16 +0800 Subject: [PATCH 032/253] Add solution and test-cases for problem 1267 --- .../README.md | 37 +++++++++----- .../Solution.go | 45 +++++++++++++++++- .../Solution_test.go | 23 ++++++--- .../untitled-diagram-1-3.jpeg | Bin 0 -> 21749 bytes .../untitled-diagram-4.jpeg | Bin 0 -> 9340 bytes .../untitled-diagram-6.jpeg | Bin 0 -> 6740 bytes 6 files changed, 83 insertions(+), 22 deletions(-) create mode 100644 leetcode/1201-1300/1267.Count-Servers-that-Communicate/untitled-diagram-1-3.jpeg create mode 100644 leetcode/1201-1300/1267.Count-Servers-that-Communicate/untitled-diagram-4.jpeg create mode 100644 leetcode/1201-1300/1267.Count-Servers-that-Communicate/untitled-diagram-6.jpeg diff --git a/leetcode/1201-1300/1267.Count-Servers-that-Communicate/README.md b/leetcode/1201-1300/1267.Count-Servers-that-Communicate/README.md index bdde785db..69833d287 100644 --- a/leetcode/1201-1300/1267.Count-Servers-that-Communicate/README.md +++ b/leetcode/1201-1300/1267.Count-Servers-that-Communicate/README.md @@ -1,28 +1,39 @@ # [1267.Count Servers that Communicate][title] -> [!WARNING|style:flat] -> 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 map of a server center, represented as a `m * n` integer matrix `grid`, where 1 means that on that cell there is a server and 0 means that it is no server. Two servers are said to communicate if they are on the same row or on the same column. + +Return the number of servers that communicate with any other server. -**Example 1:** +**Example 1:** + +![example1](./untitled-diagram-6.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,0],[0,1]] +Output: 0 +Explanation: No servers can communicate with others. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./untitled-diagram-4.jpeg) -### 思路1 -> ... -Count Servers that Communicate -```go +``` +Input: grid = [[1,0],[1,1]] +Output: 3 +Explanation: All three servers can communicate with at least one other server. ``` +**Example 3:** + +![example3](./untitled-diagram-1-3.jpeg) + +``` +Input: grid = [[1,1,0,0],[0,0,1,0],[0,0,1,0],[0,0,0,1]] +Output: 4 +Explanation: The two servers in the first row can communicate with each other. The two servers in the third column can communicate with each other. The server at right bottom corner can't communicate with any other server. +``` ## 结语 diff --git a/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution.go b/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution.go index d115ccf5e..59c403079 100644 --- a/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution.go +++ b/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +func bfs1267(x, y, m, n int, grid [][]int) int { + if x < 0 || x >= m || y < 0 || y >= n || grid[x][y] == 0 { + return 0 + } + ans := 0 + grid[x][y] = 0 + queue := [][2]int{{x, y}} + for len(queue) > 0 { + ans += len(queue) + nq := make([][2]int, 0) + for _, item := range queue { + // 判断同一行 + for i := 0; i < n; i++ { + if grid[item[0]][i] != 0 { + nq = append(nq, [2]int{item[0], i}) + grid[item[0]][i] = 0 + } + } + // 判断同一列 + for i := 0; i < m; i++ { + if grid[i][item[1]] != 0 { + nq = append(nq, [2]int{i, item[1]}) + grid[i][item[1]] = 0 + } + } + } + queue = nq + } + return ans +} +func Solution(grid [][]int) int { + m, n := len(grid), len(grid[0]) + ans := 0 + for r := 0; r < m; r++ { + for c := 0; c < n; c++ { + if grid[r][c] != 0 { + if r := bfs1267(r, c, m, n, grid); r > 1 { + ans += r + } + } + } + } + return ans } diff --git a/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution_test.go b/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution_test.go index 14ff50eb4..fb5a362c3 100644 --- a/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution_test.go +++ b/leetcode/1201-1300/1267.Count-Servers-that-Communicate/Solution_test.go @@ -10,12 +10,21 @@ 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}, + }, 0}, + {"TestCase2", [][]int{ + {1, 0}, {1, 1}, + }, 3}, + {"TestCase3", [][]int{ + {1, 1, 0, 0}, + {0, 0, 1, 0}, + {0, 0, 1, 0}, + {0, 0, 0, 1}, + }, 4}, } // 开始测试 @@ -30,10 +39,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1201-1300/1267.Count-Servers-that-Communicate/untitled-diagram-1-3.jpeg b/leetcode/1201-1300/1267.Count-Servers-that-Communicate/untitled-diagram-1-3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..397a1593d0be35debd9be307945d791704ece233 GIT binary patch literal 21749 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 h0>{mdEY9s+@@?*Uk7-I?-Fhq$G1SIF2qe{*o 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 Date: Mon, 30 Oct 2023 21:10:46 +0800 Subject: [PATCH 033/253] Add solution and test-cases for problem 1356 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 22 ++++++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/README.md b/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/README.md index 0d7be1b7e..664531884 100644 --- a/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/README.md +++ b/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/README.md @@ -1,28 +1,29 @@ # [1356.Sort Integers by The Number of 1 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 an integer array `arr`. Sort the integers in the array in ascending order by the number of `1`'s in their binary representation and in case of two or more integers have the same number of `1`'s you have to sort them in ascending order. + +Return the array after sorting it. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [0,1,2,3,4,5,6,7,8] +Output: [0,1,2,4,8,3,5,6,7] +Explantion: [0] is the only integer with 0 bits. +[1,2,4,8] all have 1 bit. +[3,5,6] have 2 bits. +[7] has 3 bits. +The sorted array by bits is [0,1,2,4,8,3,5,6,7] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sort Integers by The Number of 1 Bits -```go ``` - +Input: arr = [1024,512,256,128,64,32,16,8,4,2,1] +Output: [1,2,4,8,16,32,64,128,256,512,1024] +Explantion: All integers have 1 bit in the binary representation, you should just sort them in ascending order. +``` ## 结语 diff --git a/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/Solution.go b/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/Solution.go index d115ccf5e..9fdc329d0 100644 --- a/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/Solution.go +++ b/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func bitOfOne(n int) int { + ans := 0 + for n > 0 { + ans++ + n = n & (n - 1) + } + return ans +} +func Solution(arr []int) []int { + sort.Slice(arr, func(i, j int) bool { + a := bitOfOne(arr[i]) + b := bitOfOne(arr[j]) + if a == b { + return arr[i] < arr[j] + } + return a < b + }) + return arr } diff --git a/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/Solution_test.go b/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/Solution_test.go index 14ff50eb4..88948673b 100644 --- a/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/Solution_test.go +++ b/leetcode/1301-1400/1356.Sort-Integers-by-The-Number-of-1-Bits/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, 2, 3, 4, 5, 6, 7, 8}, []int{0, 1, 2, 4, 8, 3, 5, 6, 7}}, + {"TestCase2", []int{1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1}, []int{1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6046419b42d676d413639f566c1a33db17f51692 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 31 Oct 2023 22:15:07 +0800 Subject: [PATCH 034/253] Add solution and test-cases for problem 690 --- .../0690.Employee-Importance/README.md | 38 +++++++++++------- .../0690.Employee-Importance/Solution.go | 26 +++++++++++- .../0690.Employee-Importance/Solution_test.go | 31 +++++++++----- .../0690.Employee-Importance/emp1-tree.jpeg | Bin 0 -> 23727 bytes .../0690.Employee-Importance/emp2-tree.jpeg | Bin 0 -> 15705 bytes 5 files changed, 69 insertions(+), 26 deletions(-) create mode 100644 leetcode/601-700/0690.Employee-Importance/emp1-tree.jpeg create mode 100644 leetcode/601-700/0690.Employee-Importance/emp2-tree.jpeg diff --git a/leetcode/601-700/0690.Employee-Importance/README.md b/leetcode/601-700/0690.Employee-Importance/README.md index 94254f22d..5b0f84e4d 100644 --- a/leetcode/601-700/0690.Employee-Importance/README.md +++ b/leetcode/601-700/0690.Employee-Importance/README.md @@ -1,28 +1,38 @@ # [690.Employee Importance][title] -> [!WARNING|style:flat] -> 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 data structure of employee information, including the employee's unique ID, importance value, and direct subordinates' IDs. + +You are given an array of employees `employees` where: + +- `employees[i].id` is the ID of the ith employee. +- `employees[i].importance` is the importance value of the ith employee. +- `employees[i].subordinates` is a list of the IDs of the direct subordinates of the ith employee. + +Given an integer `id` that represents an employee's ID, return the **total** importance value of this employee and all their direct and indirect subordinates. -**Example 1:** +**Example 1:** + +![example1](./emp1-tree.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: employees = [[1,5,[2,3]],[2,3,[]],[3,3,[]]], id = 1 +Output: 11 +Explanation: Employee 1 has an importance value of 5 and has two direct subordinates: employee 2 and employee 3. +They both have an importance value of 3. +Thus, the total importance value of employee 1 is 5 + 3 + 3 = 11. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./emp2-tree.jpeg) -### 思路1 -> ... -Employee Importance -```go ``` - +Input: employees = [[1,2,[5]],[5,-3,[]]], id = 5 +Output: -3 +Explanation: Employee 5 has an importance value of -3 and has no direct subordinates. +Thus, the total importance value of employee 5 is -3. +``` ## 结语 diff --git a/leetcode/601-700/0690.Employee-Importance/Solution.go b/leetcode/601-700/0690.Employee-Importance/Solution.go index d115ccf5e..3df34a3c1 100644 --- a/leetcode/601-700/0690.Employee-Importance/Solution.go +++ b/leetcode/601-700/0690.Employee-Importance/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +type Employee struct { + Id int + Importance int + Subordinates []int +} + +func Solution(employees []*Employee, id int) int { + id2employe := make(map[int]*Employee) + for idx := range employees { + id2employe[employees[idx].Id] = employees[idx] + } + importance := 0 + queue := []int{id} + for len(queue) > 0 { + nq := make([]int, 0) + for _, item := range queue { + importance += id2employe[item].Importance + for _, sub := range id2employe[item].Subordinates { + nq = append(nq, sub) + } + } + queue = nq + } + return importance } diff --git a/leetcode/601-700/0690.Employee-Importance/Solution_test.go b/leetcode/601-700/0690.Employee-Importance/Solution_test.go index 14ff50eb4..aca8093f1 100644 --- a/leetcode/601-700/0690.Employee-Importance/Solution_test.go +++ b/leetcode/601-700/0690.Employee-Importance/Solution_test.go @@ -10,30 +10,41 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []*Employee + id int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []*Employee{ + { + Id: 1, + Importance: 5, + Subordinates: []int{2, 3}, + }, + {Id: 2, Importance: 3}, + {Id: 3, Importance: 3}, + }, 1, 11}, + {"TestCase2", []*Employee{ + {Id: 1, Importance: 1, Subordinates: []int{5}}, + {Id: 5, Importance: -3}, + }, 5, -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.id) 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.id) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0690.Employee-Importance/emp1-tree.jpeg b/leetcode/601-700/0690.Employee-Importance/emp1-tree.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d2bb2f2dd6136e57756957c5e5d1f4f5927663bb GIT binary patch literal 23727 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0690.Employee-Importance/emp2-tree.jpeg b/leetcode/601-700/0690.Employee-Importance/emp2-tree.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9556b99f0f401b86a12e911a51daebdfeb7cdfe7 GIT binary patch literal 15705 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 Date: Wed, 1 Nov 2023 20:54:53 +0800 Subject: [PATCH 035/253] Add solution and test-cases for problem 501 --- .../README.md | 33 ++++++------ .../Solution.go | 48 +++++++++++++++++- .../Solution_test.go | 18 ++++--- .../mode-tree.jpeg | Bin 0 -> 5515 bytes 4 files changed, 75 insertions(+), 24 deletions(-) create mode 100644 leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/mode-tree.jpeg diff --git a/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/README.md b/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/README.md index af5685be5..e9b8b85c4 100644 --- a/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/README.md +++ b/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/README.md @@ -1,28 +1,31 @@ # [501.Find Mode in Binary Search 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 search tree (BST) with duplicates, return all the [mode(s)](https://en.wikipedia.org/wiki/Mode_(statistics)) (i.e., the most frequently occurred element) in it. -**Example 1:** +If the tree has more than one mode, return them in **any order**. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Assume a BST is defined as follows: + +- The left subtree of a node contains only nodes with keys **less than or equal to** the node's key. +- The right subtree of a node contains only nodes with keys **greater than or equal to** the node's key. +Both the left and right subtrees must also be binary search trees. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./mode-tree.jpeg) -### 思路1 -> ... -Find Mode in Binary Search Tree -```go ``` +Input: root = [1,null,2,2] +Output: [2] +``` + +**Example 2:** +``` +Input: root = [0] +Output: [0] +``` ## 结语 diff --git a/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution.go b/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution.go index d115ccf5e..ff5d078b4 100644 --- a/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution.go +++ b/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) []int { + freq := -1 + pre := 1 + first := true + maxCount := 0 + ans := make([]int, 0) + var inOrder func(tree *TreeNode) + inOrder = func(tree *TreeNode) { + if tree == nil { + return + } + + inOrder(tree.Left) + if first { + freq = 1 + pre = tree.Val + first = false + } else { + if tree.Val == pre { + freq++ + } else { + x := pre + pre = tree.Val + if freq == maxCount { + ans = append(ans, x) + } else if freq > maxCount { + maxCount = freq + ans = []int{x} + } + freq = 1 + } + } + inOrder(tree.Right) + } + inOrder(root) + if freq == maxCount { + ans = append(ans, pre) + } else if freq > maxCount { + ans = []int{pre} + } + return ans } diff --git a/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution_test.go b/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution_test.go index 14ff50eb4..46679c47f 100644 --- a/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution_test.go +++ b/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/Solution_test.go @@ -10,12 +10,16 @@ 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: 1, + Right: &TreeNode{Val: 2}, + }, []int{1, 2}}, + {"TestCase2", &TreeNode{ + Val: 1, + }, []int{1}}, } // 开始测试 @@ -30,10 +34,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/mode-tree.jpeg b/leetcode/501-600/0501.Find-Mode-in-Binary-Search-Tree/mode-tree.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..678a2edf9322836a11c3bb02df0df235c227efe5 GIT binary patch literal 5515 zcmb7H2T+sIvi>2o1PoQK(o5(?Md=-s5(^NJ7C{gZDFK6o4pO2hN-+sV&`=}2NC_RO z(gcwXp-EFh5vc+q4`=S1>z#S;&U^cRb7p7HIlJGS|ID7<xJNB)eU6QN_E`y)&Y4D<|OCI|$~1O`J`SXm&0d#3hjWWvQgOogMwFMGIN z*ejBmT(5B)G@B}YQDp9jKL%iaIQ_`QA(`0JRIf;nrcXmb{8hJ0C9_^Bzi@+~#$}Zd ztmehKjLq=?sQWW@N80rCZA7Hu=Qa1i>jAA!Uv2FO2K5wvO(-@%@aZ03Uebitz1M+%g_5NYMZB5P6959vl*y*)d( zMTsj>LrPJmgQ#NwuEz@c(v@EpZapgVhTP+Y_p84psv8L=X^UGVAqKCJUv?)}=7tf% zz%U|Em=bxE<LgR{!ua(Bb7s7#i>{cvVY?5FYc!C za;gzmPa40oko@NNRA5D);WO@#T61qFtyq7mehe-Fs>>GtkTo zJGYkJs20Sz6+AVajcSOTol_kW&QrmL{^m1G{2Galo(Tnh=%6L}=rXk4?B`QSnxC?r z4#^YKXwJ^Vs)Airp}6UH^1w2@u|ENp8{A8814o4ag$TqLq&JR{puK4sv971=9G6Fy>j(BQauJ%7tMS~v?RF>S?8c$iV_WL zU!BG4NV#g7!zX8+@H!eURyDH|p)}F{tm_S(nRJ(JEE}?y5_q*pQA1O}Y1%eBvs$j6uR$Qb9ns`- zbrnXbsA|a3NqPtErBm_{ve#**rf0MwQ3vCwzIWV@2IqKiN&JDL!D(4BXqROsAPlQQ z%fX=;G~(^2UFQ)T^cG$EI%f3qSZ9Yq=RX+u54%igj2Ks~#3KqzUO!{G?AV1Mq7rR% z(H(rIaMO5IY1l3RT}Vkts$N@Kbeh~a_2OftT*!M#=Nha^;e{>pQxVjTE{T*DKR2G8 zl24fiKNK5s-nFF9ZLomlDMj)J`(ki2j=Ndan*u6QbkdP|%0YEwDeu|WE)1TvTJo_= ztw3t!xM7I23+*wd7dNV3TB=Jy1gz{$Ole#JNlE(YK+L@s^eU@hnQQrZ-gZYyvRj{! zti0+|HVs8#o%mAoX6nMu!!8)n_1<71t3V5K&|O^cepGZ7yD9yf+^6g;7+UU$)OnJw z4zW0Zx`6Kz&wfAPQawrDGq9wDI}-Cj3iptDPuHqTH>Mqs|C~GzQ7U zNXsTh#%K*R!{aLo;?B3f{xc0b=ZRu+&sv!nwdX;c){G{>___4Oj1Ot9 z4pK6D_)dh8P=q?0E2a{8j@;#o9B$M&4BoZkv9OV2#pkN4sNH8 z&)^@iH?HL$Du3@x2nmGNGuSqSk{8Fh4de?tO&>dv3xqgbW-LlIE}Y61%!W`+(&EF1RISiG zJ_kKf_Y-5LHf3u+jOf+na$mJndmEYG_z4H$!Sc@T(C<-K{q-#UwW9KT^~-q0!^TCZ z+!;F0&_e|;9yU?UKckb2rEY}Y2%nR>QjuPrPKtm(Go{PMrT-Q&m}#8T{wQYeLBX^x z_}$?(WB2b$bH_IaT>X;VuAfupkEV;)oh!$$?zFDAPAh^Qq%0@(-uB~9OR1$e9DSI8 z>v8TvO-@@PA`tdX4%UnfuJ&IsJToK+qoEdPMOqZQ|FpW@!fE2uWGnyI)nw*1XU zwDXr?_2RY0&s&#ff0Fc9MdNkV+l>yR`zLdZ6uN>MCbsE5bfeaO?iWk&i?MAUy0Mzq zlZjo)*c~}2%}~~-{5a;!id2izBe%f?O^D(8ez`Mq>((}ooXJ^IEb6Y1TvO#gV@bBv=8nLS( zMjI{WXKZMqq49kEryw8xaI*+f5=Kmvsk;%@vJerbO<$UU>C+-AE#t?Z*O z*KYO{O1{3k)?!{>Ts;H!OUE1*N4+GFIzUKA`~?D;_MJm`k(!lEmojwNoeFXpYQ<%1 z^3OCo6vnmWPsBfT&GMkklBpUyOx4`)^I z5M=Y=qq@lt3cctc)VSD;bmg*vs%Uf1=<|x6B$)+580oSxW~BcKhd(^dY~is0zUlM| zza*?T+Oq(a(&61DaD(Q_TuE!^r)3i4gf<}p1T~yLoll`4 z9CGk)*{2w!-uHuFq0RHvv|q^cd+%(LEneYa1z4r=XnUI(eN2U&dqi2Y#^>8uV zoMPxHQd{wk@n}72H@R9}o1V~wW=u@GyJ7MoNi7hd%ey7<81ukIF4YUZE}PtkUw{1k zt!hBs73P+*x@~=k7SanM>Fh2oCU;c|EGBKX0@14xb1F%0F7;>)R()KK#E?7Wd$LAs zXzwvcd^CZ7XBI@PJT%P28T!7`h-GbuCAm(S4qR6m30ATM#t?~dQqXk9s7jmnmi0)= ztIS7(;T()&mx)a@lXyhg9)JC0VGxn#-K#`WN!21t)%mE?Pqf?|OYN-pVO!QW*7WTw z_qUCv#j7fIRV?`IX~M-Q7}CsbSRP#D8o^IMzk^=rvFU@9w7h-!y)v6R45jGvw*wdc z&w{2qP?ZD5v7%FsBK+0CN1&3OC|+!gMk%L7XF(@Y#Ol#OiTsXiP!|=Tix&HOu zBC1)wtGD^|u-Cc-Ozq00wBK_?+`EP=W}9G42MxnvCnYuf89-~q^?zG-TFPNe$+3~I zWxS}C;*{k4c||t-B7O5c36kIAxI9cv)@NhUx@$y3#yQ;8LSBZC%B{&r#VVwS_iC-C zbG*1iwQSpV@y5Fy`Kn8SQZPSPeCO;hgt2cA9D&6O3riWz0xEzh2O&e4$q0^60ieL? z!@rWNOaW%a+t#iM$rAK7;9kvDv{JehIzbFhWcA3M74okXBtHW4A?ja)^FZ#W#)@<%| zk{o%Rk-kvl36s~-6ZAzIU zKk!HLTUy+}})IF?pR(sPh0H&g4r&qmPL;k7sk>$wn9R+hp8?B1> z|B(K63fJl^w4=7b7JL=}G>QaD5G0zLJCbTyXQz}RoojV3+M(2*dmICdlr!>^&h=%K zcy3@ZYC_9LvkQFc$55vE;P8;@xBvUk@r#;H>@AE~ANl5!#t@0ApU2P7l+{bQB2fDt z{_SwYP&botA~vrb7O%H2M7q3DJ8G<`e`+K|rIhLk(ty94$rQir)C9R7fgoGH+_9V( z$d(M|!bvJEkR*-tI5-Hg04R(;bl~4Q2M*c$X|D~A))k5wr_UeNQqH*XGU5jJ6`T3p z{A2yioUz;C&5~%L2-TCuOWP&?3WaqzM(5?%)Ff)7q2?%SE()6Qmhzi`6<}<|-*l#} z{MBQ+aY{Apd2xn|%I^!{;cb!YOG|CygpyLZVHoG;5*hNmlGV|7&26&yW)U)@ky0k7 zd1oYfZ0%)1Vdo<}QpXrEgU~on*hSyXXi~LG7Lb%x7dz;{+m1ENCnYN*eX@7nDX?I* zTJsJO6&wkyO(U3q`PC}&2eO+%z5YNQcG>nK_s^kVXOr5Tv*yd@Z`@qr3%UNGf~my$ zbfWQ612o;@dHMxy<=!c(0cA`JD*8r`2mjRY`oZTnUvyu z^T`7P?K)J^S9XoKy1@5NIHsc&j#((7U=56bM}6$SNgzpb{RJ_(utIAg_Ztb_o7Y<_ zZ4bi6cg`>5u^ReqSj&iR^GY&gUg)o-L zku?+`Y?!@4AJ_p0U%Zo=Pr3Jwvg8V#y0jwJR+Q}AkSDI$$70EY;BJi7ONpnxevs=; zI#;s;ODSB2)5DRm*4=xlWDi=wH@ zg&?A4Gwi;_6s)|RqYFy>j%m+RY5l@_41_&^X`(6`ajM`1sk_GUu}uH$UY`yfnRNLz z;Cd;=Q=V~#gDUG!52A9>9sODzYZGe)+W{Sn37!%JY+AGlv7z+`-$R=AB5O-w*E{3R zWtTm<&b-LMUh3v-G5ol@fS<$}FW|2kvbLA Date: Sat, 4 Nov 2023 17:21:34 +0800 Subject: [PATCH 036/253] Add solution and test-cases for problem 1503 --- .../README.md | 46 +++++++++++++----- .../Solution.go | 15 +++++- .../Solution_test.go | 23 ++++----- .../ants.jpeg | Bin 0 -> 49993 bytes .../ants2.jpeg | Bin 0 -> 13338 bytes .../ants3.jpeg | Bin 0 -> 13592 bytes 6 files changed, 58 insertions(+), 26 deletions(-) create mode 100644 leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants.jpeg create mode 100644 leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants2.jpeg create mode 100644 leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants3.jpeg diff --git a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/README.md b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/README.md index 18fe5b963..e2b8fab45 100755 --- a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/README.md +++ b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/README.md @@ -1,28 +1,48 @@ # [1503.Last Moment Before All Ants Fall Out of a Plank][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +We have a wooden plank of the length `n` **units**. Some ants are walking on the plank, each ant moves with a speed of **1 unit per second**. Some of the ants move to the **left**, the other move to the **right**. + +When two ants moving in two **different** directions meet at some point, they change their directions and continue moving again. Assume changing directions does not take any additional time. + +When an ant reaches **one end** of the plank at a time `t`, it falls out of the plank immediately. + +Given an integer `n` and two integer arrays `left` and `right`, the positions of the ants moving to the left and the right, return the moment when the last ant(s) fall out of the plank. + +**Example 1:** -**Example 1:** +![1](./ants.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, left = [4,3], right = [0,1] +Output: 4 +Explanation: In the image above: +-The ant at index 0 is named A and going to the right. +-The ant at index 1 is named B and going to the right. +-The ant at index 3 is named C and going to the left. +-The ant at index 4 is named D and going to the left. +The last moment when an ant was on the plank is t = 4 seconds. After that, it falls immediately out of the plank. (i.e., We can say that at t = 4.0000000001, there are no ants on the plank). ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./ants2.jpeg) -### 思路1 -> ... -Last Moment Before All Ants Fall Out of a Plank -```go ``` +Input: n = 7, left = [], right = [0,1,2,3,4,5,6,7] +Output: 7 +Explanation: All ants are going to the right, the ant at index 0 needs 7 seconds to fall. +``` + +**Example 3:** + +![3](./ants3.jpeg) +``` +Input: n = 7, left = [0,1,2,3,4,5,6,7], right = [] +Output: 7 +Explanation: All ants are going to the left, the ant at index 7 needs 7 seconds to fall. +``` ## 结语 diff --git a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution.go b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution.go index d115ccf5e..208ab187b 100644 --- a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution.go +++ b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, left []int, right []int) int { + ans := 0 + for _, l := range left { + if l > ans { + ans = l + } + } + for _, r := range right { + if l := n - r; l > ans { + ans = l + } + } + return ans } diff --git a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution_test.go b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution_test.go index 14ff50eb4..4e5cc321e 100644 --- a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution_test.go +++ b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/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 + left, right []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, []int{4, 3}, []int{0, 1}, 4}, + {"TestCase2", 7, []int{}, []int{0, 1, 2, 3, 4, 5, 6, 7}, 7}, + {"TestCase3", 7, []int{0, 1, 2, 3, 4, 5, 6, 7}, []int{}, 7}, } // 开始测试 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.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 %v", + c.expect, got, c.n, c.left, c.right) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants.jpeg b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..18eb179d20822cbee2256f693da8253385e91cbe GIT binary patch literal 49993 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

ipj%;Z|MpW-Zo_`imP8X;kEX?;SKTdmRc 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 literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants2.jpeg b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2f9452826ea24adc4988fa3025c82f2bc38475cc GIT binary patch literal 13338 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 Y{Bo$DXqewtzx$sL=zqShb~gDx03DpHJOBUy literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants3.jpeg b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/ants3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d1c3631f79182e894807a956b68f938a1791f87d GIT binary patch literal 13592 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 Date: Sun, 5 Nov 2023 15:48:48 +0800 Subject: [PATCH 037/253] Add solution and test-cases for problem 1535 --- .../README.md | 35 +++++++++++-------- .../Solution.go | 33 +++++++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 62 insertions(+), 26 deletions(-) diff --git a/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/README.md b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/README.md index 0da8e75ec..5497d8e63 100755 --- a/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/README.md +++ b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/README.md @@ -1,28 +1,35 @@ # [1535.Find the Winner of an Array 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 +Given an integer array `arr` of **distinct** integers and an integer `k`. + +A game will be played between the first two elements of the array (i.e. `arr[0]` and `arr[1]`). In each round of the game, we compare `arr[0]` with `arr[1]`, the larger integer wins and remains at position `0`, and the smaller integer moves to the end of the array. The game ends when an integer wins `k` consecutive rounds. + +Return the integer which will win the game. + +It is **guaranteed** that there will be a winner of the game. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [2,1,3,5,4,6,7], k = 2 +Output: 5 +Explanation: Let's see the rounds of the game: +Round | arr | winner | win_count + 1 | [2,1,3,5,4,6,7] | 2 | 1 + 2 | [2,3,5,4,6,7,1] | 3 | 1 + 3 | [3,5,4,6,7,1,2] | 5 | 1 + 4 | [5,4,6,7,1,2,3] | 5 | 2 +So we can see that 4 rounds will be played and 5 is the winner because it wins 2 consecutive games. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find the Winner of an Array Game -```go ``` - +Input: arr = [3,2,1], k = 10 +Output: 3 +Explanation: 3 will win the first 10 rounds consecutively. +``` ## 结语 diff --git a/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution.go b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution.go index d115ccf5e..60ac87101 100644 --- a/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution.go +++ b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "container/list" +) + +func Solution(arr []int, k int) int { + l := list.New() + maxitem := -1 + for _, n := range arr { + l.PushBack(n) + if n > maxitem { + maxitem = n + } + } + winCount := 0 + cur := l.Front() + for { + next := cur.Next() + a := cur.Value.(int) + b := next.Value.(int) + if a > b { + winCount++ + l.MoveToBack(next) + } else { + l.MoveToBack(cur) + cur = next + winCount = 1 + } + if winCount == k || cur.Value.(int) == maxitem { + return cur.Value.(int) + } + } } diff --git a/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution_test.go b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution_test.go index 14ff50eb4..ace3d57d9 100644 --- a/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution_test.go +++ b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution_test.go @@ -10,30 +10,30 @@ 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{2, 1, 3, 5, 4, 6, 7}, 2, 5}, + {"TestCase2", []int{3, 2, 1}, 10, 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 ddbcdb3f873fee06514676568ffd520d0da8223a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Nov 2023 23:09:05 +0800 Subject: [PATCH 038/253] Add solution and test-cases for problem 503 --- .../0503.Next-Greater-Element-II/README.md | 26 +++++------ .../0503.Next-Greater-Element-II/Solution.go | 46 ++++++++++++++++++- .../Solution_test.go | 17 ++++--- 3 files changed, 66 insertions(+), 23 deletions(-) diff --git a/leetcode/501-600/0503.Next-Greater-Element-II/README.md b/leetcode/501-600/0503.Next-Greater-Element-II/README.md index 2365a99ac..fe36e96f2 100644 --- a/leetcode/501-600/0503.Next-Greater-Element-II/README.md +++ b/leetcode/501-600/0503.Next-Greater-Element-II/README.md @@ -1,28 +1,26 @@ # [503.Next Greater Element 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 circular integer array `nums` (i.e., the next element of `nums[nums.length - 1] is nums[0]`), return the **next greater number** for every element in `nums`. + +The **next greater number** of a number `x` is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, return `-1` for this number. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,1] +Output: [2,-1,2] +Explanation: The first 1's next greater number is 2; +The number 2 can't find next greater number. +The second 1's next greater number needs to search circularly, which is also 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Next Greater Element II -```go ``` - +Input: nums = [1,2,3,4,3] +Output: [2,3,4,-1,4] +``` ## 结语 diff --git a/leetcode/501-600/0503.Next-Greater-Element-II/Solution.go b/leetcode/501-600/0503.Next-Greater-Element-II/Solution.go index d115ccf5e..bd3526ad5 100644 --- a/leetcode/501-600/0503.Next-Greater-Element-II/Solution.go +++ b/leetcode/501-600/0503.Next-Greater-Element-II/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + l := len(nums) + if l == 1 { + return []int{-1} + } + + ans := make([]int, l) + + preStack := make([][]int, l-1) + preStack[0] = []int{nums[0]} + for i := 1; i < l-1; i++ { + if nums[i] > nums[i-1] { + preStack[i] = append(preStack[i-1], nums[i]) + } else { + preStack[i] = preStack[i-1] + } + } + stackIndex := l - 1 + + stack := make([]int, len(nums)) + copy(stack, nums) + for idx := l - 1; idx >= 0; idx-- { + for stackIndex < l && stack[stackIndex] <= nums[idx] { + stackIndex++ + } + if stackIndex == l { + // empty + set := -1 + if idx != 0 { + for _, n := range preStack[idx-1] { + if n > nums[idx] { + set = n + break + } + } + } + ans[idx] = set + } else { + ans[idx] = stack[stackIndex] + } + stackIndex-- + stack[stackIndex] = nums[idx] + } + return ans } diff --git a/leetcode/501-600/0503.Next-Greater-Element-II/Solution_test.go b/leetcode/501-600/0503.Next-Greater-Element-II/Solution_test.go index 14ff50eb4..01db9cb0b 100644 --- a/leetcode/501-600/0503.Next-Greater-Element-II/Solution_test.go +++ b/leetcode/501-600/0503.Next-Greater-Element-II/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, 3, 4, 3}, []int{2, 3, 4, -1, 4}}, + {"TestCase2", []int{5, 4, 3, 2, 1}, []int{-1, 5, 5, 5, 5}}, + {"TestCase3", []int{1, 2, 1}, []int{2, -1, 2}}, + {"TestCase4", []int{1, 2}, []int{2, -1}}, + {"TestCase5", []int{2, 1}, []int{-1, 2}}, + {"TestCase6", []int{1}, []int{-1}}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d8e40c2cbebb6a0a027b23bcbb3d17a5e5f20ee0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Nov 2023 23:28:18 +0800 Subject: [PATCH 039/253] fix workflow that fails to execute --- .github/workflows/test.yml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db7e532ed..5b4790ca7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,19 +10,14 @@ jobs: name: Test Solution Cases runs-on: ubuntu-latest steps: - - - name: Set up Go 1.16 - uses: actions/setup-go@v1 - with: - go-version: 1.16 - id: go - - name: Check out code into the Go module directory uses: actions/checkout@v2 - + - name: Set up Go 1.21 + uses: actions/setup-go@v4 + with: + go-version-file: 'go.mod' + id: go - name: Get dependencies run: go mod download - - name: Test Solutions run: make test - From da66435a0faa7804dc39fe95539095bba8154122 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 6 Nov 2023 21:02:20 +0800 Subject: [PATCH 040/253] Add solution and test-cases for problem 1845 --- .../1845.Seat-Reservation-Manager/README.md | 40 ++++++----- .../1845.Seat-Reservation-Manager/Solution.go | 66 ++++++++++++++++++- .../Solution_test.go | 19 +++--- 3 files changed, 97 insertions(+), 28 deletions(-) diff --git a/leetcode/1801-1900/1845.Seat-Reservation-Manager/README.md b/leetcode/1801-1900/1845.Seat-Reservation-Manager/README.md index 5c23f512e..e03b3fbf9 100755 --- a/leetcode/1801-1900/1845.Seat-Reservation-Manager/README.md +++ b/leetcode/1801-1900/1845.Seat-Reservation-Manager/README.md @@ -1,28 +1,34 @@ # [1845.Seat Reservation 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 +Design a system that manages the reservation state of `n` seats that are numbered from `1` to `n`. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `SeatManager` class: -## 题意 -> ... +- `SeatManager(int n)` Initializes a `SeatManager` object that will manage `n` seats numbered from `1` to `n`. All seats are initially available. +- `int reserve()` Fetches the **smallest-numbered** unreserved seat, reserves it, and returns its number. +- `void unreserve(int seatNumber)` Unreserves the seat with the given `seatNumber`. -## 题解 +**Example 1:** -### 思路1 -> ... -Seat Reservation Manager -```go ``` - +Input +["SeatManager", "reserve", "reserve", "unreserve", "reserve", "reserve", "reserve", "reserve", "unreserve"] +[[5], [], [], [2], [], [], [], [], [5]] +Output +[null, 1, 2, null, 2, 3, 4, 5, null] + +Explanation +SeatManager seatManager = new SeatManager(5); // Initializes a SeatManager with 5 seats. +seatManager.reserve(); // All seats are available, so return the lowest numbered seat, which is 1. +seatManager.reserve(); // The available seats are [2,3,4,5], so return the lowest of them, which is 2. +seatManager.unreserve(2); // Unreserve seat 2, so now the available seats are [2,3,4,5]. +seatManager.reserve(); // The available seats are [2,3,4,5], so return the lowest of them, which is 2. +seatManager.reserve(); // The available seats are [3,4,5], so return the lowest of them, which is 3. +seatManager.reserve(); // The available seats are [4,5], so return the lowest of them, which is 4. +seatManager.reserve(); // The only available seat is seat 5, so return 5. +seatManager.unreserve(5); // Unreserve seat 5, so now the available seats are [5]. +``` ## 结语 diff --git a/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go index d115ccf5e..a3e5f9038 100644 --- a/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go +++ b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go @@ -1,5 +1,69 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type seats []int + +func (s *seats) Len() int { + return len(*s) +} + +func (s *seats) Less(i, j int) bool { + return (*s)[i] < (*s)[j] +} + +func (s *seats) Swap(i, j int) { + (*s)[i], (*s)[j] = (*s)[j], (*s)[i] +} + +func (s *seats) Push(x any) { + *s = append(*s, x.(int)) +} +func (s *seats) Pop() any { + old := *s + l := len(old) + x := old[l-1] + *s = old[:l-1] + return x +} + +type SeatManager struct { + unused seats +} + +func Constructor1845(n int) SeatManager { + unused := seats{} + for i := 1; i <= n; i++ { + heap.Push(&unused, i) + } + return SeatManager{ + unused: unused, + } +} + +func (this *SeatManager) Reserve() int { + x := heap.Pop(&this.unused).(int) return x } + +func (this *SeatManager) Unreserve(seatNumber int) { + heap.Push(&this.unused, seatNumber) +} + +type opt struct { + name string + val int +} + +func Solution(n int, opts []opt) []int { + ans := make([]int, 0) + c := Constructor1845(n) + for _, op := range opts { + if op.name == "r" { + ans = append(ans, c.Reserve()) + continue + } + c.Unreserve(op.val) + } + return ans +} diff --git a/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go index 14ff50eb4..27c412558 100644 --- a/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go +++ b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + opts []opt + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, []opt{{name: "r"}, {name: "r"}, {name: "u", val: 2}, {name: "r"}, {name: "r"}, {name: "r"}, {name: "r"}, {name: "u", val: 5}}, []int{1, 2, 2, 3, 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.n, 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.n, c.opts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c6eb681cc3d35ef7c322305ea808f8d99d6f0db6 Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 7 Nov 2023 19:14:46 +0800 Subject: [PATCH 041/253] update some solution --- go.mod | 10 +-- go.sum | 10 +++ .../Solution.go | 13 ++-- .../1-100/0049.Group-Anagrams/Solution.go | 38 +++++----- .../0049.Group-Anagrams/Solution_test.go | 63 +++++++++------- leetcode/1-100/0054.Spiral-Matrix/Solution.go | 37 ++++++++- .../1-100/0054.Spiral-Matrix/Solution_test.go | 75 ++++++++++++------- leetcode/1-100/0072.Edit-Distance/Solution.go | 10 --- .../1-100/0073.Set-Matrix-Zeroes/Solution.go | 22 +++++- .../0073.Set-Matrix-Zeroes/Solution_test.go | 66 +++++++++------- .../Solution.go | 20 +++++ .../Solution.go | 65 ++++------------ .../Solution_test.go | 67 +++++++++-------- .../Solution.go | 15 ++++ .../0206.Reverse-Linked-List/Solution.go | 11 ++- .../0560.Subarray-Sum-Equals-K/Solution.go | 29 ++++++- .../Solution_test.go | 62 ++++++++------- 17 files changed, 377 insertions(+), 236 deletions(-) diff --git a/go.mod b/go.mod index 5b81deda8..d8f45d24d 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gaukas/godicttls v0.0.4 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect - github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b // indirect + github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/klauspost/compress v1.17.2 // indirect @@ -22,15 +22,15 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qtls-go1-20 v0.4.1 // indirect - github.com/quic-go/quic-go v0.39.3 // indirect + github.com/quic-go/quic-go v0.40.0 // indirect github.com/refraction-networking/utls v1.5.4 // indirect go.uber.org/mock v0.3.0 // indirect golang.org/x/crypto v0.14.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/mod v0.13.0 // indirect + golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.14.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 075afbc1d..18df48ab0 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b h1:RMpPgZTSApbPf7xaVel+QkoGPRLFLrwFO89uDUHEGf0= github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5XqmmYsTLzJp/TO9Lhy39gkverk= +github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= 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= @@ -43,6 +45,8 @@ github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5 github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= github.com/quic-go/quic-go v0.39.3 h1:o3YB6t2SR+HU/pgwF29kJ6g4jJIJEwEZ8CKia1h1TKg= github.com/quic-go/quic-go v0.39.3/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= +github.com/quic-go/quic-go v0.40.0 h1:GYd1iznlKm7dpHD7pOVpUvItgMPo/jrMgDWZhMCecqw= +github.com/quic-go/quic-go v0.40.0/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= github.com/refraction-networking/utls v1.5.4 h1:9k6EO2b8TaOGsQ7Pl7p9w6PUhx18/ZCeT0WNTZ7Uw4o= github.com/refraction-networking/utls v1.5.4/go.mod h1:SPuDbBmgLGp8s+HLNc83FuavwZCFoMmExj+ltUHiHUw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -57,12 +61,18 @@ golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= diff --git a/leetcode/1-100/0011.Container-With-Most-Water/Solution.go b/leetcode/1-100/0011.Container-With-Most-Water/Solution.go index ea304723c..0a368b5f7 100644 --- a/leetcode/1-100/0011.Container-With-Most-Water/Solution.go +++ b/leetcode/1-100/0011.Container-With-Most-Water/Solution.go @@ -1,32 +1,33 @@ package Solution func maxArea(height []int) int { - max, l, r := 0, 0, len(height)-1 + ans, l, r := 0, 0, len(height)-1 for l < r { // 获取当前的坐标形成的面积 /* 1.Min(height[l], height[r]) : 获取当前左右最小高度【面积需要最小高】 - 2. Min(height[l], height[r])*(r-l) : 获取当前可以形成的面积 + 2.Min(height[l], height[r])*(r-l) : 获取当前可以形成的面积 3.Max(max, Min(height[l], height[r])*(r-l)): 获取目前最大面积 */ - max = Max(max, Min(height[l], height[r])*(r-l)) + ans = max(ans, min(height[l], height[r])*(r-l)) if height[l] < height[r] { l++ } else { r-- } } - return max + + return ans } -func Max(x, y int) int { +func max(x, y int) int { if x > y { return x } return y } -func Min(x, y int) int { +func min(x, y int) int { if x > y { return y } diff --git a/leetcode/1-100/0049.Group-Anagrams/Solution.go b/leetcode/1-100/0049.Group-Anagrams/Solution.go index db8090216..bc8720b3c 100644 --- a/leetcode/1-100/0049.Group-Anagrams/Solution.go +++ b/leetcode/1-100/0049.Group-Anagrams/Solution.go @@ -1,27 +1,23 @@ package Solution -func groupAnagrams(ss []string) [][]string { - tmp := make(map[int][]string, len(ss)/2) - for _, s := range ss { - c := encode(s) - tmp[c] = append(tmp[c], s) - } +import ( + "fmt" + "sort" +) - res := make([][]string, 0, len(tmp)) - for _, v := range tmp { - res = append(res, v) +func groupAnagrams(nums []string) [][]string { + ans := [][]string{{}} + m := map[string][]string{} + for _, s := range nums { + tmp := []byte(s) + sort.Slice(tmp, func(i, j int) bool { + return tmp[i] > tmp[j] + }) + m[string(tmp)] = append(m[string(tmp)], s) } - - return res -} - -// prime 与 A~Z 对应,英文中出现概率越大的字母,选用的质数越小 -var prime = []int{5, 71, 37, 29, 2, 53, 59, 19, 11, 83, 79, 31, 43, 13, 7, 67, 97, 23, 17, 3, 41, 73, 47, 89, 61, 101} - -func encode(s string) int { - res := 1 - for i := range s { - res *= prime[s[i]-'a'] + fmt.Println(m) + for _, v := range m { + ans = append(ans, v) } - return res + return ans } diff --git a/leetcode/1-100/0049.Group-Anagrams/Solution_test.go b/leetcode/1-100/0049.Group-Anagrams/Solution_test.go index c428b581e..8c4cca89f 100644 --- a/leetcode/1-100/0049.Group-Anagrams/Solution_test.go +++ b/leetcode/1-100/0049.Group-Anagrams/Solution_test.go @@ -2,36 +2,45 @@ package Solution import ( "fmt" + "reflect" + "runtime" + "strings" "testing" ) -func TestSolution(t *testing.T) { - // 测试用例 - cases := []struct { - name string - inputs []string - expect [][]string - }{ - { - "1 test 1", - []string{"eat", "tea", "tan", "ate", "nat", "bat"}, - [][]string{ - {"eat", "tea", "ate"}, - {"tan", "nat"}, - {"bat"}, - }, - }, - } +// Solution func Info +type SolutionFuncType func([]string) [][]string - // 开始测试 - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - got := groupAnagrams(c.inputs) - fmt.Println(got) - //if !reflect.DeepEqual(ret, c.expect) { - // t.Fatalf("expected: %v, but got: %v, with inputs: %v", - // c.expect, ret, c.inputs) - //} - }) +var SolutionFuncList = []SolutionFuncType{ + groupAnagrams, +} + +// Test case info struct +type Case struct { + name string + input []string + expect [][]string +} + +// Test case +var cases = []Case{ + { + name: "TestCase 1", + input: []string{"eat", "tea", "tan", "ate", "nat", "bat"}, + expect: [][]string{{"bat"}, {"nat", "tan"}, {"ate", "eat", "tea"}}, + }, +} + +// TestSolution Run test case for all solutions +func TestSolution(t *testing.T) { + 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) + fmt.Println(fmt.Printf("want: %+v \n got: %+v", c.expect, got)) + fmt.Println() + }) + } } } diff --git a/leetcode/1-100/0054.Spiral-Matrix/Solution.go b/leetcode/1-100/0054.Spiral-Matrix/Solution.go index d115ccf5e..7bfc285ce 100644 --- a/leetcode/1-100/0054.Spiral-Matrix/Solution.go +++ b/leetcode/1-100/0054.Spiral-Matrix/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func spiralOrder(matrix [][]int) []int { + var ( + rows, columns = len(matrix), len(matrix[0]) + order = make([]int, rows*columns) + index = 0 + left, right, top, bottom = 0, columns - 1, 0, rows - 1 + ) + if len(matrix) == 0 || len(matrix[0]) == 0 { + return order + } + for left <= right && top <= bottom { + for column := left; column <= right; column++ { + order[index] = matrix[top][column] + index++ + } + for row := top + 1; row <= bottom; row++ { + order[index] = matrix[row][right] + index++ + } + if left < right && top < bottom { + for column := right - 1; column > left; column-- { + order[index] = matrix[bottom][column] + index++ + } + for row := bottom; row > top; row-- { + order[index] = matrix[row][left] + index++ + } + } + left++ + right-- + top++ + bottom-- + } + return order } diff --git a/leetcode/1-100/0054.Spiral-Matrix/Solution_test.go b/leetcode/1-100/0054.Spiral-Matrix/Solution_test.go index 3d0df9a77..55a0e2681 100644 --- a/leetcode/1-100/0054.Spiral-Matrix/Solution_test.go +++ b/leetcode/1-100/0054.Spiral-Matrix/Solution_test.go @@ -1,38 +1,63 @@ package Solution import ( + "fmt" "reflect" + "runtime" + "strings" "testing" + + "github.com/stretchr/testify/assert" ) -func TestSolution(t *testing.T) { - // 测试用例 - cases := []struct { - name string - inputs bool - expect bool - }{ - {"TestCacse 1", true, true}, - {"TestCacse 1", true, true}, - {"TestCacse 1", false, false}, - } +// Solution func Info +type SolutionFuncType func([][]int) []int - // 开始测试 - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - ret := Solution(c.inputs) - if !reflect.DeepEqual(ret, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, ret, c.inputs) - } - }) - } +var SolutionFuncList = []SolutionFuncType{ + spiralOrder, } -// 压力测试 -func BenchmarkSolution(b *testing.B) { +// Test case info struct +type Case struct { + name string + input [][]int + expect []int } -// 使用案列 -func ExampleSolution() { +// Test case +var cases = []Case{ + { + name: "TestCase 1", + input: [][]int{ + {1, 2, 3}, + {4, 5, 6}, + {7, 8, 9}, + }, + expect: []int{1, 2, 3, 6, 9, 8, 7, 4, 5}, + }, + { + name: "TestCase 2", + input: [][]int{ + {1, 2, 3, 4}, + {5, 6, 7, 8}, + {9, 10, 11, 12}, + }, + expect: []int{1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7}, + }, +} + +// TestSolution Run test case for all solutions +func TestSolution(t *testing.T) { + ast := assert.New(t) + + 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) + }) + } + } } diff --git a/leetcode/1-100/0072.Edit-Distance/Solution.go b/leetcode/1-100/0072.Edit-Distance/Solution.go index 138cf943f..eb644daef 100644 --- a/leetcode/1-100/0072.Edit-Distance/Solution.go +++ b/leetcode/1-100/0072.Edit-Distance/Solution.go @@ -11,7 +11,6 @@ package Solution func minDistance(word1 string, word2 string) int { m, n := len(word1), len(word2) - dp := [][]int{} for i := 0; i <= m; i++ { dp = append(dp, make([]int, n+1)) @@ -33,8 +32,6 @@ func minDistance(word1 string, word2 string) int { } } } - // Print(dp) - return dp[m][n] } @@ -44,10 +41,3 @@ func min(x, y int) int { } return x } - -func max(x, y int) int { - if x > y { - return x - } - return y -} diff --git a/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution.go b/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution.go index d115ccf5e..615335529 100644 --- a/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution.go +++ b/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func setZeroes(matrix [][]int) { + zRow := make([]bool, len(matrix)) + zCol := make([]bool, len(matrix[0])) + + for i := range matrix { + for j, v := range matrix[i] { + if v == 0 { + zRow[i] = true + zCol[j] = true + } + } + } + + for i := range matrix { + for j := range matrix[i] { + if zRow[i] || zCol[j] { + matrix[i][j] = 0 + } + } + } } diff --git a/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution_test.go b/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution_test.go index 3d0df9a77..1fa9c9528 100644 --- a/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution_test.go +++ b/leetcode/1-100/0073.Set-Matrix-Zeroes/Solution_test.go @@ -1,38 +1,54 @@ package Solution import ( + "fmt" "reflect" + "runtime" + "strings" "testing" + + "github.com/stretchr/testify/assert" ) -func TestSolution(t *testing.T) { - // 测试用例 - cases := []struct { - name string - inputs bool - expect bool - }{ - {"TestCacse 1", true, true}, - {"TestCacse 1", true, true}, - {"TestCacse 1", false, false}, - } +// Solution func Info +type SolutionFuncType func([][]int) - // 开始测试 - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - ret := Solution(c.inputs) - if !reflect.DeepEqual(ret, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, ret, c.inputs) - } - }) - } +var SolutionFuncList = []SolutionFuncType{ + setZeroes, } -// 压力测试 -func BenchmarkSolution(b *testing.B) { +// Test case info struct +type Case struct { + name string + input [][]int + expect [][]int } -// 使用案列 -func ExampleSolution() { +// Test case +var cases = []Case{ + {name: "TestCase 1", input: [][]int{ + {1, 1, 1}, + {1, 0, 1}, + {1, 1, 1}, + }, expect: [][]int{ + {1, 0, 1}, + {0, 0, 0}, + {1, 0, 1}, + }}, +} + +// TestSolution Run test case for all solutions +func TestSolution(t *testing.T) { + ast := assert.New(t) + + 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) { + f(c.input) + ast.Equal(c.expect, c.input, + "func: %v case: %v ", funcName, c.name) + }) + } + } } diff --git a/leetcode/1-100/0099.Recover-Binary-Search-Tree/Solution.go b/leetcode/1-100/0099.Recover-Binary-Search-Tree/Solution.go index d115ccf5e..02eade853 100644 --- a/leetcode/1-100/0099.Recover-Binary-Search-Tree/Solution.go +++ b/leetcode/1-100/0099.Recover-Binary-Search-Tree/Solution.go @@ -3,3 +3,23 @@ package Solution func Solution(x bool) bool { return x } + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func inorderTraversal(root *TreeNode) (res []int) { + var dfs func(node *TreeNode) + dfs = func(node *TreeNode) { + if node == nil { + return + } + dfs(node.Left) + res = append(res, node.Val) + dfs(node.Right) + } + dfs(root) + return +} diff --git a/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go b/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go index 2198a3d80..41773613a 100644 --- a/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go +++ b/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go @@ -1,31 +1,22 @@ -package Soluation +package Solution import "sort" -var ( - p map[int]int - rank map[int]int -) - func longestConsecutive(nums []int) int { - l := len(nums) - if l < 1 { - return 0 - } - p, rank = initialize(nums) - hash := make(map[int]int) + ans := 0 + m := map[int]int{} + sort.Slice(nums, func(i, j int) bool { + return nums[i] < nums[j] + }) + for _, v := range nums { - hash[v] = 1 - if _, ok := hash[v-1]; ok { - union(v, v-1) - } - if _, ok := hash[v+1]; ok { - union(v, v+1) + if _, ok := m[v-1]; !ok { + m[v] = 1 + } else { + m[v] = m[v-1] + 1 } } - - ans := 0 - for _, v := range rank { + for _, v := range m { if v > ans { ans = v } @@ -33,37 +24,7 @@ func longestConsecutive(nums []int) int { return ans } -func initialize(nums []int) (map[int]int, map[int]int) { - p, rank = make(map[int]int), make(map[int]int) - for _, v := range nums { - p[v] = v - rank[v] = 1 - } - return p, rank -} - -func find(x int) int { - if p[x] != x { - p[x] = find(p[x]) - } - return p[x] -} - -func union(x, y int) { - x = find(x) - y = find(y) - if x != y { - if rank[x] >= rank[y] { - rank[x] += rank[y] - p[y] = x - } else { - rank[y] += rank[x] - p[x] = y - } - } -} - -func longestConsecutive1(nums []int) int { +func longestConsecutive2(nums []int) int { if len(nums) == 0 { return 0 } diff --git a/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution_test.go b/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution_test.go index 497d9f61b..c3aca72e4 100644 --- a/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution_test.go +++ b/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution_test.go @@ -1,43 +1,48 @@ -package Soluation +package Solution import ( + "fmt" "reflect" + "runtime" + "strings" "testing" + + "github.com/stretchr/testify/assert" ) -func TestSolution(t *testing.T) { - // 测试用例 - cases := []struct { - name string - inputs []int - expect int - }{ - { - "TestCases 1", - []int{100, 4, 200, 1, 3, 2}, - 4, - }, - } +// Solution func Info +type SolutionFuncType func([]int) int - // 开始测试 - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - got := longestConsecutive(c.inputs) - if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) - } - got = longestConsecutive1(c.inputs) - if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) - } - }) - } +var SolutionFuncList = []SolutionFuncType{ + longestConsecutive, + longestConsecutive2, } -// 压力测试 -func BenchmarkSolution(b *testing.B) { +// Test case info struct +type Case struct { + name string + input []int + expect int } -// 使用案列 -func ExampleSolution() { +// Test case +var cases = []Case{ + {name: "TestCase 1", input: []int{100, 4, 200, 1, 3, 2}, expect: 4}, + {name: "TestCase 2", input: []int{0, 3, 7, 2, 5, 8, 4, 6, 0, 1}, expect: 9}, +} + +// TestSolution Run test case for all solutions +func TestSolution(t *testing.T) { + ast := assert.New(t) + + 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) + }) + } + } } diff --git a/leetcode/101-200/0160.Intersection-of-Two-Linked-Lists/Solution.go b/leetcode/101-200/0160.Intersection-of-Two-Linked-Lists/Solution.go index 50ef0e86c..b84ad731d 100644 --- a/leetcode/101-200/0160.Intersection-of-Two-Linked-Lists/Solution.go +++ b/leetcode/101-200/0160.Intersection-of-Two-Linked-Lists/Solution.go @@ -18,3 +18,18 @@ func getIntersectionNode(headA, headB *ListNode) *ListNode { } return p } + +func getIntersectionNode2(headA, headB *ListNode) *ListNode { + m := map[*ListNode]bool{} + for tmp := headA; tmp != nil; tmp = tmp.Next { + m[tmp] = true + } + + for tmp := headB; tmp != nil; tmp = tmp.Next { + if _, ok := m[tmp]; ok { + return tmp + } + } + + return nil +} diff --git a/leetcode/201-300/0206.Reverse-Linked-List/Solution.go b/leetcode/201-300/0206.Reverse-Linked-List/Solution.go index c81499dc3..108b08726 100644 --- a/leetcode/201-300/0206.Reverse-Linked-List/Solution.go +++ b/leetcode/201-300/0206.Reverse-Linked-List/Solution.go @@ -1,6 +1,6 @@ package Solution -// 普通循环 +// 普通循环 func reverseList1(head *ListNode) *ListNode { var prev *ListNode for head != nil { @@ -9,7 +9,7 @@ func reverseList1(head *ListNode) *ListNode { return prev } -// 递归 +// 递归 func reverseList2(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head @@ -19,3 +19,10 @@ func reverseList2(head *ListNode) *ListNode { head.Next = p return p } + +func min[T ~int | ~float64](x, y T) T { + if x < y { + return x + } + return y +} diff --git a/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution.go b/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution.go index d115ccf5e..2c5f60785 100644 --- a/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution.go +++ b/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +func subarraySum(nums []int, k int) int { + ans := 0 + for right := 0; right < len(nums); right++ { + sum := 0 + for left := right; left >= 0; left-- { + sum += nums[left] + if sum == k { + ans++ + } + } + } + return ans +} + +func subarraySum_2(nums []int, k int) int { + ans, sum, m := 0, 0, map[int]int{ + 0: 1, + } + for i := 0; i < len(nums); i++ { + sum += nums[i] + if _, ok := m[sum-k]; ok { + ans += m[sum-k] + } + m[sum] += 1 + } + + return ans } diff --git a/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution_test.go b/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution_test.go index 14ff50eb4..757458dbd 100644 --- a/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution_test.go +++ b/leetcode/501-600/0560.Subarray-Sum-Equals-K/Solution_test.go @@ -1,39 +1,49 @@ package Solution import ( + "fmt" "reflect" - "strconv" + "runtime" + "strings" "testing" + + "github.com/stretchr/testify/assert" ) -func TestSolution(t *testing.T) { - // 测试用例 - cases := []struct { - name string - inputs bool - expect bool - }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, - } +// Solution func Info +type SolutionFuncType func([]int, int) int - // 开始测试 - for i, c := range cases { - t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) - } - }) - } +var SolutionFuncList = []SolutionFuncType{ + subarraySum, + subarraySum_2, } -// 压力测试 -func BenchmarkSolution(b *testing.B) { +// Test case info struct +type Case struct { + name string + nums []int + k int + expect int } -// 使用案列 -func ExampleSolution() { +// Test case +var cases = []Case{ + {name: "TestCase 1", nums: []int{1, 1, 1}, k: 2, expect: 2}, + {name: "TestCase 2", nums: []int{1, 2, 3}, k: 3, expect: 2}, +} + +// TestSolution Run test case for all solutions +func TestSolution(t *testing.T) { + ast := assert.New(t) + + 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.nums, c.k) + ast.Equal(c.expect, got, + "func: %v case: %v ", funcName, c.name) + }) + } + } } From 89ff72fb0341e202e5bd197f94bad45f52ff2e85 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 7 Nov 2023 21:23:19 +0800 Subject: [PATCH 042/253] Add solution and test-cases for problem 1921 --- .../README.md | 47 ++++++++++++++----- .../Solution.go | 32 ++++++++++++- .../Solution_test.go | 22 ++++----- 3 files changed, 75 insertions(+), 26 deletions(-) diff --git a/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md index 37fcb97eb..df666a98f 100755 --- a/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md +++ b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md @@ -1,28 +1,49 @@ # [1921.Eliminate Maximum Number of Monsters][title] -> [!WARNING|style:flat] -> 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 video game where you are defending your city from a group of `n` monsters. You are given a **0-indexed** integer array `dist` of size `n`, where `dist[i]` is the **initial distance** in kilometers of the ith monster from the city. + +The monsters walk toward the city at a **constant** speed. The speed of each monster is given to you in an integer array `speed` of size `n`, where `speed[i]` is the speed of the ith monster in kilometers per minute. + +You have a weapon that, once fully charged, can eliminate a **single** monster. However, the weapon takes **one minute** to charge. The weapon is fully charged at the very start. + +You lose when any monster reaches your city. If a monster reaches the city at the exact moment the weapon is fully charged, it counts as a **loss**, and the game ends before you can use your weapon. + +Return the **maximum** number of monsters that you can eliminate before you lose, or n if you can eliminate all the monsters before they reach the city. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: dist = [1,3,4], speed = [1,1,1] +Output: 3 +Explanation: +In the beginning, the distances of the monsters are [1,3,4]. You eliminate the first monster. +After a minute, the distances of the monsters are [X,2,3]. You eliminate the second monster. +After a minute, the distances of the monsters are [X,X,2]. You eliminate the thrid monster. +All 3 monsters can be eliminated. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Eliminate Maximum Number of Monsters -```go ``` +Input: dist = [1,1,2,3], speed = [1,1,1,1] +Output: 1 +Explanation: +In the beginning, the distances of the monsters are [1,1,2,3]. You eliminate the first monster. +After a minute, the distances of the monsters are [X,0,1,2], so you lose. +You can only eliminate 1 monster. +``` + +**Example 3:** +``` +Input: dist = [3,2,4], speed = [5,3,2] +Output: 1 +Explanation: +In the beginning, the distances of the monsters are [3,2,4]. You eliminate the first monster. +After a minute, the distances of the monsters are [X,0,2], so you lose. +You can only eliminate 1 monster. +``` ## 结语 diff --git a/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution.go b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution.go index d115ccf5e..5e8917755 100644 --- a/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution.go +++ b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func Solution(dist []int, speed []int) int { + minutes := make([]float64, len(dist)) + for i := 0; i < len(dist); i++ { + minutes[i] = float64(dist[i]) / float64(speed[i]) + } + sort.Float64s(minutes) + + cost := 0 + ans := 0 + full := true + for i := 0; i < len(minutes); i++ { + if full { + ans++ + full = false + continue + } + // need charge + leftMinutes := minutes[i] - float64(cost) + if leftMinutes <= 1.0 { + break + } + i-- + full = true + cost++ + } + return ans } diff --git a/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution_test.go b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution_test.go index 14ff50eb4..4de14e908 100644 --- a/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution_test.go +++ b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + dist, speed []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 4}, []int{1, 1, 1}, 3}, + {"TestCase2", []int{1, 1, 2, 3}, []int{1, 1, 1, 1}, 1}, + {"TestCase3", []int{3, 2, 4}, []int{5, 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.dist, c.speed) 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.dist, c.speed) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6921e112fe5ba5e0f349cc2c4d7c945cc5e5d2aa Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 9 Nov 2023 20:53:04 +0800 Subject: [PATCH 043/253] Add solution and test-cases for problem 1759 --- .../README.md | 40 +++++++++++++------ .../Solution.go | 17 +++++++- .../Solution_test.go | 14 +++---- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md index fd29f970f..46ace31ad 100755 --- a/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md +++ b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md @@ -1,28 +1,42 @@ # [1759.Count Number of Homogenous 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 number of **homogenous** substrings of `s`. Since the answer may be too large, return it **modulo** `10^9 + 7`. + +A string is **homogenous** if all the characters of the string are the same. + +A **substring** is a contiguous sequence of characters within a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abbcccaa" +Output: 13 +Explanation: The homogenous substrings are listed as below: +"a" appears 3 times. +"aa" appears 1 time. +"b" appears 2 times. +"bb" appears 1 time. +"c" appears 3 times. +"cc" appears 2 times. +"ccc" appears 1 time. +3 + 1 + 2 + 1 + 3 + 2 + 1 = 13. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Number of Homogenous Substrings -```go ``` +Input: s = "xy" +Output: 2 +Explanation: The homogenous substrings are "x" and "y". +``` + +**Example 3:** +``` +Input: s = "zzzzz" +Output: 15 +``` ## 结语 diff --git a/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution.go b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution.go index d115ccf5e..b0ef62a52 100644 --- a/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution.go +++ b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +const mod1795 = 1000000007 + +func Solution(s string) int { + ans := 0 + count := 1 + for idx := 1; idx < len(s); idx++ { + ans = (ans + count) % mod1795 + if s[idx] == s[idx-1] { + count++ + } else { + count = 1 + } + } + ans = (ans + count) % mod1795 + return ans } diff --git a/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution_test.go b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution_test.go index 14ff50eb4..37608a58f 100644 --- a/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution_test.go +++ b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-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", "abbcccaa", 13}, + {"TestCase2", "zy", 2}, + {"TestCase3", "zzzzz", 15}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 37c47216b324017e5ba9e259bd67a80acedeb5f5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 10 Nov 2023 21:58:08 +0800 Subject: [PATCH 044/253] Add solution and test-cases for problem 1743 --- .../README.md | 36 +++++++++------ .../Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 22 +++++----- 3 files changed, 76 insertions(+), 26 deletions(-) diff --git a/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/README.md b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/README.md index d2f9954be..3d567f4ba 100755 --- a/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/README.md +++ b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/README.md @@ -1,28 +1,38 @@ # [1743.Restore the Array From Adjacent 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 +There is an integer array `nums` that consists of `n` **unique** elements, but you have forgotten it. However, you do remember every pair of adjacent elements in `nums`. + +You are given a 2D integer array `adjacentPairs` of size `n - 1` where each `adjacentPairs[i] = [ui, vi]` indicates that the elements ui and vi are adjacent in `nums`. + +It is guaranteed that every adjacent pair of elements `nums[i]` and `nums[i+1]` will exist in `adjacentPairs`, either as `[nums[i], nums[i+1]]` or `[nums[i+1], nums[i]]`. The pairs can appear in **any order**. + +Return the original array `nums`. If there are multiple solutions, return **any of them**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: adjacentPairs = [[2,1],[3,4],[3,2]] +Output: [1,2,3,4] +Explanation: This array has all its adjacent pairs in adjacentPairs. +Notice that adjacentPairs[i] may not be in left-to-right order. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Restore the Array From Adjacent Pairs -```go ``` +Input: adjacentPairs = [[4,-2],[1,4],[-3,1]] +Output: [-2,4,1,-3] +Explanation: There can be negative numbers. +Another solution is [-3,1,4,-2], which would also be accepted. +``` + +**Example 3:** +``` +Input: adjacentPairs = [[100000,-100000]] +Output: [100000,-100000] +``` ## 结语 diff --git a/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution.go b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution.go index d115ccf5e..98200ef1c 100644 --- a/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution.go +++ b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(adjacentPairs [][]int) []int { + n := len(adjacentPairs) + 1 + adj := make(map[int][]int) + for _, item := range adjacentPairs { + a, b := item[0], item[1] + if _, ok := adj[a]; !ok { + adj[a] = make([]int, 0) + } + adj[a] = append(adj[a], b) + if _, ok := adj[b]; !ok { + adj[b] = make([]int, 0) + } + adj[b] = append(adj[b], a) + } + + left := 0 + index := 0 + for v, next := range adj { + if len(next) == 1 { + left = v + break + } + } + + ans := make([]int, n) + ans[0] = left + visited := make(map[int]struct{}) + visited[left] = struct{}{} + start := left + index = 1 + for index < n { + for _, next := range adj[start] { + if _, ok := visited[next]; ok { + continue + } + start = next + visited[next] = struct{}{} + ans[index] = next + index++ + } + } + return ans } diff --git a/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution_test.go b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution_test.go index 14ff50eb4..443ae2d96 100644 --- a/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution_test.go +++ b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/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 + expect []int + expect1 []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}, {2, 3}, {3, 4}, {4, 5}}, []int{1, 2, 3, 4, 5}, []int{5, 4, 3, 2, 1}}, + {"TestCase2", [][]int{{-2, 4}, {1, 4}, {-3, 1}}, []int{-2, 4, 1, -3}, []int{-3, 1, 4, -2}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + if !reflect.DeepEqual(got, c.expect) && !reflect.DeepEqual(got, c.expect1) { + t.Fatalf("expected: %v or %v, but got: %v, with inputs: %v", + c.expect, c.expect1, got, c.inputs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c87f7f328089261bc41e7da9cfbd46cfe6f5f702 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 11 Nov 2023 15:46:00 +0800 Subject: [PATCH 045/253] Add solution and test-cases for problem 2642 --- .../README.md | 36 +++++++++ .../Solution.go | 73 +++++++++++++++++- .../Solution_test.go | 22 +++--- .../graph3drawio-2.png | Bin 0 -> 16632 bytes 4 files changed, 119 insertions(+), 12 deletions(-) create mode 100644 leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/README.md create mode 100644 leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/graph3drawio-2.png diff --git a/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/README.md b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/README.md new file mode 100644 index 000000000..5609c5571 --- /dev/null +++ b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/README.md @@ -0,0 +1,36 @@ +# [2642.Design Graph With Shortest Path Calculator][title] + +## Description +There is a **directed weighted** graph that consists of `n` nodes numbered from `0` to `n - 1`. The edges of the graph are initially represented by the given array `edges` where `edges[i] = [fromi, toi, edgeCosti]` meaning that there is an edge from fromi to toi with the cost edgeCosti. + +Implement the `Graph` class: + +- `Graph(int n, int[][] edges)` initializes the object with `n` nodes and the given edges. +- `addEdge(int[] edge)` adds an edge to the list of edges where `edge = [from, to, edgeCost]`. It is guaranteed that there is no edge between the two nodes before adding this one. +- `int shortestPath(int node1, int node2)` returns the **minimum** cost of a path from `node1` to `node2`. If no path exists, return `-1`. The cost of a path is the sum of the costs of the edges in the path. + +**Example 1:** + +![example1](./graph3drawio-2.png) + +``` +Input +["Graph", "shortestPath", "shortestPath", "addEdge", "shortestPath"] +[[4, [[0, 2, 5], [0, 1, 2], [1, 2, 1], [3, 0, 3]]], [3, 2], [0, 3], [[1, 3, 4]], [0, 3]] +Output +[null, 6, -1, null, 6] + +Explanation +Graph g = new Graph(4, [[0, 2, 5], [0, 1, 2], [1, 2, 1], [3, 0, 3]]); +g.shortestPath(3, 2); // return 6. The shortest path from 3 to 2 in the first diagram above is 3 -> 0 -> 1 -> 2 with a total cost of 3 + 2 + 1 = 6. +g.shortestPath(0, 3); // return -1. There is no path from 0 to 3. +g.addEdge([1, 3, 4]); // We add an edge from node 1 to node 3, and we get the second diagram above. +g.shortestPath(0, 3); // return 6. The shortest path from 0 to 3 now is 0 -> 1 -> 3 with a total cost of 2 + 4 = 6. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-graph-with-shortest-path-calculator +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go index d115ccf5e..bdd15a734 100755 --- a/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go +++ b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go @@ -1,5 +1,74 @@ package Solution -func Solution(x bool) bool { - return x +type Graph struct { + adj [][]int + n int +} + +func Constructor2642(n int, edges [][]int) Graph { + adj := make([][]int, n) + for i := 0; i < n; i++ { + adj[i] = make([]int, n) + } + for _, edge := range edges { + f, t, w := edge[0], edge[1], edge[2] + adj[f][t] = w + } + return Graph{adj: adj, n: n} +} + +func (this *Graph) AddEdge(edge []int) { + f, t, w := edge[0], edge[1], edge[2] + this.adj[f][t] = w +} + +func (this *Graph) ShortestPath(node1 int, node2 int) int { + distance := make([]int, this.n) + for i := 0; i < this.n; i++ { + distance[i] = -1 + } + v := make([]bool, this.n) + distance[node1] = 0 + for i := 0; i < this.n-1; i++ { + seletNode := -1 + for from, dis := range distance { + if dis == -1 { + continue + } + if !v[from] && (seletNode == -1 || dis < distance[seletNode]) { + seletNode = from + } + } + if seletNode == -1 { + break + } + v[seletNode] = true + for next, dis := range this.adj[seletNode] { + if dis == 0 { + continue + } + if distance[next] == -1 || dis+distance[seletNode] < distance[next] { + distance[next] = dis + distance[seletNode] + } + } + } + return distance[node2] +} + +type opt struct { + name string + v []int +} + +func Solution(n int, edges [][]int, opts []opt) []int { + c := Constructor2642(n, edges) + ans := make([]int, 0) + for _, op := range opts { + if op.name == "s" { + ans = append(ans, c.ShortestPath(op.v[0], op.v[1])) + continue + } + c.AddEdge(op.v) + } + return ans } diff --git a/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution_test.go b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution_test.go index 14ff50eb4..169c75b62 100755 --- a/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution_test.go +++ b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution_test.go @@ -10,30 +10,32 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + edges [][]int + opts []opt + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{ + {0, 2, 5}, {0, 1, 2}, {1, 2, 1}, {3, 0, 3}, + }, []opt{{"s", []int{3, 2}}, {"s", []int{0, 3}}, {"a", []int{1, 3, 4}}, {"s", []int{0, 3}}}, []int{6, -1, 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.edges, 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 %v", + c.expect, got, c.n, c.edges, c.opts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/graph3drawio-2.png b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/graph3drawio-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ea643a5b0a5e2a32b20057900dfa7e41dfd8ae GIT binary patch literal 16632 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 ShvX#Sj|N; Date: Sun, 12 Nov 2023 16:51:19 +0800 Subject: [PATCH 046/253] Add solution and test-cases for problem 815 --- leetcode/801-900/0815.Bus-Routes/README.md | 28 ++++---- leetcode/801-900/0815.Bus-Routes/Solution.go | 64 ++++++++++++++++++- .../801-900/0815.Bus-Routes/Solution_test.go | 26 ++++---- 3 files changed, 91 insertions(+), 27 deletions(-) diff --git a/leetcode/801-900/0815.Bus-Routes/README.md b/leetcode/801-900/0815.Bus-Routes/README.md index d90d38d92..9e90f7382 100644 --- a/leetcode/801-900/0815.Bus-Routes/README.md +++ b/leetcode/801-900/0815.Bus-Routes/README.md @@ -1,28 +1,28 @@ # [815.Bus Routes][title] -> [!WARNING|style:flat] -> 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 `routes` representing bus routes where `routes[i]` is a bus route that the ith bus repeats forever. + +- For example, if `routes[0] = [1, 5, 7]`, this means that the 0th bus travels in the sequence `1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> ...` forever. + +You will start at the bus stop `source` (You are not on any bus initially), and you want to go to the bus stop `target`. You can travel between bus stops by buses only. + +Return the least number of buses you must take to travel from `source` to `target`. Return `-1` if it is not possible. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: routes = [[1,2,7],[3,6,7]], source = 1, target = 6 +Output: 2 +Explanation: The best strategy is take the first bus to the bus stop 7, then take the second bus to the bus stop 6. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Bus Routes -```go ``` - +Input: routes = [[7,12],[4,5,15],[6],[15,19],[9,12,13]], source = 15, target = 12 +Output: -1 +``` ## 结语 diff --git a/leetcode/801-900/0815.Bus-Routes/Solution.go b/leetcode/801-900/0815.Bus-Routes/Solution.go index d115ccf5e..bec688b30 100644 --- a/leetcode/801-900/0815.Bus-Routes/Solution.go +++ b/leetcode/801-900/0815.Bus-Routes/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(routes [][]int, source int, target int) int { + if source == target { + return 0 + } + // 记录每个station在某个车的什么index上面 + stationInCar := make(map[int]map[int]int) + // 记录哪些车的某个站会经过target + targetInCar := make(map[int]struct{}) + sourceInCar := make([][3]int, 0) + carCrossStation := make(map[int][]int) + visited := make(map[int]map[int]struct{}) + + for car, route := range routes { + visited[car] = make(map[int]struct{}) + + stationInCar[car] = make(map[int]int) + for idx, station := range route { + stationInCar[car][station] = idx + if station == target { + targetInCar[car] = struct{}{} + } + if station == source { + sourceInCar = append(sourceInCar, [3]int{car, station, 1}) + } + if _, ok := carCrossStation[station]; !ok { + carCrossStation[station] = make([]int, 0) + } + carCrossStation[station] = append(carCrossStation[station], car) + } + } + ans := -1 + for len(sourceInCar) > 0 { + nq := make([][3]int, 0) + for _, s := range sourceInCar { + curCar, curStation, curCost := s[0], s[1], s[2] + if _, ok := targetInCar[curCar]; ok { + if ans == -1 || curCost < ans { + ans = curCost + } + continue + } + for _, next := range carCrossStation[curStation] { + if next == curCar { + curIndex := stationInCar[curCar][curStation] + nextIndex := (curIndex + 1) % len(stationInCar[curCar]) + if _, ok := visited[curCar][routes[curCar][nextIndex]]; ok { + continue + } + visited[curCar][routes[curCar][nextIndex]] = struct{}{} + nq = append(nq, [3]int{curCar, routes[curCar][nextIndex], curCost}) + } else { + if _, ok := visited[next][curStation]; ok { + continue + } + visited[next][curStation] = struct{}{} + nq = append(nq, [3]int{next, curStation, curCost + 1}) + } + } + } + sourceInCar = nq + } + return ans } diff --git a/leetcode/801-900/0815.Bus-Routes/Solution_test.go b/leetcode/801-900/0815.Bus-Routes/Solution_test.go index 14ff50eb4..5db6c97d7 100644 --- a/leetcode/801-900/0815.Bus-Routes/Solution_test.go +++ b/leetcode/801-900/0815.Bus-Routes/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 + source, target int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 2, 7}, {3, 6, 7}, + }, 1, 6, 2}, + {"TestCase2", [][]int{ + {7, 12}, {4, 5, 15}, {6}, {15, 19}, {9, 12, 13}, + }, 15, 12, -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.source, 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 %v", + c.expect, got, c.inputs, c.source, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 089e5965791fd5552a294c3fb419fb791bd7fa9d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 13 Nov 2023 20:46:36 +0800 Subject: [PATCH 047/253] Add solution and test-cases for problem 2785 --- .../2785.Sort-Vowels-in-a-String/README.md | 34 +++++++++++++++++++ .../2785.Sort-Vowels-in-a-String/Solution.go | 29 ++++++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 leetcode/2701-2800/2785.Sort-Vowels-in-a-String/README.md diff --git a/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/README.md b/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/README.md new file mode 100644 index 000000000..89752e24e --- /dev/null +++ b/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/README.md @@ -0,0 +1,34 @@ +# [2785. Sort Vowels in a String][title] + +## Description +Given a **0-indexed** string `s`, **permute** `s` to get a new string `t` such that: + +- All consonants remain in their original places. More formally, if there is an index `i` with `0 <= i < s.length` such that `s[i]` is a consonant, then `t[i] = s[i]`. +- The vowels must be sorted in the **nondecreasing** order of their **ASCII** values. More formally, for pairs of indices `i`, `j` with `0 <= i < j < s.length` such that `s[i]` and `s[j]` are vowels, then `t[i]` must not have a higher ASCII value than `t[j]`. + +Return the resulting string. + +The vowels are `'a'`, `'e'`, `'i'`, `'o'`, and `'u'`, and they can appear in lowercase or uppercase. Consonants comprise all letters that are not vowels. + +**Example 1:** + +``` +Input: s = "lEetcOde" +Output: "lEOtcede" +Explanation: 'E', 'O', and 'e' are the vowels in s; 'l', 't', 'c', and 'd' are all consonants. The vowels are sorted according to their ASCII values, and the consonants remain in the same places. +``` + +**Example 2:** + +``` +Input: s = "lYmpH" +Output: "lYmpH" +Explanation: There are no vowels in s (all characters in s are consonants), so we return "lYmpH". +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sort-vowels-in-a-string +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution.go b/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution.go index d115ccf5e..287f15336 100755 --- a/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution.go +++ b/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func isVowel2785(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(s string) string { + vowels := make([]byte, 0) + indies := make([]int, 0) + t := make([]byte, len(s)) + for idx, b := range []byte(s) { + if isVowel2785(b) { + vowels = append(vowels, b) + indies = append(indies, idx) + continue + } + t[idx] = b + } + sort.Slice(vowels, func(i, j int) bool { + return vowels[i] < vowels[j] + }) + for idx, targetIdx := range indies { + t[targetIdx] = vowels[idx] + } + + return string(t) } diff --git a/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution_test.go b/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution_test.go index 14ff50eb4..dd533319e 100755 --- a/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution_test.go +++ b/leetcode/2701-2800/2785.Sort-Vowels-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 string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "lEetcOde", "lEOtcede"}, + {"TestCase2", "lYmpH", "lYmpH"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7259bdd0a3a95e9a6fe1aa933625f0c92e2f55f5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 14 Nov 2023 20:57:39 +0800 Subject: [PATCH 048/253] Add solution and test-cases for problem 1930 --- .../README.md | 44 +++++++++++++------ .../Solution.go | 40 ++++++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md index 33fbb78c7..70f2764cb 100755 --- a/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md +++ b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md @@ -1,28 +1,46 @@ # [1930.Unique Length-3 Palindromic 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 +Given a string `s`, return the number of **unique palindromes of length three** that are a **subsequence** of `s`. + +Note that even if there are multiple ways to obtain the same subsequence, it is still only counted **once**. + +A **palindrome** is a string that reads the same forwards and backwards. + +A **subsequence** of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters. + +- For example, `"ace"` is a subsequence of `"abcde"`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aabca" +Output: 3 +Explanation: The 3 palindromic subsequences of length 3 are: +- "aba" (subsequence of "aabca") +- "aaa" (subsequence of "aabca") +- "aca" (subsequence of "aabca") ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Unique Length-3 Palindromic Subsequences -```go ``` +Input: s = "adc" +Output: 0 +Explanation: There are no palindromic subsequences of length 3 in "adc". +``` + +**Example 3:** +``` +Input: s = "bbcbaba" +Output: 4 +Explanation: The 4 palindromic subsequences of length 3 are: +- "bbb" (subsequence of "bbcbaba") +- "bcb" (subsequence of "bbcbaba") +- "bab" (subsequence of "bbcbaba") +- "aba" (subsequence of "bbcbaba") +``` ## 结语 diff --git a/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution.go b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution.go index d115ccf5e..a7b667dca 100644 --- a/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution.go +++ b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + firstIndex := [26]int{} + lastIndex := [26]int{} + chars := make([][26]int, len(s)) + for i := 0; i < 26; i++ { + firstIndex[i] = -1 + lastIndex[i] = -1 + } + + for i := 0; i < len(s); i++ { + if firstIndex[s[i]-'a'] == -1 { + firstIndex[s[i]-'a'] = i + } + lastIndex[s[i]-'a'] = i + chars[i][s[i]-'a']++ + if i != 0 { + for idx := 0; idx < 26; idx++ { + chars[i][idx] += chars[i-1][idx] + } + } + } + + ans := 0 + for i := 0; i < 26; i++ { + first := firstIndex[i] + last := lastIndex[i] + if first == last { + continue + } + byteCount := 0 + for i := 0; i < 26; i++ { + if r := chars[last-1][i] - chars[first][i]; r > 0 { + byteCount++ + } + } + ans += byteCount + } + return ans } diff --git a/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution_test.go b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution_test.go index 14ff50eb4..78613498d 100644 --- a/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution_test.go +++ b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/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", "aabca", 3}, + {"TestCase2", "abc", 0}, + {"TestCase3", "bbcbaba", 4}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 20760b4b0b3920612b907c1000ea687ebf6e2b89 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 15 Nov 2023 20:47:38 +0800 Subject: [PATCH 049/253] Add solution and test-cases for problem 1846 --- .../README.md | 46 +++++++++++++------ .../Solution.go | 15 +++++- .../Solution_test.go | 14 +++--- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md index 76dd78e3b..99f7e14e3 100755 --- a/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md +++ b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md @@ -1,28 +1,48 @@ # [1846.Maximum Element After Decreasing and Rearranging][title] -> [!WARNING|style:flat] -> 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 positive integers `arr`. Perform some operations (possibly none) on `arr` so that it satisfies these conditions: + +- The value of the **first** element in `arr` must be `1`. +- The absolute difference between any 2 adjacent elements must be **less than or equal to** `1`. In other words, `abs(arr[i] - arr[i - 1]) <= 1` for each `i` where `1 <= i < arr.length` (**0-indexed**). `abs(x)` is the absolute value of `x`. +There are 2 types of operations that you can perform any number of times: + +- **Decrease** the value of any element of `arr` to a **smaller positive integer**. +- **Rearrange** the elements of `arr` to be in any order. + +Return the **maximum** possible value of an element in arr after performing the operations to satisfy the conditions. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [2,2,1,2,1] +Output: 2 +Explanation: +We can satisfy the conditions by rearranging arr so it becomes [1,2,2,2,1]. +The largest element in arr is 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Element After Decreasing and Rearranging -```go ``` +Input: arr = [100,1,1000] +Output: 3 +Explanation: +One possible way to satisfy the conditions is by doing the following: +1. Rearrange arr so it becomes [1,100,1000]. +2. Decrease the value of the second element to 2. +3. Decrease the value of the third element to 3. +Now arr = [1,2,3], which satisfies the conditions. +The largest element in arr is 3. +``` + +**Example 3:** +``` +Input: arr = [1,2,3,4,5] +Output: 5 +Explanation: The array already satisfies the conditions, and the largest element is 5. +``` ## 结语 diff --git a/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution.go b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution.go index d115ccf5e..ae5803898 100644 --- a/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution.go +++ b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(arr []int) int { + sort.Ints(arr) + arr[0] = 1 + for idx := 1; idx < len(arr); idx++ { + diff := arr[idx] - arr[idx-1] + if diff > 1 { + arr[idx] = arr[idx-1] + 1 + continue + } + } + return arr[len(arr)-1] } diff --git a/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution_test.go b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution_test.go index 14ff50eb4..22b9d2f4d 100644 --- a/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution_test.go +++ b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/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, 1}, 2}, + {"TestCase2", []int{100, 1, 1000}, 3}, + {"TestCase3", []int{1, 2, 3, 4, 5}, 5}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6407c121e4f1874e7694593dff93bc6328510cd3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 16 Nov 2023 21:20:26 +0800 Subject: [PATCH 050/253] Add solution and test-cases for problem 1980 --- .../1980.Find-Unique-Binary-String/README.md | 29 ++++++++++--------- .../Solution.go | 27 +++++++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md b/leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md index 5a85af8cb..7eb7a1daa 100755 --- a/leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md +++ b/leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md @@ -1,28 +1,31 @@ # [1980.Find Unique 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 an array of strings `nums` containing `n` **unique** binary strings each of length `n`, return a binary string of length `n` that **does not appear** in `nums`. If there are multiple answers, you may return **any** of them. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = ["01","10"] +Output: "11" +Explanation: "11" does not appear in nums. "00" would also be correct. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Unique Binary String -```go +``` +Input: nums = ["00","01"] +Output: "11" +Explanation: "11" does not appear in nums. "10" would also be correct. ``` +**Example 3:** + +``` +Input: nums = ["111","011","001"] +Output: "101" +Explanation: "101" does not appear in nums. "000", "010", "100", and "110" would also be correct. +``` ## 结语 diff --git a/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go b/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go index d115ccf5e..49024eb53 100644 --- a/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go +++ b/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func addOne(bs []byte) { + for i := len(bs) - 1; i >= 0; i-- { + if bs[i] == '0' { + bs[i] = '1' + break + } + bs[i] = '0' + } +} +func Solution(nums []string) string { + l := len(nums) + bs := make([]byte, l) + set := make(map[string]struct{}) + for i := range bs { + bs[i] = '0' + set[nums[i]] = struct{}{} + } + + for i := 0; i < (1< Date: Fri, 17 Nov 2023 20:47:47 +0800 Subject: [PATCH 051/253] Add solution and test-cases for problem 191 --- leetcode/101-200/0191.Number-of-1-Bits/Solution.go | 9 +++++++-- .../101-200/0191.Number-of-1-Bits/Solution_test.go | 14 +++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/leetcode/101-200/0191.Number-of-1-Bits/Solution.go b/leetcode/101-200/0191.Number-of-1-Bits/Solution.go index d115ccf5e..440b27fbe 100644 --- a/leetcode/101-200/0191.Number-of-1-Bits/Solution.go +++ b/leetcode/101-200/0191.Number-of-1-Bits/Solution.go @@ -1,5 +1,10 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num uint32) int { + ans := 0 + for num > 0 { + ans++ + num = num & (num - 1) + } + return ans } diff --git a/leetcode/101-200/0191.Number-of-1-Bits/Solution_test.go b/leetcode/101-200/0191.Number-of-1-Bits/Solution_test.go index 14ff50eb4..a133a3d51 100644 --- a/leetcode/101-200/0191.Number-of-1-Bits/Solution_test.go +++ b/leetcode/101-200/0191.Number-of-1-Bits/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs uint32 + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 0b00000000000000000000000000001011, 3}, + {"TestCase2", 0b00000000000000000000000010000000, 1}, + {"TestCase3", 0b11111111111111111111111111111101, 31}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3083d2677cb9f594d7018bd387b647541dab260c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 18 Nov 2023 17:43:07 +0800 Subject: [PATCH 052/253] Add solution and test-cases for problem 1838 --- .../README.md | 36 ++++++++++------- .../Solution.go | 39 ++++++++++++++++++- .../Solution_test.go | 23 ++++++----- 3 files changed, 73 insertions(+), 25 deletions(-) diff --git a/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md index ff4cd8471..77c4973b7 100755 --- a/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md +++ b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md @@ -1,28 +1,38 @@ # [1838.Frequency of the Most Frequent 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 +The **frequency** of an element is the number of times it occurs in an array. + +You are given an integer array `nums` and an integer `k`. In one operation, you can choose an index of `nums` and increment the element at that index by `1`. + +Return the **maximum possible frequency** of an element after performing **at most** `k` operations. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,4], k = 5 +Output: 3 +Explanation: Increment the first element three times and the second element two times to make nums = [4,4,4]. +4 has a frequency of 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Frequency of the Most Frequent Element -```go ``` +Input: nums = [1,4,8,13], k = 5 +Output: 2 +Explanation: There are multiple optimal solutions: +- Increment the first element three times to make nums = [4,4,8,13]. 4 has a frequency of 2. +- Increment the second element four times to make nums = [1,8,8,13]. 8 has a frequency of 2. +- Increment the third element five times to make nums = [1,4,13,13]. 13 has a frequency of 2. +``` + +**Example 3:** +``` +Input: nums = [3,9,6], k = 2 +Output: 1 +``` ## 结语 diff --git a/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution.go b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution.go index d115ccf5e..6583da58f 100644 --- a/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution.go +++ b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int) int { + sort.Ints(nums) + prefixSum := make([]int64, len(nums)) + prefixSum[0] = int64(nums[0]) + count := make(map[int]int) + count[nums[0]]++ + for i := 1; i < len(nums); i++ { + prefixSum[i] = int64(nums[i]) + prefixSum[i-1] + count[nums[i]]++ + } + ans := count[nums[0]] + v := make(map[int]struct{}) + v[nums[0]] = struct{}{} + + for idx := 1; idx < len(nums); idx++ { + if _, ok := v[nums[idx]]; ok { + continue + } + v[nums[idx]] = struct{}{} + i := sort.Search(idx, func(i int) bool { + sum := int64(nums[idx]) * int64(idx-i) + psum := int64(0) + if i == 0 { + psum = prefixSum[idx-1] + } else { + psum = prefixSum[idx-1] - prefixSum[i-1] + } + diff := sum - psum + return diff <= int64(k) + }) + if r := idx - i + count[nums[idx]]; r > ans { + ans = r + } + } + return ans } diff --git a/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution_test.go b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution_test.go index 14ff50eb4..7fb6b2316 100644 --- a/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution_test.go +++ b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution_test.go @@ -10,30 +10,33 @@ 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{9940, 9995, 9944, 9937, 9941, 9952, 9907, 9952, 9987, 9964, 9940, 9914, 9941, 9933, 9912, 9934, 9980, 9907, 9980, 9944, 9910, 9997}, 7925, 22}, + {"TestCase2", []int{1}, 1, 1}, + {"TestCase3", []int{1, 2, 4}, 5, 3}, + {"TestCase4", []int{1, 4, 8, 13}, 5, 2}, + {"TestCase5", []int{3, 9, 6}, 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 8be1f5c3be9a5de6d2a9cd88591997b8eac6a190 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 19 Nov 2023 12:30:50 +0800 Subject: [PATCH 053/253] Add solution and test-cases for problem 1887 --- .../README.md | 42 +++++++++++++------ .../Solution.go | 22 +++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 56 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/README.md b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/README.md index cda492638..546983bce 100755 --- a/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/README.md +++ b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/README.md @@ -1,28 +1,44 @@ # [1887.Reduction Operations to Make the Array Elements 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 +Given an integer array `nums`, your goal is to make all elements in `nums` equal. To complete one operation, follow these steps: + +1. Find the **largest** value in `nums`. Let its index be `i` (**0-indexed**) and its value be `largest`. If there are multiple elements with the largest value, pick the smallest `i`. +2. Find the **next largest** value in `nums` **strictly smaller** than `largest`. Let its value be `nextLargest`. +3. Reduce `nums[i]` to `nextLargest`. + +Return the number of operations to make all elements in `nums` equal. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [5,1,3] +Output: 3 +Explanation: It takes 3 operations to make all elements in nums equal: +1. largest = 5 at index 0. nextLargest = 3. Reduce nums[0] to 3. nums = [3,1,3]. +2. largest = 3 at index 0. nextLargest = 1. Reduce nums[0] to 1. nums = [1,1,3]. +3. largest = 3 at index 2. nextLargest = 1. Reduce nums[2] to 1. nums = [1,1,1]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reduction Operations to Make the Array Elements Equal -```go ``` +Input: nums = [1,1,1] +Output: 0 +Explanation: All elements in nums are already equal. +``` + +**Example 3:** +``` +Input: nums = [1,1,2,2,3] +Output: 4 +Explanation: It takes 4 operations to make all elements in nums equal: +1. largest = 3 at index 4. nextLargest = 2. Reduce nums[4] to 2. nums = [1,1,2,2,2]. +2. largest = 2 at index 2. nextLargest = 1. Reduce nums[2] to 1. nums = [1,1,1,2,2]. +3. largest = 2 at index 3. nextLargest = 1. Reduce nums[3] to 1. nums = [1,1,1,1,2]. +4. largest = 2 at index 4. nextLargest = 1. Reduce nums[4] to 1. nums = [1,1,1,1,1]. +``` ## 结语 diff --git a/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution.go b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution.go index d115ccf5e..a7964bea1 100644 --- a/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution.go +++ b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + count := make(map[int]int) + distinct := make([]int, 0) + for _, n := range nums { + count[n]++ + if count[n] == 1 { + distinct = append(distinct, n) + } + } + + sort.Ints(distinct) + ans, sum := 0, 0 + for i := len(distinct) - 1; i > 0; i-- { + sum += count[distinct[i]] + ans += sum + } + + return ans } diff --git a/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution_test.go b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution_test.go index 14ff50eb4..6e68ca6fa 100644 --- a/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution_test.go +++ b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/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, 1, 3}, 3}, + {"TestCase2", []int{1, 1, 1}, 0}, + {"TestCase3", []int{1, 1, 2, 2, 3}, 4}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f0cec9b59753d03946499d8cda9e3ad8c5ea1759 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 21 Nov 2023 23:27:48 +0800 Subject: [PATCH 054/253] Add solution and test-cases for problem 1814 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 27 +++++++++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md index 9ef197ae3..c36e45ab7 100755 --- a/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md +++ b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md @@ -1,28 +1,29 @@ # [1814.Count Nice 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 +You are given an array `nums` consists of non-negative integers. Let us define `rev(x)` as the reverse of the non-negative integer `x`. For example, `rev(123) = 321`, and `rev(120) = 21`. A pair of indices (`i, j`) is **nice** if it satisfies all of the following conditions: + +- `0 <= i < j < nums.length` +- `nums[i] + rev(nums[j]) == nums[j] + rev(nums[i])` + +Return the number of nice pairs of indices. Since that number can be too large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [42,11,1,97] +Output: 2 +Explanation: The two pairs are: + - (0,3) : 42 + rev(97) = 42 + 79 = 121, 97 + rev(42) = 97 + 24 = 121. + - (1,2) : 11 + rev(1) = 11 + 1 = 12, 1 + rev(11) = 1 + 11 = 12. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Nice Pairs in an Array -```go ``` - +Input: nums = [13,10,35,24,76] +Output: 4 +``` ## 结语 diff --git a/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution.go b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution.go index d115ccf5e..be825a1fb 100644 --- a/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution.go +++ b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +const mod1814 = 1000000007 + +func convert1814(n int) int { + base := 0 + for n > 0 { + x := n % 10 + n /= 10 + base = base*10 + x + } + return base +} + +// num[i] + rev(nums[j]) = nums[j] + rev(nums[i]) +// nums[i]- rev(nums[i]) = nums[j] - rev(nums[j]) +func Solution(nums []int) int { + count := make(map[int]int) + for _, n := range nums { + x := n - convert1814(n) + count[x]++ + } + ans := 0 + for _, c := range count { + ans = (ans + (c-1)*c/2) % mod1814 + } + return ans } diff --git a/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution_test.go b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution_test.go index 14ff50eb4..9a517da0d 100644 --- a/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution_test.go +++ b/leetcode/1801-1900/1814.Count-Nice-Pairs-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{42, 11, 1, 97}, 2}, + {"TestCase2", []int{13, 10, 35, 24, 76}, 4}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 51b411b6942b5f8c91aa0f7c7ae152118ee04e88 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 23 Nov 2023 23:30:46 +0800 Subject: [PATCH 055/253] Add solution and test-cases for problem 1630 --- .../1630.Arithmetic-Subarrays/README.md | 39 ++++++++++++------- .../1630.Arithmetic-Subarrays/Solution.go | 23 ++++++++++- .../Solution_test.go | 16 ++++---- 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md b/leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md index 732fb0f08..18eec8876 100755 --- a/leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md +++ b/leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md @@ -1,28 +1,39 @@ # [1630.Arithmetic 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 +A sequence of numbers is called **arithmetic** if it consists of at least two elements, and the difference between every two consecutive elements is the same. More formally, a sequence `s` is arithmetic if and only if `s[i+1] - s[i] == s[1] - s[0]` for all valid `i`. + +For example, these are **arithmetic** sequences: + +> 1, 3, 5, 7, 9 +> 7, 7, 7, 7 +> 3, -1, -5, -9 + +The following sequence is not **arithmetic**: + +> 1, 1, 2, 5, 7 + +You are given an array of `n` integers, `nums`, and two arrays of `m` integers each, `l` and `r`, representing the `m` range queries, where the ith query is the range `[l[i], r[i]]`. All the arrays are **0-indexed**. + +Return a list of `boolean` elements `answer`, where `answer[i]` is `true` if the subarray `nums[l[i]], nums[l[i]+1], ... , nums[r[i]]` can be **rearranged** to form an **arithmetic** sequence, and `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,6,5,9,3,7], l = [0,0,2], r = [2,3,5] +Output: [true,false,true] +Explanation: +In the 0th query, the subarray is [4,6,5]. This can be rearranged as [6,5,4], which is an arithmetic sequence. +In the 1st query, the subarray is [4,6,5,9]. This cannot be rearranged as an arithmetic sequence. +In the 2nd query, the subarray is [5,9,3,7]. This can be rearranged as [3,5,7,9], which is an arithmetic sequence. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Arithmetic Subarrays -```go ``` - +Input: nums = [-12,-9,-3,-12,-6,15,20,-25,-20,-15,-10], l = [0,1,6,4,8,7], r = [4,4,9,7,9,10] +Output: [false,true,false,false,true,true] +``` ## 结语 diff --git a/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go index d115ccf5e..3c1be231b 100644 --- a/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go +++ b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, l []int, r []int) []bool { + ans := make([]bool, len(l)) + for i := 0; i < len(l); i++ { + s, e := l[i], r[i] + c := make([]int, e-s+1) + copy(c, nums[s:e+1]) + sort.Ints(c) + ok := true + diff := -1 + for i := 1; i < len(c); i++ { + if diff != -1 && c[i]-c[i-1] != diff { + ok = false + break + } + diff = c[i] - c[i-1] + } + ans[i] = ok + } + return ans } diff --git a/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go index 14ff50eb4..4bb6101e7 100644 --- a/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go +++ b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go @@ -10,18 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + l, r []int + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 6, 5, 9, 3, 7}, []int{0, 0, 2}, []int{2, 3, 5}, []bool{true, false, true}}, + {"TestCase2", []int{-12, -9, -3, -12, -6, 15, 20, -25, -20, -15, -10}, []int{0, 1, 6, 4, 8, 7}, []int{4, 4, 9, 7, 9, 10}, []bool{false, true, false, false, true, true}}, } // 开始测试 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.l, c.r) 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 932e6dc277b7e4435da94d2a26c5006f66ed3ec4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 25 Nov 2023 13:20:25 +0800 Subject: [PATCH 056/253] Add solution and test-cases for problem 1685 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 23 +++++++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/README.md b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/README.md index 957a1d66f..0cb78f465 100755 --- a/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/README.md +++ b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/README.md @@ -1,28 +1,29 @@ # [1685.Sum of Absolute Differences in a Sorted 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` sorted in **non-decreasing** order. + +Build and return an integer array `result` with the same length as `nums` such that `result[i]` is equal to the **summation of absolute differences** between `nums[i]` and all the other elements in the array. + +In other words, `result[i]` is equal to `sum(|nums[i]-nums[j]|)` where `0 <= j < nums.lengt`h and `j != i` (**0-indexed**). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,3,5] +Output: [4,3,5] +Explanation: Assuming the arrays are 0-indexed, then +result[0] = |2-2| + |2-3| + |2-5| = 0 + 1 + 3 = 4, +result[1] = |3-2| + |3-3| + |3-5| = 1 + 0 + 2 = 3, +result[2] = |5-2| + |5-3| + |5-5| = 3 + 2 + 0 = 5. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Sum of Absolute Differences in a Sorted Array -```go ``` - +Input: nums = [1,4,6,8,10] +Output: [24,15,13,15,21] +``` ## 结语 diff --git a/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution.go b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution.go index d115ccf5e..d52579978 100644 --- a/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution.go +++ b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + l := len(nums) + sum := make([]int, l) + sum[0] = nums[0] + for i := 1; i < l; i++ { + sum[i] = sum[i-1] + nums[i] + } + result := make([]int, len(nums)) + for i := 0; i < l; i++ { + left, right := 0, 0 + if i > 0 { + s := sum[i-1] + left = i*nums[i] - s + } + if i < l-1 { + s := sum[l-1] - sum[i] + right = s - (l-1-i)*nums[i] + } + result[i] = left + right + } + return result } diff --git a/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution_test.go b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution_test.go index 14ff50eb4..0c99a4abe 100644 --- a/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution_test.go +++ b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-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, 3, 5}, []int{4, 3, 5}}, + {"TestCase2", []int{1, 4, 6, 8, 10}, []int{24, 15, 13, 15, 21}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1363a2482f6f320bb5857c88ae3b0eca98eb7ee5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Nov 2023 11:50:57 +0800 Subject: [PATCH 057/253] Add solution and test-cases for problem 2044 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 28 ++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 61 insertions(+), 22 deletions(-) diff --git a/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/README.md b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/README.md index 818342f91..e187f7d85 100755 --- a/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/README.md +++ b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/README.md @@ -1,28 +1,43 @@ # [2044.Count Number of Maximum Bitwise-OR 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 +Given an integer array `nums`, find the **maximum** possible **bitwise OR** of a subset of `nums` and return the **number of different non-empty subsets** with the maximum bitwise OR. + +An array `a` is a **subset** of an array `b` if `a` can be obtained from `b` by deleting some (possibly zero) elements of `b`. Two subsets are considered **different** if the indices of the elements chosen are different. + +The bitwise OR of an array `a` is equal to `a[0] OR a[1] OR ... OR a[a.length - 1]` (**0-indexed**). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,1] +Output: 2 +Explanation: The maximum possible bitwise OR of a subset is 3. There are 2 subsets with a bitwise OR of 3: +- [3] +- [3,1] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Number of Maximum Bitwise-OR Subsets -```go ``` +Input: nums = [2,2,2] +Output: 7 +Explanation: All non-empty subsets of [2,2,2] have a bitwise OR of 2. There are 23 - 1 = 7 total subsets. +``` + +**Example 3:** +``` +Input: nums = [3,2,1,5] +Output: 6 +Explanation: The maximum possible bitwise OR of a subset is 7. There are 6 subsets with a bitwise OR of 7: +- [3,5] +- [3,1,5] +- [3,2,5] +- [3,2,1,5] +- [2,5] +- [2,1,5] +``` ## 结语 diff --git a/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution.go b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution.go index d115ccf5e..c0052847d 100644 --- a/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution.go +++ b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + count := make(map[int]int) + var dfs func(int, int, int) + dfs = func(idx, res, l int) { + if l == 0 { + count[res]++ + return + } + if idx >= len(nums) { + return + } + + dfs(idx+1, res|nums[idx], l-1) + dfs(idx+1, res, l) + } + for l := 1; l <= len(nums); l++ { + dfs(0, 0, l) + } + m, ans := -1, 0 + for k, c := range count { + if m == -1 || k > m { + m = k + ans = c + } + } + return ans } diff --git a/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution_test.go b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution_test.go index 14ff50eb4..4de009d7f 100644 --- a/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution_test.go +++ b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/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, 1}, 2}, + {"TestCase2", []int{2, 2, 2}, 7}, + {"TestCase3", []int{3, 1, 2, 5}, 6}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d39de44047afd164b98a8ad9f8f6f6f84d2159a3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 27 Nov 2023 20:54:49 +0800 Subject: [PATCH 058/253] Add solution and test-cases for problem 935 --- .../901-1000/0935.Knight-Dialer/README.md | 43 ++++++++++++------ .../901-1000/0935.Knight-Dialer/Solution.go | 43 +++++++++++++++++- .../0935.Knight-Dialer/Solution_test.go | 16 ++++--- .../901-1000/0935.Knight-Dialer/chess.jpeg | Bin 0 -> 18362 bytes .../901-1000/0935.Knight-Dialer/phone.jpeg | Bin 0 -> 15940 bytes 5 files changed, 80 insertions(+), 22 deletions(-) create mode 100644 leetcode/901-1000/0935.Knight-Dialer/chess.jpeg create mode 100644 leetcode/901-1000/0935.Knight-Dialer/phone.jpeg diff --git a/leetcode/901-1000/0935.Knight-Dialer/README.md b/leetcode/901-1000/0935.Knight-Dialer/README.md index b8ba7d0df..4d46f6a7d 100644 --- a/leetcode/901-1000/0935.Knight-Dialer/README.md +++ b/leetcode/901-1000/0935.Knight-Dialer/README.md @@ -1,28 +1,45 @@ # [935.Knight Dialer][title] -> [!WARNING|style:flat] -> 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 chess knight has a **unique movement**, it may move two squares vertically and one square horizontally, or two squares horizontally and one square vertically (with both forming the shape of an **L**). The possible movements of chess knight are shown in this diagaram: + +A chess knight can move as indicated in the chess diagram below: + +![chess](./chess.jpeg) + +We have a chess knight and a phone pad as shown below, the knight **can only stand on a numeric cell** (i.e. blue cell). + +![phone](./phone.jpeg) + +Given an integer n, return how many distinct phone numbers of length `n` we can dial. + +You are allowed to place the knight **on any numeric cell** initially and then you should perform `n - 1` jumps to dial a number of length `n`. All jumps should be **valid** knight jumps. + +As the answer may be very large, **return the answer modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 1 +Output: 10 +Explanation: We need to dial a number of length 1, so placing the knight over any numeric cell of the 10 cells is sufficient. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Knight Dialer -```go +``` +Input: n = 2 +Output: 20 +Explanation: All the valid number we can dial are [04, 06, 16, 18, 27, 29, 34, 38, 40, 43, 49, 60, 61, 67, 72, 76, 81, 83, 92, 94] ``` +**Example 3:** + +``` +Input: n = 3131 +Output: 136006598 +Explanation: Please take care of the mod. +``` ## 结语 diff --git a/leetcode/901-1000/0935.Knight-Dialer/Solution.go b/leetcode/901-1000/0935.Knight-Dialer/Solution.go index d115ccf5e..7ae618282 100644 --- a/leetcode/901-1000/0935.Knight-Dialer/Solution.go +++ b/leetcode/901-1000/0935.Knight-Dialer/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +const mod935 = 1000000007 + +func Solution(n int) int { + nexts := map[int][]int{ + 1: {6, 8}, + 2: {7, 9}, + 3: {4, 8}, + 4: {0, 3, 9}, + 6: {0, 1, 7}, + 7: {2, 6}, + 8: {1, 3}, + 9: {4, 2}, + 0: {4, 6}, + } + cache := make(map[int]map[int]int) + for i := 0; i <= 9; i++ { + cache[i] = make(map[int]int) + cache[i][1] = 1 + } + var dfs func(int, int) int + dfs = func(num, nn int) int { + v, ok := cache[num] + if ok { + vv, ok1 := v[nn] + if ok1 { + return vv + } + } + ans := 0 + for _, next := range nexts[num] { + ans = (ans + dfs(next, nn-1)) % mod935 + } + cache[num][nn] = ans + return ans + } + ans := 0 + for i := 0; i <= 9; i++ { + a := dfs(i, n) % mod935 + ans = (ans + a) % mod935 + } + return ans } diff --git a/leetcode/901-1000/0935.Knight-Dialer/Solution_test.go b/leetcode/901-1000/0935.Knight-Dialer/Solution_test.go index 14ff50eb4..394a21780 100644 --- a/leetcode/901-1000/0935.Knight-Dialer/Solution_test.go +++ b/leetcode/901-1000/0935.Knight-Dialer/Solution_test.go @@ -10,12 +10,14 @@ 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, 10}, + {"TestCase2", 2, 20}, + {"TestCase3", 3, 46}, + {"TestCase4", 20, 58689536}, + {"TestCase5", 3131, 136006598}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0935.Knight-Dialer/chess.jpeg b/leetcode/901-1000/0935.Knight-Dialer/chess.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8a264c2af43ea6a8917470f73392675499b687dc GIT binary patch literal 18362 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 KKC~=f&;4Ho2|3;X literal 0 HcmV?d00001 From 2d8b5549fa74dfda5c2d7d864723bda976c96ecc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 28 Nov 2023 22:00:43 +0800 Subject: [PATCH 059/253] Add solution and test-cases for problem 2147 --- .../1.png | Bin 0 -> 17665 bytes .../2.png | Bin 0 -> 6859 bytes .../3.png | Bin 0 -> 3755 bytes .../README.md | 44 ++++++++++++------ .../Solution.go | 39 +++++++++++++++- .../Solution_test.go | 14 +++--- 6 files changed, 75 insertions(+), 22 deletions(-) create mode 100644 leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/1.png create mode 100644 leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/2.png create mode 100644 leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/3.png diff --git a/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/1.png b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/1.png new file mode 100644 index 0000000000000000000000000000000000000000..249b7f7d883f5f513b4e2e80aa53ac104c882fed GIT binary patch literal 17665 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 literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/2.png b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/2.png new file mode 100644 index 0000000000000000000000000000000000000000..5fb7f010d135123769975f0ea2e5f3f88e047d62 GIT binary patch literal 6859 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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 +Along a long library corridor, there is a line of seats and decorative plants. You are given a **0-indexedr** string `corridor` of length `n` consisting of letters `'S'` and `'P'` where each `'S'` represents a seat and each `'P'` represents a plant. + +One room divider has **already** been installed to the left of index `0`, and **another** to the right of index `n - 1`. Additional room dividers can be installed. For each position between indices `i - 1` and `i` (`1 <= i <= n - 1`), at most one divider can be installed. + +Divide the corridor into non-overlapping sections, where each section has **exactly two seats** with any number of plants. There may be multiple ways to perform the division. Two ways are **different** if there is a position with a room divider installed in the first way but not in the second way. + +Return the number of ways to divide the corridor. Since the answer may be very large, return it **modulo** `10^9 + 7`. If there is no way, return `0`. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: corridor = "SSPPSPS" +Output: 3 +Explanation: There are 3 different ways to divide the corridor. +The black bars in the above image indicate the two room dividers already installed. +Note that in each of the ways, each section has exactly two seats. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Number of Ways to Divide a Long Corridor -```go ``` +Input: corridor = "PPSPSP" +Output: 1 +Explanation: There is only 1 way to divide the corridor, by not installing any additional dividers. +Installing any would create some section that does not have exactly two seats. +``` + +**Example 3:** + +![3](./3.png) +``` +Input: corridor = "S" +Output: 0 +Explanation: There is no way to divide the corridor because there will always be a section that does not have exactly two seats. +``` ## 结语 diff --git a/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution.go b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution.go index d115ccf5e..c8d2899fb 100644 --- a/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution.go +++ b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +const mod2147 = 1000000007 + +func Solution(corridor string) int { + totalS := 0 // 记录s的总数 + tmpS := 0 //记录s是否到2个 + + bs := []byte(corridor) + + //记录p的个数 + p := 0 + ans := 1 + for _, b := range bs { + // sppss p spss + if b == 'P' { + + if tmpS == 2 { + // 他的前面已经有两个 + p++ + } + continue + } + + if b == 'S' { + totalS++ + tmpS++ + if tmpS == 3 { + ans = (ans * (1 + p)) % mod2147 + tmpS = 1 + } + p = 0 + } + } + // 奇数没法分 + if totalS&1 == 1 || totalS == 0 { + return 0 + } + return ans } diff --git a/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution_test.go b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution_test.go index 14ff50eb4..90b9cd645 100644 --- a/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution_test.go +++ b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/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", "SSPPSPS", 3}, + {"TestCase2", "PPSPSP", 1}, + {"TestCase3", "S", 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2e2ae224e1cecf286f4dec51375b75116374b61f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 3 Dec 2023 14:46:24 +0800 Subject: [PATCH 060/253] Add solution and test-cases for problem 971 --- .../1219-01.png | Bin 0 -> 19826 bytes .../1219-02.png | Bin 0 -> 28128 bytes .../1219-03.png | Bin 0 -> 28128 bytes .../README.md | 43 ++++++++++++------ .../Solution.go | 43 +++++++++++++++++- .../Solution_test.go | 38 ++++++++++++---- .../fliptree.jpeg | Bin 0 -> 22856 bytes 7 files changed, 101 insertions(+), 23 deletions(-) create mode 100644 leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/1219-01.png create mode 100644 leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/1219-02.png create mode 100644 leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/1219-03.png create mode 100644 leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/fliptree.jpeg diff --git a/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/1219-01.png b/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/1219-01.png new file mode 100644 index 0000000000000000000000000000000000000000..d041618467c68c8060f6ade3c69d9a9697784fa0 GIT binary patch literal 19826 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 EZ!k!;3;+NC literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/1219-02.png b/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/1219-02.png new file mode 100644 index 0000000000000000000000000000000000000000..64e1acc46b5371f5208a3f1e310483119daf1421 GIT binary patch literal 28128 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
VaXTmEZSgb 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
VaXTmEZSgb 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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 the `root` of a binary tree with `n` nodes, where each node is uniquely assigned a value from `1` to `n`. You are also given a sequence of `n` values `voyage`, which is the **desired** [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order) traversal of the binary tree. + +Any node in the binary tree can be **flipped** by swapping its left and right subtrees. For example, flipping node 1 will have the following effect: + +![1](./fliptree.jpeg) + +Flip the **smallest** number of nodes so that the **pre-order traversal** of the tree **matches** `voyage`. + +Return a list of the values of all **flipped** nodes. You may return the answer in **any order**. If it is **impossible** to flip the nodes in the tree to make the pre-order traversal match `voyage`, return the list `[-1]`. + +**Example 1:** -**Example 1:** +![2](./1219-01.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2], voyage = [2,1] +Output: [-1] +Explanation: It is impossible to flip the nodes such that the pre-order traversal matches voyage. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![3](./1219-02.png) -### 思路1 -> ... -Flip Binary Tree To Match Preorder Traversal -```go ``` +Input: root = [1,2,3], voyage = [1,3,2] +Output: [1] +Explanation: Flipping node 1 swaps nodes 2 and 3, so the pre-order traversal matches voyage. +``` + +**Example 3:** + +![4](./1219-03.png) +``` +Input: root = [1,2,3], voyage = [1,2,3] +Output: [] +Explanation: The tree's pre-order traversal already matches voyage, so no nodes need to be flipped. +``` ## 结语 diff --git a/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution.go b/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution.go index d115ccf5e..546051136 100644 --- a/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution.go +++ b/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, voyage []int) []int { + ok := true + array := make([]int, 0) + var dfs func(*TreeNode, *int) + dfs = func(tree *TreeNode, index *int) { + if !ok { + return + } + if *index >= len(voyage) { + return + } + if tree == nil { + return + } + if tree.Val != voyage[*index] { + ok = false + array = []int{-1} + return + } + *index++ + left, right := tree.Left, tree.Right + // 如果当前左子树与index的值相等,就不需要交换 + // 如果交换,就是左侧遍历右子树,右侧遍历左子树 + // 左右边的值不等于currentIndex,需要交换,添加节点 + if left != nil && *index < len(voyage) && left.Val != voyage[*index] { + array = append(array, tree.Val) + dfs(right, index) + dfs(left, index) + } else { + dfs(left, index) + dfs(right, index) + } + } + index := 0 + dfs(root, &index) + return array } diff --git a/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution_test.go b/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution_test.go index 14ff50eb4..34f1f9f7e 100644 --- a/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution_test.go +++ b/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/Solution_test.go @@ -10,18 +10,40 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + voyage []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + }, + }, []int{2, 1}, []int{-1}}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + }, + Right: &TreeNode{ + Val: 3, + }, + }, []int{1, 3, 2}, []int{1}}, + {"TestCase", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + }, + Right: &TreeNode{ + Val: 3, + }, + }, []int{1, 2, 3}, []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.voyage) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +52,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/fliptree.jpeg b/leetcode/901-1000/0971.Flip-Binary-Tree-To-Match-Preorder-Traversal/fliptree.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..1376261da96db5e63a4d20c609e74547afc08f10 GIT binary patch literal 22856 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 literal 0 HcmV?d00001 From ff082f9a17aa2e0696f00e44cf3829335053bcb7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 3 Dec 2023 16:50:49 +0800 Subject: [PATCH 061/253] Add solution and test-cases for problem 2673 --- .../README.md | 46 ++++++++++++++++ .../Solution.go | 51 +++++++++++++++++- .../Solution_test.go | 17 +++--- .../binaryytreee2drawio.png | Bin 0 -> 10849 bytes .../binaryytreeedrawio-4.png | Bin 0 -> 23539 bytes 5 files changed, 105 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/README.md create mode 100644 leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/binaryytreee2drawio.png create mode 100644 leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/binaryytreeedrawio-4.png diff --git a/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/README.md b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/README.md new file mode 100644 index 000000000..eb1888adf --- /dev/null +++ b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/README.md @@ -0,0 +1,46 @@ +# [2673.Make Costs of Paths Equal in a Binary Tree][title] + +## Description +You are given an integer `n` representing the number of nodes in a **perfect binary tree** consisting of nodes numbered from `1` to `n`. The root of the tree is node `1` and each node `i` in the tree has two children where the left child is the node `2 * i` and the right child is `2 * i + 1`. + +Each node in the tree also has a **cost** represented by a given **0-indexed** integer array `cost` of size `n` where `cost[i]` is the cost of node `i + 1`. You are allowed to **increment** the cost of **any** node by 1 **any** number of times. + +Return the **minimum** number of increments you need to make the cost of paths from the root to each **leaf** node equal. + +**Note:** + +- A **perfect binary tree** is a tree where each node, except the leaf nodes, has exactly 2 children. +- The **cost of a path** is the sum of costs of nodes in the path. + +**Example 1:** + +![example1](./binaryytreeedrawio-4.png) + +``` +Input: n = 7, cost = [1,5,2,2,3,3,1] +Output: 6 +Explanation: We can do the following increments: +- Increase the cost of node 4 one time. +- Increase the cost of node 3 three times. +- Increase the cost of node 7 two times. +Each path from the root to a leaf will have a total cost of 9. +The total increments we did is 1 + 3 + 2 = 6. +It can be shown that this is the minimum answer we can achieve. +``` + +**Example 2:** + +![example2](./binaryytreee2drawio.png) + +``` +Input: n = 3, cost = [5,3,3] +Output: 0 +Explanation: The two paths already have equal total costs, so no increments are needed. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-costs-of-paths-equal-in-a-binary-tree +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution.go b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution.go index d115ccf5e..c72c38be6 100755 --- a/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution.go +++ b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { +func findBaseN(n int) int { + x := 0 + for n > 0 { + n >>= 1 + x++ + } return x } + +func Solution(n int, cost []int) int { + dist := make([]int, len(cost)) + dist[0] = cost[0] + for start := 0; start < n/2; start++ { + dist[start*2+1] = dist[start] + cost[start*2+1] + dist[start*2+2] = dist[start] + cost[start*2+2] + + } + + maxPathSum := 0 + for i := n / 2; i < n; i++ { + if dist[i] > maxPathSum { + maxPathSum = dist[i] + } + } + baseN := findBaseN(n) + + ans := 0 + start, end := n/2, n + for i := start; i < end; i++ { + dist[i] = maxPathSum - dist[i] + } + baseN-- + start, end = start/2, start + for baseN > 0 { + for i := start; i < end; i++ { + left, right := i*2+1, i*2+2 + dl := dist[left] + dr := dist[right] + minDiff := dl + add := dr - dl + if minDiff > dr { + minDiff = dr + add = dl - dr + } + ans += add + dist[i] = minDiff + } + start, end = start/2, start + baseN-- + } + return ans +} diff --git a/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution_test.go b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution_test.go index 14ff50eb4..a55ab6587 100755 --- a/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution_test.go +++ b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution_test.go @@ -10,18 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + cost []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 7, []int{1, 5, 2, 2, 3, 3, 1}, 6}, + {"TestCase2", 3, []int{5, 3, 3}, 0}, + {"TestCase3", 15, []int{1, 5, 2, 2, 3, 3, 1, 1, 2, 3, 4, 5, 6, 7, 8}, 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.cost) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/binaryytreee2drawio.png b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/binaryytreee2drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..1a422001a7c1bb13f97857cbdf754165f4f4ff55 GIT binary patch literal 10849 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 F{{Z<`t=a$p literal 0 HcmV?d00001 diff --git a/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/binaryytreeedrawio-4.png b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/binaryytreeedrawio-4.png new file mode 100644 index 0000000000000000000000000000000000000000..e42a91844de6d9e3e71d392053791526e1779a9c GIT binary patch literal 23539 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 Date: Mon, 4 Dec 2023 20:47:15 +0800 Subject: [PATCH 062/253] Add solution and test-cases for problem 2264 --- .../README.md | 40 +++++++++++++------ .../Solution.go | 22 +++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/README.md b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/README.md index 98f38fee5..640e0dfc2 100755 --- a/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/README.md +++ b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/README.md @@ -1,28 +1,42 @@ # [2264.Largest 3-Same-Digit Number 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 +You are given a string `num` representing a large integer. An integer is **good** if it meets the following conditions: + +- It is a **substring** of `num` with length `3`. +- It consists of only one unique digit. + +Return the **maximum good** integer as a **string** or an empty string `""` if no such integer exists. + +Note: + +- A **substring** is a contiguous sequence of characters within a string. +- There may be **leading zeroes** in `num` or a good integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = "6777133339" +Output: "777" +Explanation: There are two distinct good integers: "777" and "333". +"777" is the largest, so we return "777". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Largest 3-Same-Digit Number in String -```go ``` +Input: num = "2300019" +Output: "000" +Explanation: "000" is the only good integer. +``` + +**Example 3:** +``` +Input: num = "42352338" +Output: "" +Explanation: No substring of length 3 consists of only one unique digit. Therefore, there are no good integers. +``` ## 结语 diff --git a/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution.go b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution.go index d115ccf5e..f0551fd75 100644 --- a/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution.go +++ b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num string) string { + ans := "" + if len(num) < 3 { + return ans + } + a, b, c := 0, 1, 2 + if num[a] == num[b] && num[b] == num[c] { + ans = num[a : c+1] + } + + for idx := 3; idx < len(num); idx++ { + a, b, c = b, c, idx + if num[a] == num[b] && num[b] == num[c] { + if ans == "" || ans < num[a:c+1] { + ans = num[a : c+1] + } + } + + } + return ans } diff --git a/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution_test.go b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution_test.go index 14ff50eb4..5e685c551 100644 --- a/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution_test.go +++ b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-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", "6777133339", "777"}, + {"TestCase2", "2300019", "000"}, + {"TestCase3", "42352338", ""}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f1c01c636ab8d1f8517df22849fb3674e7281248 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 5 Dec 2023 20:41:42 +0800 Subject: [PATCH 063/253] Add solution and test-cases for problem 1688 --- .../README.md | 36 +++++++++++-------- .../Solution.go | 4 +-- .../Solution_test.go | 13 ++++--- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/README.md b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/README.md index 6445b200e..8fa83c67a 100755 --- a/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/README.md +++ b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/README.md @@ -1,28 +1,36 @@ # [1688.Count of Matches in Tournament][title] -> [!WARNING|style:flat] -> 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`, the number of teams in a tournament that has strange rules: + +- If the current number of teams is **even**, each team gets paired with another team. A total of `n / 2` matches are played, and `n / 2` teams advance to the next round. +- If the current number of teams is **odd**, one team randomly advances in the tournament, and the rest gets paired. A total of `(n - 1) / 2` matches are played, and `(n - 1) / 2 + 1` teams advance to the next round. +Return the number of matches played in the tournament until a winner is decided. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 7 +Output: 6 +Explanation: Details of the tournament: +- 1st Round: Teams = 7, Matches = 3, and 4 teams advance. +- 2nd Round: Teams = 4, Matches = 2, and 2 teams advance. +- 3rd Round: Teams = 2, Matches = 1, and 1 team is declared the winner. +Total number of matches = 3 + 2 + 1 = 6. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count of Matches in Tournament -```go ``` - +Input: n = 14 +Output: 13 +Explanation: Details of the tournament: +- 1st Round: Teams = 14, Matches = 7, and 7 teams advance. +- 2nd Round: Teams = 7, Matches = 3, and 4 teams advance. +- 3rd Round: Teams = 4, Matches = 2, and 2 teams advance. +- 4th Round: Teams = 2, Matches = 1, and 1 team is declared the winner. +Total number of matches = 7 + 3 + 2 + 1 = 13. +``` ## 结语 diff --git a/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution.go b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution.go index d115ccf5e..d2d1f8fea 100644 --- a/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution.go +++ b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution.go @@ -1,5 +1,5 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(x int) int { + return x - 1 } diff --git a/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution_test.go b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution_test.go index 14ff50eb4..a1d0192f6 100644 --- a/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution_test.go +++ b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/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", 7, 6}, + {"TestCase2", 14, 13}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6a6ad4ce55b3500e2f1e338b21a3fea5b95b0002 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 6 Dec 2023 20:33:54 +0800 Subject: [PATCH 064/253] Add solution and test-cases for problem 1716 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 14 ++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md index e709d2fb2..b5f965049 100755 --- a/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md +++ b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md @@ -1,28 +1,34 @@ # [1716.Calculate Money in Leetcode Bank][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Hercy wants to save money for his first car. He puts money in the Leetcode bank **every day**. + +He starts by putting in `$1` on Monday, the first day. Every day from Tuesday to Sunday, he will put in `$1` more than the day before. On every subsequent Monday, he will put in `$1` more than the **previous Monday**. + +Given `n`, return the total amount of money he will have in the Leetcode bank at the end of the nth day. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4 +Output: 10 +Explanation: After the 4th day, the total is 1 + 2 + 3 + 4 = 10. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Calculate Money in Leetcode Bank -```go +```Input: n = 10 +Output: 37 +Explanation: After the 10th day, the total is (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4) = 37. Notice that on the 2nd Monday, Hercy only puts in $2. ``` +**Example 3:** + +``` +Input: n = 20 +Output: 96 +Explanation: After the 20th day, the total is (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4 + 5 + 6 + 7 + 8) + (3 + 4 + 5 + 6 + 7 + 8) = 96. +``` ## 结语 diff --git a/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution.go b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution.go index d115ccf5e..a2b74988b 100644 --- a/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution.go +++ b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + a := n / 7 + aa := a + 1 + b := n % 7 + ans := a*28 + (a*(a-1))/2*7 + + for i := 0; i < b; i++ { + ans += aa + aa++ + } + + return ans } diff --git a/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution_test.go b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution_test.go index 14ff50eb4..d74783f08 100644 --- a/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution_test.go +++ b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/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", 4, 10}, + {"TestCase2", 10, 37}, + {"TestCase3", 20, 96}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7d22ae7aa9fc0330b1c80cb6f7e39239ddc92f18 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 7 Dec 2023 20:45:21 +0800 Subject: [PATCH 065/253] Add solution and test-cases for problem 1903 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 10 ++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/README.md b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/README.md index 1483534c4..510c76a6d 100755 --- a/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/README.md +++ b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/README.md @@ -1,28 +1,33 @@ # [1903.Largest Odd Number 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 +You are given a string `num`, representing a large integer. Return the **largest-valued odd** integer (as a string) that is a **non-empty substring** of `num`, or an empty string `""` if no odd integer exists. + +A **substring** is a contiguous sequence of characters within a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = "52" +Output: "5" +Explanation: The only non-empty substrings are "5", "2", and "52". "5" is the only odd number. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Largest Odd Number in String -```go +``` +Input: num = "4206" +Output: "" +Explanation: There are no odd numbers in "4206". ``` +**Example 3:** + +``` +Input: num = "35427" +Output: "35427" +Explanation: "35427" is already an odd number. +``` ## 结语 diff --git a/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution.go b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution.go index d115ccf5e..26b575369 100644 --- a/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution.go +++ b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution.go @@ -1,5 +1,11 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num string) string { + idx := len(num) - 1 + for ; idx >= 0; idx-- { + if num[idx]&1 == 1 { + break + } + } + return num[:idx+1] } diff --git a/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution_test.go b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution_test.go index 14ff50eb4..a35cf2c24 100644 --- a/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution_test.go +++ b/leetcode/1901-2000/1903.Largest-Odd-Number-in-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", "52", "5"}, + {"TestCase2", "2406", ""}, + {"TestCase3", "35427", "35427"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3ca7fae71d615035ea38d8c6b39f6db82af28a10 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Dec 2023 14:37:37 +0800 Subject: [PATCH 066/253] Add solution and test-cases for problem 117 --- .../Solution.go | 29 ++++++++++++- .../Solution_test.go | 41 +++++++++++++++---- 2 files changed, 61 insertions(+), 9 deletions(-) diff --git a/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution.go b/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution.go index d115ccf5e..5d96fe5a4 100644 --- a/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution.go +++ b/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +type Node1 struct { + Val int + Left, Right, Next *Node1 +} + +func Solution(root *Node1) *Node1 { + if root == nil { + return nil + } + queue := []*Node1{root} + for len(queue) > 0 { + nq := make([]*Node1, 0) + for i := 0; i < len(queue); i++ { + if queue[i].Left != nil { + nq = append(nq, queue[i].Left) + } + if queue[i].Right != nil { + nq = append(nq, queue[i].Right) + } + + if i != len(queue)-1 { + queue[i].Next = queue[i+1] + } + } + queue = nq + } + return root } diff --git a/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution_test.go b/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution_test.go index 14ff50eb4..b2db8a296 100644 --- a/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution_test.go +++ b/leetcode/101-200/0117.Populating-Next-Right-Pointers-in-Each-Node-II/Solution_test.go @@ -8,14 +8,41 @@ import ( func TestSolution(t *testing.T) { // 测试用例 + + nodes := [6]*Node1{ + {Val: 1}, + {Val: 2}, + {Val: 3}, + {Val: 4}, + {Val: 5}, + {Val: 7}, + } + nodes[0].Left = nodes[1] + nodes[0].Right = nodes[2] + nodes[1].Left = nodes[3] + nodes[1].Right = nodes[4] + nodes[2].Right = nodes[5] + nodes[1].Next = nodes[2] + nodes[3].Next = nodes[4] + nodes[4].Next = nodes[5] cases := []struct { name string - inputs bool - expect bool + inputs *Node1 + expect *Node1 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &Node1{ + Val: 1, + Left: &Node1{ + Val: 2, + Left: &Node1{Val: 4}, + Right: &Node1{Val: 5}, + }, + Right: &Node1{ + Val: 3, + Right: &Node1{Val: 7}, + }, + }, nodes[0]}, + {"TestCase2", nil, nil}, } // 开始测试 @@ -30,10 +57,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fd217635c7c41f9260ca3dfe4b18be86c499058d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Dec 2023 19:24:08 +0800 Subject: [PATCH 067/253] Add solution and test-cases for problem 979 --- .../README.md | 31 ++++++++++-------- .../Solution.go | 30 +++++++++++++++-- .../Solution_test.go | 21 ++++++++---- .../tree1.png | Bin 0 -> 18290 bytes .../tree2.png | Bin 0 -> 20821 bytes 5 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/tree1.png create mode 100644 leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/tree2.png diff --git a/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/README.md b/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/README.md index 2ac5516aa..9d6a91839 100644 --- a/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/README.md +++ b/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/README.md @@ -1,28 +1,31 @@ # [979.Distribute Coins 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 +You are given the `root` of a binary tree with `n` nodes where each `node` in the tree has `node.val` coins. There are `n` coins in total throughout the whole tree. + +In one move, we may choose two adjacent nodes and move one coin from one node to another. A move may be from parent to child, or from child to parent. + +Return the **minimum** number of moves required to make every node have **exactly** one coin. -**Example 1:** +**Example 1:** + +![example1](./tree1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [3,0,0] +Output: 2 +Explanation: From the root of the tree, we move one coin to its left child, and one coin to its right child. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./tree2.png) -### 思路1 -> ... -Distribute Coins in Binary Tree -```go ``` - +Input: root = [0,3,0] +Output: 3 +Explanation: From the left child of the root, we move two coins to the root [taking two moves]. Then, we move one coin from the root of the tree to the right child. +``` ## 结语 diff --git a/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/Solution.go b/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/Solution.go index d115ccf5e..932520025 100644 --- a/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/Solution.go +++ b/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + steps := 0 + var dfs func(*TreeNode) int + dfs = func(tree *TreeNode) int { + if tree == nil { + return 0 + } + left := dfs(tree.Left) + right := dfs(tree.Right) + next := tree.Val + left + right - 1 + + if left < 0 { + left = -left + } + steps += left + if right < 0 { + right = -right + } + steps += right + return next + } + dfs(root) + return steps } diff --git a/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/Solution_test.go b/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/Solution_test.go index 14ff50eb4..990eaddf9 100644 --- a/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/Solution_test.go +++ b/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/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: 0}, + Right: &TreeNode{Val: 0}, + }, 2}, + {"TestCase2", &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 0}, + }, 3}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/tree1.png b/leetcode/901-1000/0979.Distribute-Coins-in-Binary-Tree/tree1.png new file mode 100644 index 0000000000000000000000000000000000000000..b351a843efbca516ed2d3aa8bbfcad4dfb205d23 GIT binary patch literal 18290 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 NnTfUW3q!Z~KLA-%1*`x7 literal 0 HcmV?d00001 From 69da6eb2946e9bda618bd94fc76b4f8491ef55dc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Dec 2023 15:41:59 +0800 Subject: [PATCH 068/253] Add solution and test-cases for problem 754 --- .../701-800/0754.Reach-a-Number/README.md | 35 +++++++++++-------- .../701-800/0754.Reach-a-Number/Solution.go | 15 ++++++-- .../0754.Reach-a-Number/Solution_test.go | 14 ++++---- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/leetcode/701-800/0754.Reach-a-Number/README.md b/leetcode/701-800/0754.Reach-a-Number/README.md index ada889685..ca76153c3 100644 --- a/leetcode/701-800/0754.Reach-a-Number/README.md +++ b/leetcode/701-800/0754.Reach-a-Number/README.md @@ -1,28 +1,35 @@ # [754.Reach a 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 standing at position `0` on an infinite number line. There is a destination at position `target`. + +You can make some number of moves `numMoves` so that: + +- On each move, you can either go left or right. +- During the ith move (starting from `i == 1` to `i == numMoves`), you take `i` steps in the chosen direction. + +Given the integer `target`, return the **minimum** number of moves require (i.e., the minimum `numMoves`) to reach the destination. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: target = 2 +Output: 3 +Explanation: +On the 1st move, we step from 0 to 1 (1 step). +On the 2nd move, we step from 1 to -1 (2 steps). +On the 3rd move, we step from -1 to 2 (3 steps). ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Reach a Number -```go ``` - +Input: target = 3 +Output: 2 +Explanation: +On the 1st move, we step from 0 to 1 (1 step). +On the 2nd move, we step from 1 to 3 (2 steps). +``` ## 结语 diff --git a/leetcode/701-800/0754.Reach-a-Number/Solution.go b/leetcode/701-800/0754.Reach-a-Number/Solution.go index d115ccf5e..2be011165 100644 --- a/leetcode/701-800/0754.Reach-a-Number/Solution.go +++ b/leetcode/701-800/0754.Reach-a-Number/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(target int) int { + if target < 0 { + target = -target + } + n := 0 + for target > 0 { + n++ + target -= n + } + if target&1 == 0 { + return n + } + return n + 1 + n&1 } diff --git a/leetcode/701-800/0754.Reach-a-Number/Solution_test.go b/leetcode/701-800/0754.Reach-a-Number/Solution_test.go index 14ff50eb4..71f8480f4 100644 --- a/leetcode/701-800/0754.Reach-a-Number/Solution_test.go +++ b/leetcode/701-800/0754.Reach-a-Number/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", 2, 3}, + {"TestCase2", 3, 2}, + {"TestCase3", 99, 14}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 81696aeef2e48a2d3da19ad4506b58ac6910c7ec Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 12 Dec 2023 22:58:39 +0800 Subject: [PATCH 069/253] Add solution and test-cases for problem 164 --- leetcode/101-200/0164.Maximum-Gap/README.md | 29 +++++++++++ leetcode/101-200/0164.Maximum-Gap/Solution.go | 48 ++++++++++++++++++- .../101-200/0164.Maximum-Gap/Solution_test.go | 14 +++--- 3 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 leetcode/101-200/0164.Maximum-Gap/README.md diff --git a/leetcode/101-200/0164.Maximum-Gap/README.md b/leetcode/101-200/0164.Maximum-Gap/README.md new file mode 100644 index 000000000..7b11b83cb --- /dev/null +++ b/leetcode/101-200/0164.Maximum-Gap/README.md @@ -0,0 +1,29 @@ +# [164. Maximum Gap][title] + +## Description +Given an integer array `nums`, return the maximum difference between two successive elements in its sorted form. If the array contains less than two elements, return `0`. + +You must write an algorithm that runs in linear time and uses linear extra space. + +**Example 1:** + +``` +Input: nums = [3,6,9,1] +Output: 3 +Explanation: The sorted form of the array is [1,3,6,9], either (3,6) or (6,9) has the maximum difference 3. +``` + +**Example 2:** + +``` +Input: nums = [10] +Output: 0 +Explanation: The array contains less than 2 elements, therefore return 0. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-gap +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0164.Maximum-Gap/Solution.go b/leetcode/101-200/0164.Maximum-Gap/Solution.go index d115ccf5e..9193ee945 100644 --- a/leetcode/101-200/0164.Maximum-Gap/Solution.go +++ b/leetcode/101-200/0164.Maximum-Gap/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" +) + +func radixSort(nums []int) { + maximum := 0 + for i := 0; i < len(nums); i++ { + if nums[i] > maximum { + maximum = nums[i] + } + } + digits := 0 + r := maximum + for r > 0 { + digits++ + r /= 10 + } + for i := 1; i <= digits; i++ { + bucket := [10][]int{} + p := math.Pow(10, float64(i-1)) + for _, n := range nums { + bucketIndex := (n / int(p)) % 10 + bucket[bucketIndex] = append(bucket[bucketIndex], n) + } + idx := 0 + for j := 0; j < 10; j++ { + for k := 0; k < len(bucket[j]); k++ { + nums[idx] = bucket[j][k] + idx++ + } + } + } +} +func Solution(nums []int) int { + l := len(nums) + if l <= 1 { + return 0 + } + radixSort(nums) + ans := 0 + for i := 1; i < l; i++ { + if r := nums[i] - nums[i-1]; r > ans { + ans = r + } + } + return ans } diff --git a/leetcode/101-200/0164.Maximum-Gap/Solution_test.go b/leetcode/101-200/0164.Maximum-Gap/Solution_test.go index 14ff50eb4..04ac75da2 100644 --- a/leetcode/101-200/0164.Maximum-Gap/Solution_test.go +++ b/leetcode/101-200/0164.Maximum-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", []int{3, 6, 9, 1}, 3}, + {"TestCase2", []int{100, 3, 2, 1}, 97}, + {"TestCase3", []int{3, 1, 4, 9, 10}, 5}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 51fd724f7cda17057534608813f142238caa854b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 15 Dec 2023 09:34:20 +0800 Subject: [PATCH 070/253] Add solution and test-cases for problem 1436 --- .../1401-1500/1436.Destination-City/README.md | 41 +++++++++++++++++++ .../1436.Destination-City/Solution.go | 13 +++++- .../1436.Destination-City/Solution_test.go | 14 +++---- 3 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1436.Destination-City/README.md diff --git a/leetcode/1401-1500/1436.Destination-City/README.md b/leetcode/1401-1500/1436.Destination-City/README.md new file mode 100644 index 000000000..5d2ed28bc --- /dev/null +++ b/leetcode/1401-1500/1436.Destination-City/README.md @@ -0,0 +1,41 @@ +# [1436. Destination City][title] + +## Description +You are given the array `paths`, where `paths[i] = [cityAi, cityBi]` means there exists a direct path going from `cityAi` to `cityBi`. Return the destination city, that is, the city without any path outgoing to another city. + +It is guaranteed that the graph of paths forms a line without any loop, therefore, there will be exactly one destination city. + +**Example 1:** + +``` +Input: paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]] +Output: "Sao Paulo" +Explanation: Starting at "London" city you will reach "Sao Paulo" city which is the destination city. Your trip consist of: "London" -> "New York" -> "Lima" -> "Sao Paulo". +``` + +**Example 2:** + +``` +Input: paths = [["B","C"],["D","B"],["C","A"]] +Output: "A" +Explanation: All possible trips are: +"D" -> "B" -> "C" -> "A". +"B" -> "C" -> "A". +"C" -> "A". +"A". +Clearly the destination city is "A". +``` + +**Example 3:** + +``` +Input: paths = [["A","Z"]] +Output: "Z" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/destination-city +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1436.Destination-City/Solution.go b/leetcode/1401-1500/1436.Destination-City/Solution.go index d115ccf5e..37aeb5aa4 100755 --- a/leetcode/1401-1500/1436.Destination-City/Solution.go +++ b/leetcode/1401-1500/1436.Destination-City/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(paths [][]string) string { + in := make(map[string]struct{}) + for _, p := range paths { + in[p[0]] = struct{}{} + } + for _, p := range paths { + if _, ok := in[p[1]]; !ok { + return p[1] + } + } + return "" } diff --git a/leetcode/1401-1500/1436.Destination-City/Solution_test.go b/leetcode/1401-1500/1436.Destination-City/Solution_test.go index 14ff50eb4..1dbd13d48 100755 --- a/leetcode/1401-1500/1436.Destination-City/Solution_test.go +++ b/leetcode/1401-1500/1436.Destination-City/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{{"London", "New York"}, {"New York", "Lima"}, {"Lima", "Sao Paulo"}}, "Sao Paulo"}, + {"TestCase2", [][]string{{"B", "C"}, {"D", "B"}, {"C", "A"}}, "A"}, + {"TestCase3", [][]string{{"A", "Z"}}, "Z"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f785207358f42accdd1ed0c42afa657f0004feea Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 16 Dec 2023 20:31:50 +0800 Subject: [PATCH 071/253] Add solution and test-cases for problem 421 --- .../README.md | 22 +++++--------- .../Solution.go | 30 +++++++++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/README.md b/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/README.md index 52bcdfe9c..0a4ef41fb 100644 --- a/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/README.md +++ b/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/README.md @@ -1,28 +1,22 @@ # [421.Maximum XOR of Two Numbers 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 an integer array `nums`, return the maximum result of `nums[i] XOR nums[j]`, where `0 <= i <= j < n`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,10,5,25,2,8] +Output: 28 +Explanation: The maximum result is 5 XOR 25 = 28. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum XOR of Two Numbers in an Array -```go ``` - +Input: nums = [14,70,53,83,49,91,36,80,92,51,66,70] +Output: 127 +``` ## 结语 diff --git a/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/Solution.go b/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/Solution.go index d115ccf5e..9b2f998cf 100644 --- a/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/Solution.go +++ b/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +/* +这个道题不可以用n^2的算法来做,数组的长度是2*10^5 +所以就是构建最大xor的过程 +*/ +func Solution(nums []int) int { + ans := 0 + mask := 0 + for i := 31; i >= 0; i-- { + // i-31位的前缀表示的数字 + mask |= 1 << i + set := make(map[int]struct{}) + for _, n := range nums { + set[n&mask] = struct{}{} + } + // 尝试将ans第i位设置为1 + // 我们通过set得到了数组每一项的前缀。 + // 如果可以将第i位设置为1,那么就是说在set中存在两个数字 a, b使得 a^b=ans ans是我们的最大抑或值。 + // 抑或满足交换性,所以就是判断a^ans 是否在set中即可。如果在就可以将第i位设置为1。 + t := ans | (1 << i) + for pre := range set { + if _, ok := set[pre^t]; ok { + ans = t + break + } + } + } + + return ans } diff --git a/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/Solution_test.go b/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/Solution_test.go index 14ff50eb4..fc0b3150e 100644 --- a/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-an-Array/Solution_test.go +++ b/leetcode/401-500/0421.Maximum-XOR-of-Two-Numbers-in-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{3, 10, 5, 25, 2, 8}, 28}, + {"TestCase2", []int{0}, 0}, + {"TestCase3", []int{4, 6, 7}, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f92a45e2bc8e76e50576d0bb0bbdf9c7a0b410af Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 17 Dec 2023 12:46:32 +0800 Subject: [PATCH 072/253] Add solution and test-cases for problem 2353 --- .../README.md | 51 ++++++--- .../Solution.go | 102 +++++++++++++++++- .../Solution_test.go | 31 ++++-- 3 files changed, 156 insertions(+), 28 deletions(-) diff --git a/leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md index dd0ad8a84..324c4e7d4 100755 --- a/leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md +++ b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md @@ -1,28 +1,47 @@ # [2353.Design a Food Rating 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 food rating system that can do the following: -**Example 1:** +- **Modify** the rating of a food item listed in the system. +- Return the highest-rated food item for a type of cuisine in the system. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `FoodRatings` class: -## 题意 -> ... +- `FoodRatings(String[] foods, String[] cuisines, int[] ratings)` Initializes the system. The food items are described by `foods`, `cuisines` and `ratings`, all of which have a length of `n`. -## 题解 + - `foods[i]` is the name of the ith food, + - `cuisines[i]` is the type of cuisine of the ith food, and + - `ratings[i]` is the initial rating of the ith food. -### 思路1 -> ... -Design a Food Rating System -```go -``` +- `void changeRating(String food, int newRating)` Changes the rating of the food item with the name `food`. +- `String highestRated(String cuisine)` Returns the name of the food item that has the highest rating for the given type of `cuisine`. If there is a tie, return the item with the **lexicographically smaller** name. +Note that a string `x` is lexicographically smaller than string `y` if `x` comes before `y` in dictionary order, that is, either `x` is a prefix of `y`, or if `i` is the first position such that `x[i] != y[i]`, then `x[i]` comes before `y[i]` in alphabetic order. + +**Example 1:** + +``` +Input +["FoodRatings", "highestRated", "highestRated", "changeRating", "highestRated", "changeRating", "highestRated"] +[[["kimchi", "miso", "sushi", "moussaka", "ramen", "bulgogi"], ["korean", "japanese", "japanese", "greek", "japanese", "korean"], [9, 12, 8, 15, 14, 7]], ["korean"], ["japanese"], ["sushi", 16], ["japanese"], ["ramen", 16], ["japanese"]] +Output +[null, "kimchi", "ramen", null, "sushi", null, "ramen"] + +Explanation +FoodRatings foodRatings = new FoodRatings(["kimchi", "miso", "sushi", "moussaka", "ramen", "bulgogi"], ["korean", "japanese", "japanese", "greek", "japanese", "korean"], [9, 12, 8, 15, 14, 7]); +foodRatings.highestRated("korean"); // return "kimchi" + // "kimchi" is the highest rated korean food with a rating of 9. +foodRatings.highestRated("japanese"); // return "ramen" + // "ramen" is the highest rated japanese food with a rating of 14. +foodRatings.changeRating("sushi", 16); // "sushi" now has a rating of 16. +foodRatings.highestRated("japanese"); // return "sushi" + // "sushi" is the highest rated japanese food with a rating of 16. +foodRatings.changeRating("ramen", 16); // "ramen" now has a rating of 16. +foodRatings.highestRated("japanese"); // return "ramen" + // Both "sushi" and "ramen" have a rating of 16. + // However, "ramen" is lexicographically smaller than "sushi". +``` ## 结语 diff --git a/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution.go b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution.go index d115ccf5e..085686694 100644 --- a/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution.go +++ b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution.go @@ -1,5 +1,105 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type fr struct { + name string + rating int + index *int +} +type frs []fr + +func (f *frs) Len() int { + return len(*f) +} + +func (f *frs) Swap(i, j int) { + *(*f)[i].index = j + *(*f)[j].index = i + (*f)[i], (*f)[j] = (*f)[j], (*f)[i] +} + +func (f *frs) Less(i, j int) bool { + a := (*f)[i] + b := (*f)[j] + if a.rating == b.rating { + return a.name < b.name + } + return a.rating > b.rating +} + +func (f *frs) Push(x interface{}) { + *f = append(*f, x.(fr)) +} + +func (f *frs) Pop() interface{} { + old := *f + l := len(old) + x := old[l-1] + *f = old[:l-1] return x } + +type FoodRatings struct { + // Record the food's index in the heap via a pointer, + // which can be modified synchronously + indies map[string]*int + // Record the cusisine to which the food belongs + f2c map[string]string + // each cuisine maintains a heap + h map[string]*frs +} + +func Constructor2353(foods []string, cuisines []string, ratings []int) FoodRatings { + r := FoodRatings{indies: make(map[string]*int), f2c: make(map[string]string), h: make(map[string]*frs)} + for idx, cuisine := range cuisines { + r.f2c[foods[idx]] = cuisine + if _, ok := r.h[cuisine]; !ok { + r.h[cuisine] = &frs{} + } + + l := r.h[cuisine].Len() + r.indies[foods[idx]] = &l + heap.Push(r.h[cuisine], fr{name: foods[idx], rating: ratings[idx], index: &l}) + } + return r +} + +func (this *FoodRatings) ChangeRating(food string, newRating int) { + // get the index of the food in the heap + curIndex := this.indies[food] + // get the cuisine of food + cuisine := this.f2c[food] + // change rating + arr := this.h[cuisine] + (*arr)[*curIndex].rating = newRating + this.h[cuisine] = arr + // fix heap + heap.Fix(this.h[cuisine], *curIndex) +} + +func (this *FoodRatings) HighestRated(cuisine string) string { + x := this.h[cuisine] + return (*x)[0].name +} + +type opt struct { + name string + commonStr string + rating int +} + +func Solution(foods []string, cuisines []string, ratings []int, opts []opt) []string { + c := Constructor2353(foods, cuisines, ratings) + ans := make([]string, 0) + for _, op := range opts { + if op.name == "h" { + ans = append(ans, c.HighestRated(op.commonStr)) + continue + } + c.ChangeRating(op.commonStr, op.rating) + } + return ans +} diff --git a/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution_test.go b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution_test.go index 14ff50eb4..78a3d510e 100644 --- a/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution_test.go +++ b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution_test.go @@ -9,31 +9,40 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + foods, cuisines []string + ratings []int + opts []opt + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"kimchi", "miso", "sushi", "moussaka", "ramen", "bulgogi"}, + []string{"korean", "japanese", "japanese", "greek", "japanese", "korean"}, []int{9, 12, 8, 15, 14, 7}, + []opt{ + {name: "h", commonStr: "korean"}, + {name: "h", commonStr: "japanese"}, + {name: "c", commonStr: "sushi", rating: 16}, + {name: "h", commonStr: "japanese"}, + {name: "c", commonStr: "ramen", rating: 16}, + {name: "h", commonStr: "japanese"}}, + []string{"kimchi", "ramen", "sushi", "ramen"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.foods, c.cuisines, c.ratings, 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 %v %v", + c.expect, got, c.foods, c.cuisines, c.ratings, c.opts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e18c312d7191e1f60b3e503cd0747392a0728f0e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 18 Dec 2023 22:14:57 +0800 Subject: [PATCH 073/253] Add solution and test-cases for problem 1913 --- .../README.md | 31 ++++++++++--------- .../Solution.go | 8 +++-- .../Solution_test.go | 13 ++++---- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/README.md b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/README.md index 97b201785..a13c3ba06 100755 --- a/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/README.md +++ b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/README.md @@ -1,28 +1,31 @@ # [1913.Maximum Product Difference Between Two 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 +The **product difference** between two pairs `(a, b)` and `(c, d)` is defined as `(a * b) - (c * d)`. + +- For example, the product difference between `(5, 6)` and `(2, 7)` is `(5 * 6) - (2 * 7) = 16`. + +Given an integer array nums, choose four **distinct** indices `w`, `x`, `y`, and `z` such that the **product difference** between pairs `(nums[w], nums[x]) and (nums[y], nums[z])` is **maximized**. + +Return the **maximum** such product difference. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [5,6,2,7,4] +Output: 34 +Explanation: We can choose indices 1 and 3 for the first pair (6, 7) and indices 2 and 4 for the second pair (2, 4). +The product difference is (6 * 7) - (2 * 4) = 34. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Product Difference Between Two Pairs -```go ``` - +Input: nums = [4,2,5,9,7,4,8] +Output: 64 +Explanation: We can choose indices 3 and 6 for the first pair (9, 8) and indices 1 and 5 for the second pair (2, 4). +The product difference is (9 * 8) - (2 * 4) = 64. +``` ## 结语 diff --git a/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution.go b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution.go index d115ccf5e..abd542a8d 100644 --- a/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution.go +++ b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution.go @@ -1,5 +1,9 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + sort.Ints(nums) + l := len(nums) + return nums[l-1]*nums[l-2] - nums[0]*nums[1] } diff --git a/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution_test.go b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution_test.go index 14ff50eb4..2f2aee1aa 100644 --- a/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution_test.go +++ b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-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{5, 6, 2, 7, 4}, 34}, + {"TestCase2", []int{4, 2, 5, 9, 7, 4, 8}, 64}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e34596ebb6071a3da7671f9c4cdaae7a341c6232 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 23:46:48 +0000 Subject: [PATCH 074/253] Bump golang.org/x/crypto from 0.14.0 to 0.17.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.14.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.14.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 18 ++++-------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index d8f45d24d..bed2afb72 100644 --- a/go.mod +++ b/go.mod @@ -25,11 +25,11 @@ require ( github.com/quic-go/quic-go v0.40.0 // indirect github.com/refraction-networking/utls v1.5.4 // indirect go.uber.org/mock v0.3.0 // indirect - golang.org/x/crypto v0.14.0 // indirect + golang.org/x/crypto v0.17.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.14.0 // indirect + golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.14.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 18df48ab0..a838dafe2 100644 --- a/go.sum +++ b/go.sum @@ -15,8 +15,6 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b h1:RMpPgZTSApbPf7xaVel+QkoGPRLFLrwFO89uDUHEGf0= -github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5XqmmYsTLzJp/TO9Lhy39gkverk= github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -43,8 +41,6 @@ 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/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -github.com/quic-go/quic-go v0.39.3 h1:o3YB6t2SR+HU/pgwF29kJ6g4jJIJEwEZ8CKia1h1TKg= -github.com/quic-go/quic-go v0.39.3/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= github.com/quic-go/quic-go v0.40.0 h1:GYd1iznlKm7dpHD7pOVpUvItgMPo/jrMgDWZhMCecqw= github.com/quic-go/quic-go v0.40.0/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= github.com/refraction-networking/utls v1.5.4 h1:9k6EO2b8TaOGsQ7Pl7p9w6PUhx18/ZCeT0WNTZ7Uw4o= @@ -55,22 +51,16 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= -golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= From ad91c6d3a5236b9f863506b24b7a31cdc924316c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 20 Dec 2023 21:17:58 +0800 Subject: [PATCH 075/253] Add solution and test-cases for problem 2706 --- .../2706.Buy-Two-Chocolates/README.md | 31 +++++++++++++++++++ .../2706.Buy-Two-Chocolates/Solution.go | 11 +++++-- .../2706.Buy-Two-Chocolates/Solution_test.go | 16 +++++----- 3 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 leetcode/2701-2800/2706.Buy-Two-Chocolates/README.md diff --git a/leetcode/2701-2800/2706.Buy-Two-Chocolates/README.md b/leetcode/2701-2800/2706.Buy-Two-Chocolates/README.md new file mode 100644 index 000000000..a4a4ff9f1 --- /dev/null +++ b/leetcode/2701-2800/2706.Buy-Two-Chocolates/README.md @@ -0,0 +1,31 @@ +# [2706. Buy Two Chocolates][title] + +## Description +You are given an integer array `prices` representing the prices of various chocolates in a store. You are also given a single integer `money`, which represents your initial amount of money. + +You must buy **exactly** two chocolates in such a way that you still have some **non-negative** leftover money. You would like to minimize the sum of the prices of the two chocolates you buy. + +Return the amount of money you will have leftover after buying the two chocolates. If there is no way for you to buy two chocolates without ending up in debt, return `money`. Note that the leftover must be non-negative. + +**Example 1:** + +``` +Input: prices = [1,2,2], money = 3 +Output: 0 +Explanation: Purchase the chocolates priced at 1 and 2 units respectively. You will have 3 - 3 = 0 units of money afterwards. Thus, we return 0. +``` + +**Example 2:** + +``` +Input: prices = [3,2,3], money = 3 +Output: 3 +Explanation: You cannot buy 2 chocolates without going in debt, so we return 3. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/buy-two-chocolates +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go index d115ccf5e..677b0bf39 100755 --- a/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go +++ b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(prices []int, money int) int { + sort.Ints(prices) + diff := money - prices[0] - prices[1] + if diff < 0 { + return money + } + return diff } diff --git a/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go index 14ff50eb4..1aa0fb7e4 100755 --- a/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go +++ b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go @@ -10,18 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + money int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 2}, 3, 0}, + {"TestCase2", []int{3, 2, 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.inputs, c.money) 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 470c646cf23d1a38c56bec9806bb7ff575016ea5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 22 Dec 2023 20:48:39 +0800 Subject: [PATCH 076/253] Add solution and test-cases for problem 1442 --- .../README.md | 42 +++++++++++++++++++ .../Solution.go | 20 ++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/README.md diff --git a/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/README.md b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/README.md new file mode 100644 index 000000000..db55c7207 --- /dev/null +++ b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/README.md @@ -0,0 +1,42 @@ +# [1422.Maximum Score After Splitting a String][title] + +## Description +Given a string `s` of zeros and ones, return the maximum score after splitting the string into two **non-empty** substrings (i.e. **left** substring and **right** substring). + +The score after splitting a string is the number of **zeros** in the **left** substring plus the number of **ones** in the **right** substring. + +**Example 1:** + +``` +Input: s = "011101" +Output: 5 +Explanation: +All possible ways of splitting s into two non-empty substrings are: +left = "0" and right = "11101", score = 1 + 4 = 5 +left = "01" and right = "1101", score = 1 + 3 = 4 +left = "011" and right = "101", score = 1 + 2 = 3 +left = "0111" and right = "01", score = 1 + 1 = 2 +left = "01110" and right = "1", score = 2 + 1 = 3 +``` + +**Example 2:** + +``` +Input: s = "00111" +Output: 5 +Explanation: When left = "00" and right = "111", we get the maximum score = 2 + 3 = 5 +``` + +**Example 3:** + +``` +Input: s = "1111" +Output: 3 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-after-splitting-a-string +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution.go b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution.go index d115ccf5e..b5fabeda1 100755 --- a/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution.go +++ b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + l := len(s) + sum := make([]int, l) + sum[0] = int(s[0] - '0') + + for idx := 1; idx < l; idx++ { + sum[idx] = int(s[idx]-'0') + sum[idx-1] + } + + ans := 0 + for idx := 0; idx < l-1; idx++ { + right := sum[l-1] - sum[idx] + left := idx + 1 - sum[idx] + if r := left + right; r > ans { + ans = r + } + } + return ans } diff --git a/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution_test.go b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution_test.go index 14ff50eb4..8906d44ee 100755 --- a/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution_test.go +++ b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/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", "011101", 5}, + {"TestCase2", "00111", 5}, + {"TestCase3", "1111", 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 771efbadafb31a709cf476da1c950f65b9c49a0c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 23 Dec 2023 12:37:02 +0800 Subject: [PATCH 077/253] Add solution and test-cases for problem 1496 --- .../1401-1500/1496.Path-Crossing/README.md | 33 ++++++++++++++++++ .../1401-1500/1496.Path-Crossing/Solution.go | 23 ++++++++++-- .../1496.Path-Crossing/Solution_test.go | 11 +++--- .../screen-shot-2020-06-10-at-123843-pm.png | Bin 0 -> 44372 bytes .../screen-shot-2020-06-10-at-123929-pm.png | Bin 0 -> 34020 bytes 5 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 leetcode/1401-1500/1496.Path-Crossing/README.md create mode 100644 leetcode/1401-1500/1496.Path-Crossing/screen-shot-2020-06-10-at-123843-pm.png create mode 100644 leetcode/1401-1500/1496.Path-Crossing/screen-shot-2020-06-10-at-123929-pm.png diff --git a/leetcode/1401-1500/1496.Path-Crossing/README.md b/leetcode/1401-1500/1496.Path-Crossing/README.md new file mode 100644 index 000000000..5fc5d3f44 --- /dev/null +++ b/leetcode/1401-1500/1496.Path-Crossing/README.md @@ -0,0 +1,33 @@ +# [1001.Grid Illumination][title] + +## Description +Given a string `path`, where `path[i] = 'N'`, `'S'`, `'E'` or `'W'`, each representing moving one unit north, south, east, or west, respectively. You start at the origin (`0, 0`) on a 2D plane and walk on the path specified by `path`. + +Return `true` if the path crosses itself at any point, that is, if at any time you are on a location you have previously visited. Return `false` otherwise. + +**Example 1:** + +![example1](./screen-shot-2020-06-10-at-123929-pm.png) + +``` +Input: path = "NES" +Output: false +Explanation: Notice that the path doesn't cross any point more than once. +``` + +**Example 2:** + +![example2](./screen-shot-2020-06-10-at-123843-pm.png) + +``` +Input: path = "NESWW" +Output: true +Explanation: Notice that the path visits the origin twice. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、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/1401-1500/1496.Path-Crossing/Solution.go b/leetcode/1401-1500/1496.Path-Crossing/Solution.go index d115ccf5e..2327bd6d9 100755 --- a/leetcode/1401-1500/1496.Path-Crossing/Solution.go +++ b/leetcode/1401-1500/1496.Path-Crossing/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(path string) bool { + x, y := 0, 0 + cache := make(map[[2]int]struct{}) + cache[[2]int{x, y}] = struct{}{} + for _, b := range path { + switch b { + case 'N': + y++ + case 'S': + y-- + case 'E': + x++ + case 'W': + x-- + } + if _, ok := cache[[2]int{x, y}]; ok { + return true + } + cache[[2]int{x, y}] = struct{}{} + } + return false } diff --git a/leetcode/1401-1500/1496.Path-Crossing/Solution_test.go b/leetcode/1401-1500/1496.Path-Crossing/Solution_test.go index 14ff50eb4..8e1ad21f9 100755 --- a/leetcode/1401-1500/1496.Path-Crossing/Solution_test.go +++ b/leetcode/1401-1500/1496.Path-Crossing/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", "NES", false}, + {"TestCase2", "NESWW", true}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1401-1500/1496.Path-Crossing/screen-shot-2020-06-10-at-123843-pm.png b/leetcode/1401-1500/1496.Path-Crossing/screen-shot-2020-06-10-at-123843-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..56abe17d24abf09419eb3ee03c879d9272398293 GIT binary patch literal 44372 zcmeHw2{@GP+c#2_GN`D;*h(9cB->0v^8P-|srFd+r~zGF!D` z!wMlGp;Z><2dssJmVmz^-^7=J?>ydW;wU7v(#*}&^q7UIsnW3<$V+b5T!e(o@5kGU zowli$O|!GMxEvyGzP$Xtig}{U{%|Fwlljsy`}W`0R=(E}eQ;^Jri!Df?ZGwn5=vLA z&&yW#L1jmDpO*J zbM78pI9QJQ;*F8ey}n~eV_n3n&t&C2Q6EK>6SjF~Y>?aTS-QdYFQw`;#$A~{Z?IP*evf`Vgf z8#Y!>oISB$Qo7-V{s%X})sR;_G_r-|)bY_|b-l`9oNiS`Z)4iVtk1jem8p$4YfDX< za!hs{>ok36eel7(1MiHld`a|jBnYj(Xe+FxCUeo|UX_}D^YINq0eAO4l+Zq>d^uz< zHu(v~UMViD=IY+pF0tf`EYG_StJ)ZCROeUk53^T4m^x5&7sxQLn;ym3Z8>ayYV_f8 zYPCi4zLE){nmE^5vsdmrllM!jmy!-;+_M=$E-A=6CZm`=QoH$5-KW9bi*L^PW6C>3 zq94iUe2n*hc3XTEK@x_D$4h^<+`rtg0B5!ZD&Oi5zHgn(t6YULwK%ma6V+WW{6Bhb zAhmx_IUQkawRYt8_JvbY$zP~s-3q^bisz!PppDKxmP>xpv>HJejCgQzG*m8lOQo=K z@X|Hc(?jc(B<|UjZ7A!H4cNSLE_kK0i1PL3%PixVlR7ef5n^}xweH>C2kV#1e!TV; z>Lsx2$w>$MeRr?yaTtzXm9{TMLd8T9b?W5@wI$6ll}<0Efi`86Y{n#JI=k(<3-7T`C4 z=XYmIa|@oow?6ho>9ADwfEmJF-5o0|>w>_~Mj5ozLMm=7yM%s7VCE7<{IHy68N1-= zYAdJO{K5{CZ0Y=b)zhnegbmX_FL^yyaAoa+S-8z`>?;4y@M^N##chULeRI5~y}8+G z4Xb6h;IY9vXACSiH?0{i=$LEJa`xQBd1`vvBiAEWXbWK0g3Ho7+6pZBWJI^LjawFs zKj`2<`iLyu!m#g#uM?Uek-Q~W3XNq7?X~%ATQ}coaL!*@Xxq0CWSsU+v9?O#Hu5r~ z5U9AwQ^z&;gqJHVJ$l<-_T$2iB{m;d?v#rQ-j%;5TO{7mxI?rkB-IgeSyb$!_VpDh zVu_Wy*Tr(vB(h3MyWbMD2>uqlvW$`^YVa|x z|LEMN>&u;%C*97vEwf+$g2V;*fEp^A(+chIy{Yf-y-#=_?ibf_ z2z6jeIoiBN%{2zT_3mfY;poHWSIrI0&CC-m6w)Ei8gG_%Mr=G}wdqLR!J!-TKJypm zUFL0WXdO(vc!cue^D)slx42DlU*j%)Ie1v?MdB;7cbP1k)i2Mql(ek4V!WWXpt%r{ zkdP3cfNfi+QP8$AXGKo$S=YCUmxI#Bi7A&icKJQNRrIJR-Y3o{eDSVTW_NSwSQgEQ zbumDLyO#^&hVC&9e7VQg?uoHo+2Jx1_M62c3J)T4B<)o+dL zX=4kLJY$+K?Ax8M*T2Deecbw~-IsO8_O$42yzt2RwBuN!g(g!bpG+jgS|O!IW97|`&y`f49?xple17#1?%|o5r!}254G-lbW|R6iTWxka zn(;VWN8jzcZiiz&$&uIp{bS%V(w>8ssYl62Gm|}bl{krpUMRFJ>kU8gFeX{1P_x~=<^b6MBo+vz~Vz%u7DrcZTkiu|L%)<$%>mE4kF;t_arx>e&+IZmU`$mMe2smP0SCO;~?Qu1#S^8fMJ7EUK)s>*ATut8&*T5^{!pu=5*q zy;|;@pLIq#y9`xr$=q`01og5v?Pc@!L!^kJh=c=rHNopV8Xr6gELbeCxd^N?-MHE? z<4R-f`vFg#L91GwLG@}R7LzEIlCL&k_005{O2H-zbvKl?`*-$G)X;GKv{P6_s{SJC zfyINpFSf?VJ&r5g^v?C%*!z=YgPOpHTI(@Ex45@&Eq7Iae6%si?{Z9&T3>p(+wHeQ zZ>QaG{@NcloJSbwl^c{N69)1|@KU17PpvSx!}~P+DRVtji!D-LZ2G>qwZi6< z<#@uuFGY3IOi_QEG~u3nhhuxUppP5XLF)3p06TTvCi+CmMJztvakC=IS_Ph6cZ$*N zjWWOlG^}h`@8xRrs6MU4Q+C((pi>RkCOfMO4M%PhI`OxpgHTxpIz8=)n)uk@$1bw26nJ#DDIVs zE7cQ=4_-dV(A{%2A(we>>#Gl^)}DL!y6bJgg$4GzTkjIvm*%{7Ko(V8<7TcJT&1UX z7kTYv!RxK013hv0@%oYUubCJsFUKdmKH-gqL($=)B4l{C&$G7IMLuQYi<@p3w*~>uY))IUQUM{VgeP_I?lXO?x1c3+oPQWv^!+k&n9TwyHPc zSZ8`2XD zYikwp0T&zZx5Y-Q6H-mA;_lo%&=8V{wO?LxV`3Y9f_b&My(?G!Jl@}l6S0_lE1BRi+!Juq5b&8z z)%RWQdt`RJZ#y0tfFE&)1iD&hI?-b$b)gavGPKYCGln);z@dyr4yx1ChY=cSZ7{Du zpM0Hc>UXLq!SKAf1I;I%^MY=>a3m~|&68xY_tQIOB5mK;2Ia|>YoiMnrtcMN7#A4R zNy8PBK@O~sjH)7R9~6N(%%i>aopAj=`amnv;W7RYy1YBFyIp;_-tSe8&@!>d(ZZFJ zIoEMfB0^-D9{58W9QDMlmxPRMqP*3oa7#}PF5hSTVQcYZ%5$NqyH%2s2B=dWt*dVd zP0YY{?p7gO_qFkA?!O;4_cU)dV!crMC83Hs7Av5AaUrO4Wo-G<%I2*T)ECzG=C0+N zRC^|!*(t_R0+vB*&{sSHCPhGIvHZIE880Cr*-iXkVGC=uIUyn8RJRkSy-!;nHE=?@ zYhG|hUUbp)bH5Ij77{Y@GXP(@yLewv@^ioD;bq`wtn#CT0r;B#ww8+0k0Rbzja5!t z9#b+!-f&UU)!ePQQw6p{NlD4*hVvx@>jQ^=y&U|XvC3s{@9PFyTE4!%n!Y-k$Q!O& z+WPwXT03`X?b@XQmeBC>_wc^pr{UqH`pZrJcAo<-UQRdMu6w&7J(T$Oy>JnE)7w}@ zg0D(`un}XOO5#N8XR-;bGdf{HAwLDUmDU4b7bbH70z~GZRFRtBj%cVzH#(ZbadKtSX>y$j%hNJBXK9NayhwnY` zUQ1(rPcQ1jmk%<}7aN_IW|rYuoP`D)(*fY(0lHm3loN`XbJdK-FaahU7B7G9{h)H;z7f>1%wazFF(z1L!bO=6sB%cU6IvO6)n zqB~rUsJNOiRlR=9K?F}VV{_U7;LFK5yY4gfNO#wNt#o_$Idv2RCC8Yyp{mQ5I4D~C z8i*=8#29FsAHJA3Uuc=807FFBQ#&^oI`NK1_cb8wQnta=<7X&t;U|*d7B#?e&w7SJ z7UY&mjFv^}I<-v&w#?4W1W8-|EK&YiNqa8U|6q@4&AQARzd+r ztpjf^4BoG_FSwFa63nFfTFtfWiuZT zEM5enx>Qb%AYv$(6X$lJ%_c$}qlS)Ht1q*#m^z6rsxPb>%__JG>vr~O#BKc^$aD+0 zsUA)LZVYpe-Uc#h2D-x8C>&;JL1m6%6EGMi5&$0z3ih)ZQF<}u=-rc3SW-WMb zF|deaxN-piF^Zc7_dp*k9Vpf+3_GzW26xRXb?%oREFaRc8I3_T^9*Y3ckpxN{6}U>|nTNW5+gdl=721Y&?o>Z0OO z3_BS{7%&F~dks+FyaiW0?-2>kb_J%|xwxwXxLMw1QfiP1V_LdjIX+@Y{n!27x=cK~ zcXs~iYW_wtUJbmy3NshQ>R^wSg|!4N1-q*r{m72M17j@w{?8oz6Rot_BF`BveHpr5?s_a;@K( z@`5S(*BdG~J#c^+rK4Y*zQfrOV;f2ccXDU!h;fi7DO$sv(T|2k+uv`LfSDyYB%}C+ zn1$x2OwmT^Gsna~mCC;!P=05QcCP~!gxXt#=;8LwIESsL223wSXW#wT+wnz)f+#2? z%W&f@soA9$hi>jJu>b$7bK zyp7CgJfZVNDGJ*y`|19%^@kk_L&3HKz)C*$xEt9_$m1|BnPVc&SYF_7H zUmy&LEg|b1445^|(6HVFw;0JJ2%04rEy3CnSfao|2;8Y4_y}U606_@wmH?gp?+48= zNEVp+i@=;zIwfM!kHv7vS{OzZ^m_q}&r)laq5(Fk7Dv?r=Cv@)a6BX2ZzfnsSOlXW zOdZX8P9LQ@8K?75ykg!}?qTrNSrmGwum~V80(0i+ed9=h_c$clh{H?Q0Ax%IiQ77w z2fm2MQzU41v3Oyc{-PQCO*F^(*W_Sk3pA&G&&@$}{Ad4RFP|(;9Jsg21UEX(&>TZ+ z-_4>I&PSBfqq;V?M&n}k=AoK2TZe6A0vD8j6v?OyB#cgL`=Y?i->QHY?rAB^nq;D>qrvJ;62i>X!)n47E$2T8l2S%T3LtSx~h@+BLA zgAlk=LGTg8L;->j;4J|<6@ccyFvY-ywcvQPO#I`Wi=r9-$i;0eGUijqHql?GBU?Zn z1y=AEwgLhF7pNtFQd^orDryP|iIe%y0ubm-0##0+VG5*Gfe?)r$o7KW1i{|RUuCCi zp+O6f1D}Ef05QE+*Z%F%N7KC$*`uz<0SdBNr0w$A?N6RCipLJmeUB3f5#OzBqIN1S z`JRTj`}c&i2R_%mI4|>5e6z~;!`7M)G-Q{YjFXj+k#;NCqM>wW*=u1FsSUnd8MUZ@9yc&!c1WK38{TTA*MU7H)_|ug;MNi z1KPd6Td2Rgxk6kixbma;PK@LsB%M=elD$t5k>M~0e! z*Q-==^wl1kam4f=z`OJ;Ic-A~>=bxcyL>ae{Oim9P(tZGhhc0RZO^FzRMLU+L7TGE zve4LX@yzF&^-Y0B%v)^O8o6@R&R52etivwINR#i~4_Ck#*%Gvqn!A2J(LdP3S0>G|ew#*nSL1uMBuG7Aq7(-+U6j_$YB+;t^JhlY^t>>(G9 zNBc6IrAa!No@e1>P(|w_$Zz7k(i9`e*5W#8ZtTH5bjG!SAqCi(&-8Q7{4zMJOGrg1 zs%?Bk)8+$z&6yX;M4Hv!0a30{*%nhE8&mKL{F{%OaL@k490W0= zNQ9%=GY5b3g*`L`QfC_<`1iLqXqJJGJB~S$QCzW*lh$KK3l=kSG?;!%%qS$l0!xXh zGjFlDprLquhe-z;)Z7`lvDZfFe}pKH68-ksU;nt27@^nqJ`dN`hK2JOxq1-{ zZxjPd4VcIxf|M!cNSHT;%#jpzV2n3j*6bm+fkNHK6{;`HS5Oc2LSav!h7=20NcA>hzHMAS&l7 z`4^h@2VHU%e@MEs0WW{kj>||TF;mC4BK*I&FN{OFM~6{4#KAvvgV`ta()Mx>1@g{Q zvtBs%QE+&|B+0Jt-C?^&ul6eZ!n^*cA7r}}(&Tyi*|3g~2`J|y^eEQ9(aEP@XSye| zAC+VG^InYFVis&OM~!FwC#4LJDUiyMC^@|9xY+1b?(6#y*rZ4hf7qPXHpxMI!Ff5|^u|luo>Q?eUz@lzC7nMAZa5)7zJ)LLX%+ zFYxGipiT8@7SnexM}%y6-WXsK;2hjNLa>mC*~3Z(S&KXyRa(w@U(OBi(9+}>NbPe3 zmTHzwy>a8jui)(Ke`z-gElUlNTc|J$CPjA@OT(84i=J>qJ-`1tui~sk@$r$x#mSP0 zb&R*-O8KioC}wd4IKYX(+yV|gKyKFEa4W3kVWsI6r#*4BYdqsg90s2`Eg$3q(-09yZCWuG^$LIG$Carjsx4w_m!_2$9@u_R z$++(tV&_rf;`ttQ>A_~o!H5tUYqL^9`E1baI2}Dp|AeQw%cuGF`4iu@pAYQjsYnjE z!oRae9kW0`{MohF^+c@#nXv90bd0g)H=RFE!q$Bi1MC%IM{2VN(=kE zZKVvTzVMF6KKiJBjW{(J23YF|@eEUOb(37b5{$Ywv>M#uI2 z5GcIGBECUoUhgyqRTh?+<;7*Vmrp4kb4((fOB|QR`rYO=%w8Wks1?vmn{tH*hQTKX zxZY(?K^aL3cheZv7IY|{jX)j%=AzD)h8`M&+&{TaZS&LZ+~=FMLlG_C{E8V5;Tt$1 z5Y#?lpPgRm+=2>|VmsF8zHU+6P5nP}IcE_GEP9V5xo)eJbV;K;bUmsSG=9W)tPu1M zof=%PC(jt!4FiQUIO$0` z+qpFC|O$6w}4S^r^3G%P015d-JQ9dBw?K-!@Xt*jDjpy#$~g zqCr4gHoSbB7j^oM$wisc@9--!I*bFWB7Bnx4d)j@i_tDiWl`Q{8oLKD8yqTZa2~aA zg2yCoT7+Dvd6!U1czFXDkNBZ<`F<1UDi^E>{jBEw0@I>)Y3}}p4YP-EqcD02ks%on z#;$dOvOC7-8?@j(xRE_vMp*%-Xh|fYR2DV~d;W!+srL-?duzrn2t6Q&zEIkKOJdEC zlnWZvD^UTxljnW!!MdjDRa0%ePEwvYY|{EqET2XH;q4Ck5%_F+f}O|lN1=5o7#@=- zaenSrC_~&q9~kqP!Eu?}1`2a;|Ga-bICa`CFzczw?(x`myj#dh~ zUkvS-3=G-MAV|~P!o0kVu*v;DZJ;(R&=Pb5U&fz>Yd-E{wH0ss4%dwxf$dGnBOv@b>JdS z`hl=oZ5@nzscH0-8NXUXt6C_A<4rFk8S~=o6^QUj2Q(k|b@=iv@-rVv{+4lT!$2vu z5w~M7kX5VkN*s5%+Kci2pqw_wAj$1_SI0xX3QAQEXQc5w!?%6Pw5Du?c{Cqv#97@9 zYl+gIXk(fo-WqOO854v_U9Se3&fjE9uxFg{h`kQKs>YQSuNy(f^ZR4jqUQPt4l1`a ztlbG|Sp0+0InQv-i#+dL9LQSJyQJvH((Baz%>>Ax09(bWSEYbQ3_h!eT#V=J*+tv~W$g=jIIpfan;gI!;);c1g>HpDPIH7*GQ$4t_m5{9U zAtvAdqYM81Sz13sFa-zwVWraee{{CsI;mej!q=aAZW+9wi=%R?b@ntKqJ*cz9`0Gl0cwtNe4rJqC?d}y90i$4u+-G5JE!$&5<8gfK9OZGfm)s z&qc$MD;!EOpPi&d>W@5%fN)Yqja&mL;SL|781CPZNJGs;$pFkw90_fE zh11jtVhqEeR@$i#6w zalMQuNHjG$lkc9k(^cW~s>Ibe#^-TO-;xFzI8k0qRWGvdn;I+;0T1F6v10VhQ*p^f zDwcG=6y!3+9Ba)A#^88%Vbh>W;ryLW4V$rncnR*`vRyE8{bRbFxA8gMsGoCnJ zlnSHVM;xWUuQe`O6kEOV6#?KA;{ZZnUm=I?z<)GrCImc6NW8C}=C>37R&^2A>j7*m zkot;W2V2z$y!aDi#^~`QM-Y86bYCs#&_kW3N9VZ{wn$VZqfGz#92B5H8lQg#^V--)CN4KftbhnlD7lujCws6W;}I49y+Ioq3UJgm`S)ZH^^8Tw;9T9KGeG>&;RSy zj7-=LA253n<@=9bhP7JH}oiU6-jy34idHdUODax+>4zqEvPq%f721^*PCTJ6f6 z4F72;M%IoF#UlDxPJyknd$?m*-WaVG!>Mgh_iufDUN_Z$B#E_rw2=gGNeGZkl1f@? z^s?7MCy#OV#^EqVDX_T^$PRoq<(oVNhJIP;!!iTLRpFroR{Of2FA)bEB51;f*bAD( z@REnfJ=#sqJZ)YFi9yDYYaKY%4o4wDW2RKZnMDBXwjp14v3sY5ri6zLY0-@1aKITt zKwBGWlWxUHwhjm*a~!lnB&Lu6171+3f@;I}{S-A&c&vx;4802f&kSu|at5WgcOFZT zn?{f5;Ldy}`+C)2>{_@CRvy60!8=XF;y6QXsyS>XI~ET19u@l#$}WJ~!KU3ZQ};vw z9uJ_~^6}i~z|c%xe%-<2sOckcQ}+J{kN1gzt@nZmnxHh&t% z?J9=tiWc=5ZAfn0u;F3^r$W)5iJM*wo2NPiEwtLNu29Tp!*<0p9&J!=(;Pa1yfKZfRESeckE z7CWcLcTOJTDhog1h+&%n^}W#_!3F>Drwe{Ik6@EFA2-f7{Y1!h=5Qhc8#LuK99lg) zq1QCU$XL^g1vmtthrxbP!5P*<_<{`a6|OX==P8Fn_VndYYPE24eC@4S{Ddu#zekiYk)774kPTX>r&TaWEu zfeUWF-GkZiNZ%4@6fd49w@hc zbq@WFKjU`r(If)u64UF@4PMP!JNPW<9WR4TkN}%NNKDLeATNP3DyMnYK3@r=s2ofd zU+Z)v{h(K)lWlg`4MtR;_QPw;+_OGGK*u)LPFv9Fer;LFQ(=(9aQOu|zNk3w? zO%I&{s(*HPVo|RHF`7r^OQaY61uA0~f160-VdU;45(v1@!73rZ+%F)X7Wy@5mX$mE z*rRkj}Gdt^sZwuve7A?** zzt~#w^@=yf^d7HF5-W%FM&_y%xI~r%b-61jXMh{zpYqvmN&%kj#_=FBF0FI`r6>*P z-1j3|scD=cb>uLPmacAz4eTLjIAM)__?pk2^8Te-9k0G(4qRt3aR4)iD?V6!1`i4t zh7lx}t|lzMWhH5#-eAQKAPLi(63^|5z(D@5{d6Ru(-mi2KDajTG^~zc{~VMzj>G#? znC~3e@7y>P{5vQlu%jyDb#CdEQnJGAdkRrdA7oxsSYBQageGLXip(Q=5WWlhj{2jDCifx zzv{N{fV`r}(O^T$kWN;(M-`%1yf$zAkyB*S$n2P2Ijc3V@1?t|*ApC20usSCJ)$27 zaCG=l&M18YW15DbDo2j(2GQsFpKB^*FusD4$+Sz>f{snR&P%KD?KfeFH9v9OHoc^_iJ8^6domT?Q`pGMZnfVG|aGqsUNF$6k_ zFi(OQvzoDKHBh=?9J~gDrQKFHy1;65h3N!=q~m;rME_F`gUvck#tX{>8XXMnisott z^7$ipd6y466EHWsv=j_h+kXTrkW~JzA_BcfuY*h1Y}T|sXkraKO$4o%u|ki79XoL=sn##^PWtT3w)$Q?oP!b17Q{AY(Dj=N3Uwc zDf0G#ow{dsir*>qpLgmdfzKJ-P!d!MX$=>A+T-vKb_8eGp1#BhvYiDvR04i-;ywa3 z*p`>ZEIg?EF=P>odZM~Jgus%M<_4|QTpA+nO zFGNkTCmWT(Df?w7#El#l8F_M+G@Y-qc=woRqLA4-w2X-JZQ16rqVvi#Am%bv{$# zmyiWZ?A(i!6c#NKeFW+jqIZNaZ;^)vii^UV%(tSi8iw4~;I7{JKnf?aDSdAFI?Fna zo8!pte^akGde%n->r$Ym{aj5GxQ}1H20EM<-)Bd71bRLZyQ&q(%o4CVqa5fcH^-^e13I0g05 z)hgh(XDr`|xqL@gSkd~bK}(V7IyI28f+ec>C6Bt2;JDAYOp7Qe)4utZfq$^bmsCF97uc3f(W2&cJX{T))5 zrh)1UM$WXTOc4!Hxn)0UMO@S;b;sSx)Xb11;@=O%f~PXToDA^D1nIZWK>dNG0Z%X1 z%^Ci0%+>#cP6?6|emN&1*j*HyeEE|nUj)`92*!VzVEo^Hj!a-p0&5ajlR(h?|LX9p j!0G+Za(Yxin0`3@T6ELZNbuROLKX+D4&?54y!C$oY0D*1 literal 0 HcmV?d00001 diff --git a/leetcode/1401-1500/1496.Path-Crossing/screen-shot-2020-06-10-at-123929-pm.png b/leetcode/1401-1500/1496.Path-Crossing/screen-shot-2020-06-10-at-123929-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb8c79a1afa8e95c4427507ef2e65d9acd72df7 GIT binary patch literal 34020 zcmeHwXH-+$+Abi7ihzp3R!R_1P=Sa@heSmMETE#IQlip(l^PNe1r#AFO{K&JsC1ED z0#YKNL_m58#SnT3fh3T2S3GBb=j`Gc->)<79XE^tNmk}sbIxbJ<$2#(xPQ*vM0C@x zO?-TOqGqPYFYxgR3<1B7HmnD(uVf)9CHG}l z>XTLlqxBo)*YSOf0HeSuAMEX4k4j8oIF=)}(LLw#%T+268JvPw%3E4j`Q(eXWQ+V@ z+QiWKZ%a`!KN#}GjGXf}(z1BpII&y%QN7^q#=QIcMFN{_L&K? z!?VIid*3<}D4M%b)Uz?RdjyIE`D7iF_~BbE_4U0YU+qU=lvQwn-_0yb`aR@)8Vpa^yHG}w%|D7d!yi(yGJ0SQn}A}+=0L4 z9C~pHW_u*cO&dmdEShm7O+?|S82s|vYNd4@PwMR7ZslxG7x(`fVXQ|hju+KBzboz) zIwiBq+idfms4a>yH;$VO35wUT7FB{p?=*6WU-{@0sQfKO6xTTqT`&#^7f5#Q5ALn%x zsWQLlb@_#Jt@5X~G>w^9cq)6M_$3`JFr-KNy~`1`e(RkO4{@vcT>`-pmIM&RQj|zl}Ko zgW>DFD^=*WgV5jjX7Km`vCVu_*?hW|jaHwRy7g^BcJuB37U7+!aZtFYj=yJOyQ2wRq_HEH`8W-0R+Nfy+Vzk^E;w>~AJN6`73lE&NS&M_ZjkpK9**16a4h z(A=HucB{g`ToFc$gzx(HPqw3*;_D=QArK+-J@BUkWY6Gr2m#C;Xk8V#Kv2IvarDgM z9-oc&8=u{McX!({y&EDopkqq#RQ(O4nBxiwE*8soyzMt>#OkJ($CM|R#|9_%orE8s z+x^(IS;_ecbYE1XBH{5VQ+HDXQxnq^Gub!d4r(8S`r~9yn(sON`NR*urNE^dOO8vH ze&7=+H&2r@8_x+Qx+d;P{F><0dg7FDX3Be$lI%50iMLn3SA5^(X0)QTqP`NBoSdAL zjOzJKt*A#PZ&TjzHRq3VF5z#cyV6`_27;g8DScX+6qpzoON}zm9_)ymdbe!2b~99s zrOSe_BDIaf-fCM}zc8|{I#qR)@qv0;_Cb7}n6>jO^Oxoo?RM$0`nHwZZ4GSW)h&XO zy^W+C7b&kh0`6us={n~otQlWWarP^6FMb#b2(rVUfVR>_T+wvad23{R5 z&bk(6?R=%+qgT;FX;I-$PtAs`_Q_JUrk=se4pjrxkMm&$VO0)QtATNWxVgBw3hF)T zEozYLlvsqArHq?QzWz4Z8rfpmUVS^iW9f!z$IUO9OQoN8ws0<@TqBn5zPlS@tYqvK zHRSWMqR@89cE(0-v!httu4{)s`cAdo&~CU8ttK59+Gk}Y-Ye7lH9sh7Rve^N?Gj8` z?DaDDf|ur#)}cPFE0Wbvx)C--Gr|9`pvXq? zeWI?S-Qs6A=WVV5IqgW^d0DDQc3~^Ti0LA@Tj9{ntBs=hJ5z9Zgh15NE-nA>_f4-k zz#SZaG^k{&T)jwf30QvHao{9At~4(BxK8u!-@Lv&cp6qjEwa4H`OR2H!XV4-OG5dW zujaTpR&!jr$s2`C*^*YMG-m$F_?1G@9y4WE_yx~S#*aro2rcvW(Q)Z|RQLn42fCU2 zk`kXMR_-ZrwwWrwG@;)d_7J=i8GeU#_s&LV<>zONn$lfxu^vpe-)P1#|_s1SBeR|Rq2@U!^mf>zE!E!UY5ff@m``g^YCU6STu*M7T99}Ix&BSYIZ zx9#+IHhkKWQQ<3j=s@`8HjmlzrE-9Z+d3~X!Vi5ebN2*`kddc{tC4x!bbPAVLk(`tgZr2D4Sm+(YTxJfG>Dv3w zZo}=FP2QGrD%lPuS?)3DS3|hh2Fm-b=GBco?vB%~WjTBE^sOPU;4HTpx275DgSQW| zw6xum^H**5y|2E!!=@x>;A7~G6-LROl9XPdyd0Q!X{`qeL<84vSKK${a zM9g%{|o%lo}ALas%h$;TQ2FZ^8K-N*_6PjIgj^2 z@9^cZ6*(R{eR+K>Cha4>fOLPT>qBptHw!Wt-p$y_I4%7s%2jkY?o~52D>18d-D|Or zhZ$NVj{OwKTKt+^uD(OCOUsR!vGIm*lTD~)nIyS+{p66j^KEaE4X{`_Oz6!o_j?i^ zE925O8QfwXW-LF}WIKyxtQdujrqL>zDH%j*^3TsMgHDsCM-E`T zLot)Ec+NogLO){a=;ufg@d?mKNF#E2yogCA#*Zs6D-$f#GI}8XVS$C3xs*u;-YQh?>Ea!CqxTOYr+VzV*V-AM@AE=J}u>3Ghv98-hNx zL{l!_d5g>1FUXd-j25~yzVV1r^}e#%wAXxdQ4L~Z`tZwM-4b{BW)>g^4=dn&f-L-yZ7sByx)R>MIiW_Vu4CT}CG$eeqDSG;Cf{dQ4+=BoIqN~q z2sf|LSpguj*yv+=)t`?~au4^H-|T|YA|D@ry6eR&0awnR(YN>ZRKMZiebZ4r*wY6n z&BtdLtPi~PbPTv5AMEMj<*y%Xr0}zZKJcD<8LS}xvq*ruk;0X;=j4sO{T$`B)DNp4 zRDf)fmzOv6b8ynXaQx&yZwEdZDYyg#_~?VdK|w+4L7M8`e$HSGJv}|}!9(Cfhtz-) zYW^W!0XKrxy!;ja@sQu2bKKG2-p|!1z}4GJp8MPzH@$BK7%3=lEBc?Gf3(vv*!5pE zdHMgdTR;cF+;6}d>IcF9^K9T&L+(}mbFRUT9#@XLdOCXf19d=jG!Gg6EdQ5p{#E0@ z-Ffw2cWP^C|NEW)_RT-#(?af+oCCPoFhU6RWec@tKJp^5Y7-q@AsofkV zKH8hkVY6u%&MaxMh7?YcW*dY*=aA`h7->itx`fq*W-pH^Lswf?!7_BKM`)G_Rv2AV z7t*#m5l0UXNiBKygR)b6A^f+DKJ!gOamo;9Epf-2#^VsA0H+93e$Neu)e4?EEfgQ{hh0y1O+O69`-i@TT!Q8J( zAh{uis^N$9?d8(v;O%ZU!6Pxu;M9`(KXLO?dXK2f?WVL^UExXPidx>~VS` z4uB^q*AIXvs=@=02OdxIcxwB9oz0{4V^JW?fPdi$z6j2&0Fq5XLzz=1&@~Jj)dB?x zY=Dah=^|_Ifs&w|NZZ@OG-P@r=ZIj2)aa+Mku;2=zy_xEZA!F~ypQB4@`9iCS~KT? z87HY#bT44?*avKR4uj_~c;1#rRd_s)N0NCYnHOR3!ZTiM``=CsSWAtN5VR@^On0$> zj)k(x1<;is3}ZL~xkdr)MAvNnnGczTan{C!q4fG_7;{{Thzah4)w4=CqkoR~r|Vg5 zF!mBtiee>yn@@n_7_rjF{_2gOz}Ob7WzIx7hKl$3bMP-WDH!ZSD; z#AYSHA&dzShn~b9y$F00AcSBH;t}+f0wimi%}-Z0;ft`iJW7OeR-<9887uT06v`Rh z0PhlDa(s|opE$7`rWprZ%@HzLJ-xV3iL;YA=L}`^V(d;Lfd@gD1Tbu^ac)dzK2u&BOA(^My|c%++nzL2+Ds*rA%}~7;~B!he+VgYNbU6o|7R= z=hx}}AvXgmXpS5lEIi5=K?AzQ8O&g~qwD{eLEUy)F?*V$se%Tzdk5cgoO9{fh9WsOa+Z{ zGfO9>5wIsyv)mj{_oFpjfv`xwTBEnM;h;8_ma3h^)&Sea6CbAj-(!1R?wQ+tC&? z{$z2+2R=^1lN4y(+MvZ+!9}lfGTDu3RSEFwCB^%-<6TuQ4^T>O1m?TFA;%COOy{_f zLOhiDZfK$m6*n)8oT8v*1 zvLk|-(WTsz39Lj0})48HO@CanKyaPRQ!V<1@{s7TJt3_fd z;lxcSFe?zmq!t8lmrgze%6_8oit-TPA;3d`hX4-&9s)cBcnI(i;34qeMu1q10znZw zIP`!G@{8{_z}c%rDrlt*m@8Opl7jUai3n~vGCI2fp#8E&?3yk?HVD|B#^GcXe8Thb zK}WcI(&mSSA7)yGG?VS`XlR^rxLGM7|4224uUYlVi|boV6ID(h+t?kTv@Ywu!a=1M zru7#iR0rj^T5gkm7PIZa?!$XD`VwQ}>ko;%ikwatI=bjIGMmuMp5Nw zkx7Rkbh?1PBfCRe>jwPN{Z;$DAnhTF>{O_h<=D0BC)?BQ81j81b1OO|C3FXRzlPBv z&Y82#R#Uhu4#62M(W11)k%Awpz~gW89?t`ZCpkQ|;u!^=#pJmYp0DLGh5rhTLcbfJ z)zWJG0P>r{p`$n|FvdV{s}5%Mt6$~;+jlYu`WWHu>-hax8UHi=CGJ)seGPJ#y#iiK zpGC`e>{y$?d%zdTLIJH&)`Q>gk}vIiWmVcw9zv_X`kqi-(x5cBa&R|1=3{MvO4h{M+}5BNiivan{iX-I3a1 zq(yS(Vh6;dyyWcJDT}11P^YCE4MzBgd@D_WC2PONAvrW;icuIfF`PjydE~jKQ2-|# zXfsnz|2U1qC?IY&vpooqu?hG8&=zfUta|0!A#!|>DzKRVWnEs%e5zADCQ1M{cHomi zK_^0vl(IcmYDXtx|Kn2zhbFZNz^;p6kxO0nK!EYNX?A!yOUE;m`I7y@gVjI7s>4bF z!9yVz+n3NwH`!0Q?iwy!Y4`PFxn$oNh(*{yS8JOc^@C)Vr_tm>5GE`HXhKaMQTHM! z?HyE&#s`9lg6123iVOSVpJR+-dS6h1^dbf>&Jp-UhH2AjSmi4Km&WT(Uv^j(|3&S7#sEDfQ|LS!aLaV^dfA*I> zW$`2vnm0+O`_Wy1i01bgMsu}rEQ55UH|N==UV+ql?8q9aS*O-l1Q!pP1h%aBSKz`I zieKX@W|Z5$q33^_n3(+!;H^hXRgVf0`f-Rr?gN@f@)}1<9MU0&mYoe~A|ROfuRE@n8gf$cL$2DaE>`Z|aG^2)CzC~!C&0rWaWF<$r8y~!7b zlg6O6b44&ttvYCS1U)~Z42K_ue-xMY^0bs#v;4Du+6JL7VGLU68M%YrXd4>)AqjsO zMZo+z8(#E7_LUO-!r>Zw7}|L2>x^6) z$_ehgMZyK1C6k57qmykfLXOX=_xnVIvs`3q2ZYmcbL^KjnK}jbK z9rHgYM|qM`{l<_rZ2?um)jUwPrLjGFw}W6?KzQs0K=fkRF4CtD{jnXZJ!Q3*;`Jt< zN zdk#n9>_Ln^<8jb_IV6)zK(dL*YhGQu8BaH}`o$oSS~*B9DibhVTUj02$qslPTcQ%|^-+(i<^uwtWEzc^ou37pfIrA{cVPXJVOPaQVp*UgQ^x!X~mF9GK- zRNiwjk)!-jhE}8n4!9aD*+h3HI80mQ=y5H?uiE?!Zmv6a*Kh2eROvy_Sq&4}Ti?f1 ztZXRHdxv@`G7rStzoR9QaJbg5p3dExd?)?(*%V;D$8mW?<5$Yz=pCw1B6NVI4vsVi6 z--&jQq5HUw3deO+fV?|42?yjiA%r09!_D6Oytymycx4 zrsUWV_7kRFqttt=Mpl@@drnQGkj3PBtW*q_-^7qJ|D?#|``uR-KmJs;QGf+)$^HW6 zmHICsVI8hsHTPjDKd2^W4v)bMt>g!(acOB=8|VUR6~|%XngnlgC4yNGV%9IY+t*uP zIK%!nfNqhz_4Qg;EO#AfBaReCiOhoBZO z-M4_hg0Hs0)B(or-FmAaY}jvbaHP}*VBs0?h5GWs?p_SQLoB&IH!<6gu#eyf4(ne! zee-|cgeD?zV$J!AdQq=)9>!sl&zzIFTTUZWN=cz;#M(4L4;Rut?!SJl`M&3O3xoNO ze&5fV#J!f)^A2ZOAeIscfO}dQcc%lJgKL?ZA{n)6YOD@iDPkjpZPdi|EvqKd9UxD8 zvwwGs1LKrNWr%N4M=7X^PA$XOa@l14X|!MKKEerbXvgRP-Jv(%mY@h)HLY0dE`Y?B zhS#R|7T^h`q(%TNkUEAIhQZz;4n0n0>spirZiTSbe%AJPo-7~-B4rzJzJj3UT@m~) zrFJ=!@DA|kqmKC1_Ml{dTdNkZ=J9OLkZ+N47xP2Dx+janN7u!Ix(i7U2eHO-OOO28 z^@ys_AZ2#paBmsO13#%au%@}~6uQ^-ck+!aSSbMU9o|L)%3!L@5A z0>442^Mhr0HVPHO51+K1>CU4Y0wjDGqY)*=DI-gUuIx+3#vwOUe9=K9I)sEXqkC(q zC2crH8;05DI|Q!<>TLkAeO6b}0ZPn(uDr9*LY|#v*X1oc535bG5%e$bmJLkdH0S|S3hC-w__EYqmh96tABb`bRlKB(kU51j%JnLXZ76=uja5w;GpUW zSuFa4E{E$r{pe%S;9~Cfb%Ui?|G=dcH1%V)8a{S#ZSRZv)LH5Txn zu_?MM-!0pU(X6?aHd$a|sm&cYE}*v!#36&gI4qK$09{RJGDz%Oaq)*Ba`o{oy_nHE zBFXrdWv~?lka@^SIU62c%xZaX7lkBpIrrakkl|b$l+^`IibEc*2)=JsJ-&nB3vj4W z0@rxg4|2Gi=s<6Iv(|dF|7c4DK92oKs`eav4#%FW3vNS>O!sntGXScXVl}L{57PhF zy+kV;O`ElW6!n0ZL<;l8i5V*F^$G(VAdn&r==p@j)eI1Qcq%SPsQ)ouw<4i{0}O=w zDtnY_H$lyqfS(c49z;(o`rFiFF}VLUep^w&$5(ritlp;6)zfFa_tSuLDV4!Nqg7A) z6wV_R33LhW`D5ZEXa>MQJu5ns@(;5=s-d|fh!m6wU+#!4h!8ES-H|$vLPV{YFOo^% zU)rhEm5^}>^p$o)%9p0oZ_Aj)czIWhStn$!>^%202y12tlQUO^*QxA?lT0bNmFJ#B zf)foUEL^!`$7!{yy}(|!-~^Cw%?*^~z=39YuRZT!9Zj9bRT{j-fFP$PmuCOa*H&kC z-sd2yTb7Qt_u~ev)nG0z0<%2Hbp>+?5Xv*04g1qmu6rv++e_)N`6rhs+6enhW_8|r zgVifw2>vTpF6uSD-ssOyoF$n)@%@~VXK%wPD1|xbT!dgp57YH`-w6B^;PZwXtE- zfOHIDP&6LuokIj_2GQ$;AJiD!4+prQ^J+RH4*^)C)xY#}N%n7|oGGX9IZrm141(>( zGicS$A>5NE7=AhxEoWPS09EQ4E6a>QPFM#O8!8`MK{J0SH;p7zA#4IVPB=~&=*L=y zr6ge1axm{Zvf>BBS!)W;>9;QHO}|Ny%>J3a0%(JsV!ZGMk5Z_xp;9+Mz`b>TIpo&l zccgSrd`&6xVld$VEM(~kG0oqco6ak(W`B!@d}I#eS+;sJZ(p|pp_G*dBimLhZA6hAlOL5xzwr12Sa6FQqCmsAkrdu-~epb+oIr zYOGXwuzj`{Jju<`a5HWngLQy-M5lC>XurQOiG2oC!?ps1UgO^pc(X)CriD9qo`G)1 zD@36RN_U{S#;*-&8VrPCRTkCc^f{I^ej^OQZtjDzLnd@CFW{eUZ~|e-)~YG!Ai!w^ zQvJ34i&j?VD|8S_PODlTaOW^6$HgqxI}^HgwMPd~>oTsWAL6+D9-Rl3vpDpbCs}LY z>h&FYbmpWE=4y31p6m4eic^Pk;S2s~e^|!|Y!G2QaZk$b3P1$WYKX1v8GZN4 zza|`OeMCIaWf&7q;hwB}(|fio0Ys&AiU-%NYvrCS1JIb1?P0x-GeA_$8EWwi^#T26F4fyb`ErU0QJRiY@>yWbDD4ScqR~H1)oMP7w5t5ppX_nT@AbAud#ON zS{jfUA`JQCY?+w$r_W&q%C!1HQSAd7a?|E+?55LaC92@bykg+9#Eub3A`WkXVa7($( z?bYbL@>@g}755Z%9OXPb!$~+LvKLaci<6N5bBbjfcg@i_cjDo1CiseWiDd9f*@&nB zfbo#vE;ryI@%zFH9uhnx{<gT>n1Uhm%zo6Kyh?+23 zvTaqM>!QN2W+BG}*F*|OS9FLwfJCex|0L-7?IWsn zsKmyT!Ys{0EQ|eWPw9n@=EcL__?$e5FH*8 qJS6_G+?pp7zb`!hFCnoC?JJNaJvi~(B(UY5&+LTx@%&@g@BAMDk>NK0 literal 0 HcmV?d00001 From 1d3ab7c1bee794aed7bdde5d96779d0ea137d9ab Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 24 Dec 2023 14:44:25 +0800 Subject: [PATCH 078/253] Add solution and test-cases for problem 393 --- .../301-400/0393.UTF-8-Validation/README.md | 46 +++++++++++++------ .../301-400/0393.UTF-8-Validation/Solution.go | 36 ++++++++++++++- .../0393.UTF-8-Validation/Solution_test.go | 12 ++--- 3 files changed, 73 insertions(+), 21 deletions(-) diff --git a/leetcode/301-400/0393.UTF-8-Validation/README.md b/leetcode/301-400/0393.UTF-8-Validation/README.md index 0daa4179e..25720eca3 100644 --- a/leetcode/301-400/0393.UTF-8-Validation/README.md +++ b/leetcode/301-400/0393.UTF-8-Validation/README.md @@ -1,28 +1,48 @@ # [393.UTF-8 Validation][title] -> [!WARNING|style:flat] -> 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 `data` representing the data, return whether it is a valid **UTF-8** encoding (i.e. it translates to a sequence of valid UTF-8 encoded characters). -**Example 1:** +A character in **UTF8** can be from **1 to 4 bytes** long, subjected to the following rules: + +- For a **1-byte** character, the first bit is a 0, followed by its Unicode code. +- For an **n-bytes** character, the first `n` bits are all one's, the `n + 1` bit is `0`, followed by `n - 1` bytes with the most significant `2` bits being `10`. + +This is how the UTF-8 encoding would work: ``` -Input: a = "11", b = "1" -Output: "100" + Number of Bytes | UTF-8 Octet Sequence + | (binary) + --------------------+----------------------------------------- + 1 | 0xxxxxxx + 2 | 110xxxxx 10xxxxxx + 3 | 1110xxxx 10xxxxxx 10xxxxxx + 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx ``` -## 题意 -> ... +`x` denotes a bit in the binary form of a byte that may be either `0` or `1`. + +**Note:** The input is an array of integers. Only the **least significant 8 bits** of each integer is used to store the data. This means each integer represents only 1 byte of data. -## 题解 +**Example 1:** -### 思路1 -> ... -UTF-8 Validation -```go ``` +Input: data = [197,130,1] +Output: true +Explanation: data represents the octet sequence: 11000101 10000010 00000001. +It is a valid utf-8 encoding for a 2-bytes character followed by a 1-byte character. +``` + +**Example 2:** +``` +Input: data = [235,140,4] +Output: false +Explanation: data represented the octet sequence: 11101011 10001100 00000100. +The first 3 bits are all one's and the 4th bit is 0 means it is a 3-bytes character. +The next byte is a continuation byte which starts with 10 and that's correct. +But the second continuation byte does not start with 10, so it is invalid. +``` ## 结语 diff --git a/leetcode/301-400/0393.UTF-8-Validation/Solution.go b/leetcode/301-400/0393.UTF-8-Validation/Solution.go index d115ccf5e..939487aa3 100644 --- a/leetcode/301-400/0393.UTF-8-Validation/Solution.go +++ b/leetcode/301-400/0393.UTF-8-Validation/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(data []int) bool { + l := len(data) + shiftCmp := [4]int{0, 0b00000110, 0b00001110, 0b00011110} + count := 0 + for idx := l - 1; idx >= 0; idx-- { + if data[idx]&0b10000000 == 0 { + if count > 0 { + return false + } + continue + } + + shift := data[idx] >> 6 + if shift == 0b00000010 { + count++ + if count > 3 { + return false + } + continue + } + + if count == 0 { + return false + } + + shift = 6 - count + head := data[idx] >> shift + if head == shiftCmp[count] { + count = 0 + continue + } + return false + } + return count == 0 } diff --git a/leetcode/301-400/0393.UTF-8-Validation/Solution_test.go b/leetcode/301-400/0393.UTF-8-Validation/Solution_test.go index 14ff50eb4..74a1f0e27 100644 --- a/leetcode/301-400/0393.UTF-8-Validation/Solution_test.go +++ b/leetcode/301-400/0393.UTF-8-Validation/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{197, 130, 1}, true}, + {"TestCase2", []int{235, 140, 4}, false}, + {"TestCase3", []int{255}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 44b48f2d0ac11bb41e3e25dbf29c178ea0784fd9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 24 Dec 2023 15:15:15 +0800 Subject: [PATCH 079/253] Add solution and test-cases for problem 447 --- .../0447.Number-of-Boomerangs/README.md | 29 ++++++++++--------- .../0447.Number-of-Boomerangs/Solution.go | 27 +++++++++++++++-- .../Solution_test.go | 16 +++++----- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0447.Number-of-Boomerangs/README.md b/leetcode/401-500/0447.Number-of-Boomerangs/README.md index 4d1dd71f1..53396e23b 100644 --- a/leetcode/401-500/0447.Number-of-Boomerangs/README.md +++ b/leetcode/401-500/0447.Number-of-Boomerangs/README.md @@ -1,28 +1,31 @@ # [447.Number of Boomerangs][title] -> [!WARNING|style:flat] -> 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 `n` `points` in the plane that are all **distinct**, where `points[i] = [xi, yi]`. A **boomerang** is a tuple of points `(i, j, k)` such that the distance between `i` and `j` equals the distance between `i` and `k` (**the order of the tuple matters**). + +Return the number of boomerangs. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[0,0],[1,0],[2,0]] +Output: 2 +Explanation: The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Boomerangs -```go +``` +Input: points = [[1,1],[2,2],[3,3]] +Output: 2 ``` +**Example 3:** + +``` +Input: points = [[1,1]] +Output: 0 +``` ## 结语 diff --git a/leetcode/401-500/0447.Number-of-Boomerangs/Solution.go b/leetcode/401-500/0447.Number-of-Boomerangs/Solution.go index d115ccf5e..b7c3723ec 100644 --- a/leetcode/401-500/0447.Number-of-Boomerangs/Solution.go +++ b/leetcode/401-500/0447.Number-of-Boomerangs/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(points [][]int) int { + d := make(map[int][][2]int) + for i := 0; i < len(points); i++ { + for j := i + 1; j < len(points); j++ { + x := points[i][0] - points[j][0] + y := points[i][1] - points[j][1] + dis := x*x + y*y + if _, ok := d[dis]; !ok { + d[dis] = make([][2]int, 0) + } + d[dis] = append(d[dis], [2]int{i, j}) + } + } + ans := 0 + for _, pos := range d { + l := len(pos) + for i := 0; i < l-1; i++ { + for j := i + 1; j < l; j++ { + if pos[i][0] == pos[j][0] || pos[i][1] == pos[j][1] || pos[i][1] == pos[j][0] { + ans += 2 + } + } + } + } + return ans } diff --git a/leetcode/401-500/0447.Number-of-Boomerangs/Solution_test.go b/leetcode/401-500/0447.Number-of-Boomerangs/Solution_test.go index 14ff50eb4..500ab5772 100644 --- a/leetcode/401-500/0447.Number-of-Boomerangs/Solution_test.go +++ b/leetcode/401-500/0447.Number-of-Boomerangs/Solution_test.go @@ -10,12 +10,14 @@ 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, 0}, {1, 0}, {2, 0}, + }, 2}, + {"TestCase2", [][]int{{1, 1}, {2, 2}, {3, 3}}, 2}, + {"TestCase3", [][]int{{1, 1}}, 0}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d60103bebbf66f211ceb8a1e5655103f2209543c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Dec 2023 21:22:50 +0800 Subject: [PATCH 080/253] Add solution and test-cases for problem 2074 --- .../README.md | 55 ++++++++++---- .../Solution.go | 42 ++++++++++- .../Solution_test.go | 68 ++++++++++++++++-- .../eg1.png | Bin 0 -> 15774 bytes .../eg2.png | Bin 0 -> 9425 bytes .../ex3.png | Bin 0 -> 10322 bytes 6 files changed, 143 insertions(+), 22 deletions(-) create mode 100644 leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/eg1.png create mode 100644 leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/eg2.png create mode 100644 leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/ex3.png diff --git a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/README.md b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/README.md index d341550e9..bfa8cc698 100755 --- a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/README.md +++ b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/README.md @@ -1,28 +1,57 @@ # [2074.Reverse Nodes in Even Length Groups][title] -> [!WARNING|style:flat] -> 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 `head` of a linked list. + +The nodes in the linked list are **sequentially** assigned to **non-empty** groups whose lengths form the sequence of the natural numbers (`1, 2, 3, 4, ...`). The **length** of a group is the number of nodes assigned to it. In other words, + +- The 1st node is assigned to the first group. +- The 2nd and the 3rd nodes are assigned to the second group. +- The 4th, 5th, and 6th nodes are assigned to the third group, and so on. + +Note that the length of the last group may be less than or equal to `1 + the length of the second to last group`. + +**Reverse** the nodes in each group with an **even** length, and return the `head` of the modified linked list. + +**Example 1:** -**Example 1:** +![1](./eg1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: head = [5,2,6,3,9,1,7,3,8,4] +Output: [5,6,2,3,9,1,4,8,3,7] +Explanation: +- The length of the first group is 1, which is odd, hence no reversal occurs. +- The length of the second group is 2, which is even, hence the nodes are reversed. +- The length of the third group is 3, which is odd, hence no reversal occurs. +- The length of the last group is 4, which is even, hence the nodes are reversed. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./eg2.png) -### 思路1 -> ... -Reverse Nodes in Even Length Groups -```go ``` +Input: head = [1,1,0,6] +Output: [1,0,1,6] +Explanation: +- The length of the first group is 1. No reversal occurs. +- The length of the second group is 2. The nodes are reversed. +- The length of the last group is 1. No reversal occurs. +``` + +**Example 3:** + +![3](./ex3.png) +``` +Input: head = [1,1,0,6,5] +Output: [1,0,1,5,6] +Explanation: +- The length of the first group is 1. No reversal occurs. +- The length of the second group is 2. The nodes are reversed. +- The length of the last group is 2. The nodes are reversed. +``` ## 结语 diff --git a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution.go b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution.go index d115ccf5e..e674a7ab1 100644 --- a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution.go +++ b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +type ListNode struct { + Val int + Next *ListNode +} + +func rev2074(head, headCopy **ListNode, tail *ListNode, c *int, l int) { + if *headCopy != tail { + rev2074(head, &(*headCopy).Next, tail, c, l) + } + if *c == l/2 { + return + } + (*head).Val, (*headCopy).Val = (*headCopy).Val, (*head).Val + *head = (*head).Next + *c++ +} + +func Solution(head *ListNode) *ListNode { + var ( + walker = head + pre *ListNode + ) + + l, cur := 1, 0 + for ; walker != nil; walker = walker.Next { + cur++ + if cur != l && walker.Next != nil { + continue + } + + if cur&1 == 0 { + c := 0 + source := pre.Next + rev2074(&source, &source, walker, &c, cur) + } + pre = walker + cur = 0 + l++ + } + return head } diff --git a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution_test.go b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution_test.go index 14ff50eb4..d25b17332 100644 --- a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution_test.go +++ b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution_test.go @@ -10,12 +10,66 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *ListNode + expect *ListNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &ListNode{ + Val: 5, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 8, + Next: &ListNode{Val: 4}, + }, + }, + }, + }, + }, + }, + }, + }, + }, &ListNode{ + Val: 5, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 8, + Next: &ListNode{ + Val: 3, + Next: &ListNode{Val: 7}, + }, + }, + }, + }, + }, + }, + }, + }, + }}, + {"TestCase2", &ListNode{Val: 1, Next: &ListNode{Val: 1, Next: &ListNode{Val: 0, Next: &ListNode{Val: 6}}}}, &ListNode{Val: 1, Next: &ListNode{Val: 0, Next: &ListNode{Val: 1, Next: &ListNode{Val: 6}}}}}, + {"TestCase3", &ListNode{Val: 1, Next: &ListNode{Val: 1, Next: &ListNode{Val: 0, Next: &ListNode{Val: 6, Next: &ListNode{Val: 5}}}}}, &ListNode{Val: 1, Next: &ListNode{Val: 0, Next: &ListNode{Val: 1, Next: &ListNode{Val: 5, Next: &ListNode{Val: 6}}}}}}, } // 开始测试 @@ -30,10 +84,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/eg1.png b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/eg1.png new file mode 100644 index 0000000000000000000000000000000000000000..616e8ac0591ca5766cd0ff2d7ea99427b32faeda GIT binary patch literal 15774 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 Y@BjG=1602|;R^_LWi6$Gt9OI{A0qL%7XSbN literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/eg2.png b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/eg2.png new file mode 100644 index 0000000000000000000000000000000000000000..6026cb62c6e977a6ce612f248c7af988eadc8ee9 GIT binary patch literal 9425 zcmai)by$>9yY7cp5tI_?E|CE#X%y*{lp0VPq#3$HIwXfiT0lw~hEPDHTe`cu>ny%~ z{yAr#eI30n#=&>qSnG-3eLoZOUQr6?5$Pic1cD05=j5J-6x_Vp(W@SfUGT15c@abtu)d;%blOYke7bqK_f0|MFn2!RMBLLkJpsrAZ2 z;6E@8q5I zRdbo#Nppv*8aJJZ%EVU743j4NF{ml9SfLce(WyUW505L)Qb)&pB8;U>K9ZCr1?|)3 zd%gdi9cie%MqxsTf#s;COH0QQ+|}C!F-S`Y)0Jfh%UDaWD24`i_;*#^V z^dxa97pOIQ3VPx;%=87~kU?tqnyxrVBN{#B5MQ(l0%T=n&(}onI)%@sTX$;aB0G&X z?L}U^2wh({YZhut=J|YG6w_jplb=64G9oS&WH#X(G-$S*8AM4dB9cBisog%T-{8ci zprC-_PT6k3*WkQovN=+)e&TlQcH_DhghRGk6J#rp<|U^?{lGXmCB^*nXYBD4LOVVi zikZzrDT2Ej}oR z7o|;?p;4l@iEVA-@{9ylR#rmC1MeWUGuC?UJ3JN^7G@R}2FL4z@);r&`y=o<_dQ|B z2vP|dnTI$yIP$4{(dC96UFK_RYeyGr83ZIGG9Dht?=!lXQ`J^W`gfPa+QkXM!4DXf z(tBEb(N>O#yRo*$N=^IIg@4Wzs=c7}*nhjYv~=Ut9Lkr<@38umlCtl3V|Z`_zLw^F zeb7;^UA#SBzJzqBnYPDXSXlU>*O-h&>Ed&7w5F=BAEmuxzT(9QAi^$NT90&(;CmpSoAl1{tRoqibD5G9t=e>yguYxi+;u+*VdZAk)& zh=_OztB+%lOZcWy!~%t`?k}{aD~dz}g5_TAO<@vD9n*7<2q9qVs``gR##`okWWuPB z-1e2`-N4p~xTGYf&8!e4flY@|Fg05$%KrM?F5P{Xf5d_Z3zz)kV3q`k&-@w&Y*|M6 zL~7zi>zb6BIj@wAyX&>Xi?9{{`v(dP#LQDnlT}kwd$aptP;sf7hLu&WFYeW=SBD29 zBWkyYh-TaE@mGPk6tX5JCM|6bO-kxkNpH_PL}OxN#4IdcC&q&g*HPc7qM8I=_U3glCViu_v0nMU|D6$1SU&YwQV6 z+|b$uBG?f{CG~|7g@4}wt?rta zG~b^HGNvaZa4&Y@6*NeiBC&3^T5oSJ^5%4Ed#+i(@2iZAjFE{6YMJ+)*Xiy|*zm^k za%Ze&vBu@uUVj{mD&+ipDT*Jy{*;1(f{>8#DG^b-_uZLy_eKW4LtyjGjt$7&&8;nd z_tS0H(ciZ>S4Y3Fs6KK$=X2a7%$AHW=t+EqLQq~hI62v6n&Bx4gHe!11Qr&)2z){X z&7k5kd7Q79W^l0BZe(Qiu}Zt3py1QLA6kj>jEst@e?y5_&sS4yq?MF9R_qs?8diLL zrl)liUTWP(m!qR2H!m-z_pJv61OUs+m&;30q9$E&ENU7WDw>*q^E14PO?UpIWH!j?p&=E_CzL%mXLJ3Xu}oSu))f9&PZ${(zJO}= z6c6v$53P#zvC=sS!y*vGsb_QE850$zv0uLqFgW#r2I9I^T=TwYw6dl~RYN0CHrL>M zf8lTs<4zKpJwFeM*L{Nl&p!-W@A<*fM1wPXg=zmPNbXh8fpWfo4+aHfzfW*)-j)xv zX?j6Hvi$%`tqK#I^73*%a@=%}LmAhhIl(=o|J2UvpcGYZZtj;ceQ%0*SqW=vs8l5R zg8vhd`C0cpF1qz!kW#Jvr04^W1RAR0#!#-0sg;_eV--2}%H-$L z6;SQzU%y7&AAC}zKR7f*D@D?vX&Jw~Y-C-x@(lE06s2wQVhvWQbNA(Fsl-=?m`WlS z^ie{G59YPp4?)8^8qT;KxvQg-e!9o(a(*>;*Ow&`790}tYr*zwN=i3ZzfkMw2Ys9t z(31*^ik4Oo`ix9WK>-2io12@Ee*B=`l-Ea~(cb zxwwQxXSd8_On>BqOWoC;BszAfufM-o&NZch)g!>eLvdMrdeh;39i*gfYHHfOwFwT@ zCDRD)cH;Z==~HEObytRtj!r{F^dtepLM&2iVg z6)^$Fvl0LhePL`P&EDR+P{i1o?e57v^w`*Z*d}40T98lV@U8khHuUeGq`SM|*1zH- zw}vM+21U;wV}i_D>2GguhYgiY?O4ttlRy)goSM4WZ++4bmxp=~>4%Y~7zCmOthi5p z$OymFdnK@L`y2TgPW;t|9k?aUx0lw<`Z_w@Ac7mnr+ylTk@J*+1P7}ZN%Jm{`7|6c z69f`mNks+!zSH61;Y~YDS;2%h(}msnT=uCYBqZ$J4@B>dM2(+#mXE)HfR?@b#QPi# zRI9jzgdtEopNL++adQ)}sM7AM1;msMss^Y*NdOmE8Q(Kg&noY8cwWLaN_0bHbH%a; z;UPFH_H{0RzE;k1G>T*t6<0wrpi{H4MSyc3PR-pWMAJ$Aw3!pxZN9sOerc^5)9c2f z^6;73`D0R{tfM3M=@Sj8->4r!IYu7*A+xvI0uQXgEg7x9xPUyJ{4CP0xWiH{3sy5e zKK?N|-##+P8*q;+KqR6@?*|bse8hBwv&#Cv^)FV!*qf+XSVDgJW4YguA-W|T9eGSD z>ZY3N0mrJn7NQ9$hK6e(%6|7Z9zq!sWzKH+E33bCjfpI+ZFwPdwK|e)w276 z5NmDnyyA0Mef$CDNQ6xceHPOt}oY=Z+7* zw*p4BoUV-)c0bkK7mWGnbKMA#I3_KP;^*+<7pNG5RRZC|N1i|2dAc(-QEQj&@e=G# zWhFPbZMQ}}y-aOoWnXZmpFd+fuTGVrUJIGcKZ_u-|E1lMokdS~r>qxfvP0*5;OsCp%0fZ}xka{}?_Oo-? zOK&ChCmOJ8g|bcB!!T#kFA-FtUggbxG-(2kp=%l5lqtP|;Oqw-RHoClb|P$^V;k_C z+}!Adgg+o`zn7FSii&1zl{Pm`afHbpfEswoCauP?wW#E$MI5b<9R6#QtrjEYRHsYN zz!061;;!ZEiHSqn_WKJq*qvHkD1d?GG!(ywnPCGfvj5uIao2RCSNqb6q(>D>$Bufq z`q8Zz@#`PJO5m{TMcZntDM^52CKX8_!CBM2K!X5KnT`V zmF5Hxetv$hjkuw$6QRrXY>3D0#hTiO4_8`@;6RD>Ec8%8a`V4XI=a^UY7;Ln5zx0x zb|$OzJiQ0Ly#<8@lFlYCxYw|31I@i;fh$WA1O3>|-rNKD;~rLRnl2dG*w{WGq2T8a z?W$0wbQizWRPuYgfAQkQWhyjO0BkLb5@%Oe*Wslz4-e1%QGm&hPCM(K5AlSCg|V=( z92C7zv#ZlZ9uLWp3p&ZKO+wgMSUQU?Pyj)_)UEvr`i=c!+rx}fVlpyT zn-RVD?+1)4s=HSV>OtTxE-q>|dGNcsx(b`*ydPRIIM+d>2|6DFTp*yJ=*_r2X7V~~ zn9Ect7_a(F+z~~!rw()DYWBF=skv_;fB#A+u@<8>!N>H4vzAtpLH|%J6hyKQlf!Xbw3rMceLo*M z1dWSjR9Flov!>?aiakDtw+tU|E8JgFx+)X2D=xQVvp zc?*Cbg&5gP5P&xM6dtu=t&8cZ4&R0&`niogyoG}9uBrwG^ z0Sp&euMkkeplc=KFpz{;EkL-9gCzwm0}5dAzCGyKd?RLt5yIq*tF%#2>-pq28xaDy zJ5GXjc6KOrPEJmzuGs52;c+oBzZ=hH#gDs-3`^TDid#9v3@Ao z<{W|pEm{HJP${k6#EH9)5OV^!&6qQ@?})!m%~WT1_q)=ujG8az-`3aHzov+!asB5` zbDA(BR_7)(I2moOD8!VB%`?sc+1NWc0Htr#8i?Zo3jPoM=5(OsE^@G4EVOQI`DloJ zSiiQW5d(nDp1O07eLuj!$cX6!Wa~xZ@m+2S)*}p9&Sd93nghc63rv>fyxNiJLn3cS za#roukcfzOlZsCj6Q~-=at=7*l5|`qJuM$OINXlceRQWRst!SYMul;O%I4DY^CxX@ zTY~bfRcRJIAb|oiFf;_E&z>p>&bIE=yv-^>9NQ@lBoUB8aZxxF0&$J*XF~%6^A*r} zQK=u_TVEx~k6ZHo(D>Z)ST0#Dchmv}ne6HRt& zN>E{f_-MYP7CS>IDd`E$vEn~D+hR!nsCuRMhmW;V9m#zu;;b}?~r z@r+@KLDERQQUud$tBIfO?60RuHb{Xv5D*lE2JT?vY-y1ZFTos%MBiTW=8Mdc_)zYGAdN&wr%l`(PR1kL3nDdJ1ZJ z0MyHtk1;kxCYBMU4CudRaeN1XG+^J5`ry$?!p)n{{?SAKQ=*5sypqme1KR;;;HX}c zrQ(`d6`>m>-waivPfDn9-~t<+{?U|{&6SuTe6 zWCt#wRc?R*;0WlzdzYn#ALZqG_2&}{(grKQ3amN!7$>uK@>y>42IAd>-@aDz`Q(0kfkepCaKM;7-W@Mzeupdo&qCEg~$$kA%Tio~7}pDZXH3 z?bm@Pq^0$yInPco302|O?%+l?)<^n>-Myd+`_rQSd@!3Soa5LfeKaJNchYvTEtH5D zdhyykjEeEZJ1kcI(>}==+j3n^G6nwae{thAe($V4Sk~$rO+P6^>MtYRye}X)q=8)I z6av~_$iOMeTH%T>&|4b9oxkk3roeQLLm&)!Q<8+;s~0!cR#%5g^+f?dT^tW9-9Teh z$lX`yEW%_5G7ULoLi01k9^nP3f@lAAcco_|S~9T0`A|YoWqJWPa=ccP==WZ|exZe1 zW4aWTC!tTj=v^uhA)?*z3+Z=A$g`KBar0|gZ|TUk%kPdvPI7Oj-YBdu>Whs=5<2q@ zeT7L%1}ahL07~ge7fu0s*zM%ztv_aTbTmo}utMH_{#-QI9#b2)x#mk1+IoLstnJ=5b4#s4VNx zEu{WCo0d9lKdz);*|ben%oieIVP);!nj0M%DYF=T0Y)Kw?x#P-nqy0pb#>)sWJ2`6 zY=(EQEaoEg76FRtdCplm+ZyzmLJ~>Fm(E59@pLP8?857of|0LKW~@RIy<$TyT7!`F z>F|h41&lZfC@u+%o_qDVyxcCWK@Lgpw<6>%tZaR;h{6#L-~WxxUS`ruic2LT4@#3x zjrB@FetOK(qHg$`$>=QH{Mzv&{MeWnWHQxz;3ERfki_qh*N>8k0`LOJ2M9ocfsv8r z59Rb=Ist0SOZ}!)BoaxpG1Lz|7=uEzCIQ52sR(mdzFOZ`Dh* z0gw4gj~^HB)e#QDG_a!LE=tb&k>bgYSEFK)1{JD41W$E5K<*a}88Qn}$r2O0dNoCIyIPnmt2H}r7wI-&f88tqN zUD81DOamJ}CoiunkmzmghmAm-eR;*trB`S5)EnL#x>4ry8y|PgEJ5JZ+lCCQ``=$y z`tr6bp0y#Id&c9a_kJ2v#=(wBhH4}Q_&KE)bN=KKm*K11K0tDyW58G|T+*>6MNCABU>mYNzCv76XsDxhv-&)&cn+a zlaeB5Y|KE$YdH^utqBmA@+rK<9ozy_c>fnzA6Z1pY4H!4oE)1MoZLAC+N4JT)He`V<|Z|7`C8dBPHmNqk1_bLuc9v!hA4 zOn_VeT-Xi%ro^gB+x2w9)VG90B3C6kHC5ipi5EEX9*6m;q~3h~DJG?|N7Y=o+-Qaa ziH6ID$-e1#I{n-(jy8%ykutGx9_(jAc=+|qZ#mX~nhnxsZ2vXl92^*E`5R5QVhBbU z#$d+6&FzBF2aj~#kH@-c3-X6I1*d3~lp}~vp>W7Tm6-+U~$yX;RmCU zl2McjT3RGvCb1AHC`3S$8(p$h($H7rjvaSjfq?kr^Sb5(XhzS(bhQ%LFY)Ll;X2M{ zvBqZvZp$ubq<9U!;#S;-XcY?X&I9pYm3sI}r2?Cib`}FaB`^%F?9@_%5TjXqMd1d9oLpY_E(R~#K4bz2^88VfqU9180?0@0Bf+=RW64p1A zps^dG6C2`zeJ`2?y2TCKs(BHoe_Jxv*2ydHQx-N7z79!bU6;g*%;}e{+p{>u{WsDN zaCXBSiX<#v06F4nKb*kUgwfPQnDZIThw&+QNd_ObVeSZ|?Pf8I)CG{?(D&72`^YM~ zpOE=PCh#U>v)WP>pPEY+!*OO{bSq7vz%5XD_zVUejRcdk&dyGd({4MK0{V1MopR30 zYPr8$0jKG}qG~f2%=u_KOm~DZgr3IMLK)OraKflCh1A^&sD4pN|7t@qprmAnKU9JJ zS9|;)r2&|EF=T8N%jgQ@8HcQ0&h?>xi&N27_8Kpb*N|nwpmzI50TYn?0{xXM_kA*2 zpYc`!%%H&}%&=m@1xzsrmAuep{|WxTe=!?I~98u&v!nAl+C?`Q0K z$Z@KNz*7Xd7lccZ1%MeC!UpA09szGk1i*~U;SHp0t4T$<*NvOV$R0|KF$Mp9mL zt`${P@nA&UbhRspOCdl{g{WqZ7vDlk6m+iumAi;!la&g8{uV?xVlzWB`x6*Ude*af z(ZHN+W@Kit8q740ay@iI8;jnJ?Ict~b=M-+#ry01zndG@a}x(ZGxOz`$CcllK6BDz7gdSWb=lJ;8hyC+=ZN%y!>E>NM!IMh_W6yx~S*+U0Jp{{v7`pAMbn1?HCXh^E7$1635 zMMZT0jcFv{Wm{n^?&|Ajb@M~_y9ykLQ%X#?4#fR0_;A3{{R30 literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/ex3.png b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/ex3.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e79699aef8e35e66619ec8d61f00f3db446411 GIT binary patch literal 10322 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 Date: Tue, 26 Dec 2023 21:08:58 +0800 Subject: [PATCH 081/253] Add solution and test-cases for problem 1155 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 32 ++++++++++++++++-- .../Solution_test.go | 22 ++++++------- 3 files changed, 61 insertions(+), 26 deletions(-) diff --git a/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/README.md b/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/README.md index 59fb300af..442b4b9d7 100644 --- a/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/README.md +++ b/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/README.md @@ -1,28 +1,35 @@ # [1155.Number of Dice Rolls With Target 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 have `n` dice, and each die has `k` faces numbered from `1` to `k`. + +Given three integers `n`, `k`, and `target`, return the number of possible ways (out of the kn total ways) to roll the dice, so the sum of the face-up numbers equals `target`. Since the answer may be too large, return it modulo `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 1, k = 6, target = 3 +Output: 1 +Explanation: You throw one die with 6 faces. +There is only one way to get a sum of 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Dice Rolls With Target Sum -```go +``` +Input: n = 2, k = 6, target = 7 +Output: 6 +Explanation: You throw two dice, each with 6 faces. +There are 6 ways to get a sum of 7: 1+6, 2+5, 3+4, 4+3, 5+2, 6+1. ``` +**Example 3:** + +``` +Input: n = 30, k = 30, target = 500 +Output: 222616187 +Explanation: The answer must be returned modulo 109 + 7. +``` ## 结语 diff --git a/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution.go b/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution.go index d115ccf5e..484591dac 100644 --- a/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution.go +++ b/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +const mod1155 = 1000000007 + +func Solution(n int, k int, target int) int { + cache := make(map[int]map[int]int) + for i := 1; i <= k; i++ { + cache[i] = make(map[int]int) + } + + var dfs func(int, int) int + dfs = func(nn, tt int) int { + if nn == 0 { + if tt == 0 { + return 1 + } + return 0 + } + if v, ok := cache[nn]; ok { + if c, ok := v[tt]; ok { + return c + } + } + c := 0 + + for i := 1; i <= k && i <= tt; i++ { + c = (c + dfs(nn-1, tt-i)) % mod1155 + } + cache[nn][tt] = c + return c + } + return dfs(n, target) } diff --git a/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution_test.go b/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution_test.go index 14ff50eb4..33252730a 100644 --- a/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution_test.go +++ b/leetcode/1101-1200/1155.Number-of-Dice-Rolls-With-Target-Sum/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, k, target int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 6, 3, 1}, + {"TestCase2", 2, 6, 7, 6}, + {"TestCase3", 30, 30, 500, 222616187}, } // 开始测试 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.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 %v", + c.expect, got, c.n, c.k, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From dd130d0d47251234c0ffc7a8c537e7e75e02eec7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 27 Dec 2023 21:06:38 +0800 Subject: [PATCH 082/253] Add solution and test-cases for problem 1578 --- .../README.md | 42 ++++++++++++------ .../Solution.go | 27 ++++++++++- .../Solution_test.go | 23 +++++----- .../ballon1.jpeg | Bin 0 -> 17753 bytes .../balloon2.jpeg | Bin 0 -> 12240 bytes .../balloon3.jpeg | Bin 0 -> 16539 bytes 6 files changed, 66 insertions(+), 26 deletions(-) create mode 100644 leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/ballon1.jpeg create mode 100644 leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/balloon2.jpeg create mode 100644 leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/balloon3.jpeg diff --git a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md index 712223668..8bc9eea72 100755 --- a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md +++ b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md @@ -1,28 +1,44 @@ # [1578.Minimum Time to Make Rope Colorful][title] -> [!WARNING|style:flat] -> 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 has `n` balloons arranged on a rope. You are given a **0-indexed** string `colors` where `colors[i]` is the color of the ith balloon. + +Alice wants the rope to be **colorful**. She does not want **two consecutive balloons** to be of the same color, so she asks Bob for help. Bob can remove some balloons from the rope to make it **colorful**. You are given a **0-indexed** integer array `neededTime` where `neededTime[i]` is the time (in seconds) that Bob needs to remove the ith balloon from the rope. + +Return the **minimum time** Bob needs to make the rope **colorful**. -**Example 1:** +**Example 1:** + +![1](./ballon1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: colors = "abaac", neededTime = [1,2,3,4,5] +Output: 3 +Explanation: In the above image, 'a' is blue, 'b' is red, and 'c' is green. +Bob can remove the blue balloon at index 2. This takes 3 seconds. +There are no longer two consecutive balloons of the same color. Total time = 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./balloon2.jpeg) -### 思路1 -> ... -Minimum Time to Make Rope Colorful -```go +``` +Input: colors = "abc", neededTime = [1,2,3] +Output: 0 +Explanation: The rope is already colorful. Bob does not need to remove any balloons from the rope. ``` +**Example 3:** + +![3](./balloon3.jpeg) + +``` +Input: colors = "aabaa", neededTime = [1,2,3,4,1] +Output: 2 +Explanation: Bob will remove the ballons at indices 0 and 4. Each ballon takes 1 second to remove. +There are no longer two consecutive balloons of the same color. Total time = 1 + 1 = 2. +``` ## 结语 diff --git a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution.go b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution.go index d115ccf5e..15749e8f6 100644 --- a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution.go +++ b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(colors string, neededTime []int) int { + sum := neededTime[0] + ans := 0 + mm := neededTime[0] + c := 1 + for idx := 1; idx < len(colors); idx++ { + if colors[idx] == colors[idx-1] { + sum += neededTime[idx] + if mm < neededTime[idx] { + mm = neededTime[idx] + } + c++ + continue + } + if c > 1 { + ans += sum - mm + } + mm = neededTime[idx] + sum = neededTime[idx] + c = 1 + } + if c > 1 { + ans += sum - mm + } + return ans } diff --git a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution_test.go b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution_test.go index 14ff50eb4..3d2cd91d2 100644 --- a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution_test.go +++ b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + colors string + needTime []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abaac", []int{1, 2, 3, 4, 5}, 3}, + {"TestCase2", "abc", []int{1, 2, 3}, 0}, + {"TestCase3", "aabaa", []int{1, 2, 3, 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.colors, c.needTime) 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.colors, c.needTime) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/ballon1.jpeg b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/ballon1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d1f01a8d1b5e8827530a68ccba815ca3f5a6c09b GIT binary patch literal 17753 zcmeHt1yo$inr;(3cz_VxgS&eO7J>!$5L_GU#w{TU?g`dNg1b8e2<}cd4#9&5cX&oi)^?;AK9;ZAQyq zY?EJXH?SiZUZ(r5ys4w}ojnV;MS*rMch9;@cW;boZm+2hKkC50WB?FA4Il@23b+4D z(;xA4NCyA}j{yM0s6VcmBmw|6?*V{E(|=r}`wRf!yaNELha8Qajeouj68!g`g#`d` zkOKf<=>h=w!vMg2{oh~ok9+^X;@|O=3Vsh6+)oGi#}Z%%Fb7ZpbboBd}IGFb_urbilvGB04ad2_* zaPMP2z<+>?54UmeDnYor6A=jwej_dhItKje|7E)U3cy1H93p%~M4$oO!$UyCL%3}R zki+4-hll`AzefOoiUxl#L<14&g>d}F6K1l(z5gimRlV_Ft(rvaFV z@apgo@cIsp6Pr9#KIC~dWVvI~ctNF%cC!1pDibY72#}tyb0*7|%zA51p{%9M^Kb#K9 zdqBzSL_)g^ZbI$H>~t~moAPu;69Iy%38QdeuNdDC?LUhb47uK4w%8Rm`$g^rgCi z{xGgwV$4B!65}R6V0S*mQt-!VPv(~Sn6vFg?}YDwzLA1AWF5!7?wD^maFB_SNd(k+ z@^YglC*RXm*fZ2%?8|OfUaeAwNaq4|&AfGzD!#b`YxF0c4EH0UV&qKE7JZUJz3Q+A zd?iC9X(?(vT;%(k3q*QC8K=aB+P2}q&12!LWFMA6|}fMTTA6h8UJ3aG7ma;I$0 z#=vSHPd`g=Tu_!+kGj_xEm=tcZM{a#p)3I_a@lFFaG_r+<-%2Tk$w=AdfK?>6*_-f zTQ}q+Qa8wu2amIuJTnpR01WvY3|&8yDO=nN&=jo4ArDW=2~_TdttIJCpUSfr4;em~ zpTq9-YuA@{;PYkk>#86#VSlwiQu{(mloqru&h#_BuJHI4-^I62k!aTB7#?3ufnVZV zTb+qTI>EXp#f>sw#$2N!$@=D$RJ5G(VX@^CPme?n#;J1bj91t@-@oXHQ?Ek;Xqb%h zZvmA+Z`E(1t;Siw-J8Ak%vT?(7A|_|N~ZWqK*ilvjY30q!f9`(4!14j>gPPOfr>Pe z6;sV}T+732wGX4WknKV(g^qKGEb#C!k))pxNaS6qZ)nBO=9EImCl*RH2G&yN%-?^I zN53u?+cQ)2%ZVPso-wWNaw*&g7Q11Im$&#E$F_c=YieKb(`Xgi8TUF!)I*cl6!nKW ztW6DGi;##R;f-~DTV4~1Sr-~)2hA$)f`T^<QRc1InpYXU zq+fX1VcU5_)fQk;>i#Tm!e;jtV5hAxqqQL8l3ldpm1exW{G4S|^r3vvT5UU7OOt@1 zB(fqr#557ssi=iUhGQfCt>|f2NQw1b;eGI8b3krDpH&^_>;|iQjH-ZbzY$B#@J{P{zEhvviPK~aK z+2~V0yF03&{0CLkXcq3<7HeZkR7k>`^gPFJq-+`}Rv+oB&LZ1&Ef=LXa5W>ekYoDn zmA|n26`9vDoHLRQ)&)~$*YU?|W907$BOOFGU`!d0?BN^E5F*$_OcqCqL&#jB?UUXJ zZ1AbvHJHJnxKK4x{Z_6h$Ja@< zueQF6f=60@MoM}6{w_!!BM!rSEJbyI*ZIVmjQMj9W(+zze=vm%Uq>SX(r+9Q@f$}Z z7#yZP=Yuw?VtqIZT!(6a9x>)zXLxad_i~DEuv5|}c=trgHth+m2KT$Vfu|uB4 zeRP)n-{-}!ZQoc^lxlTWKNwWv1H-A|o%9o;)+eN~#~zw|d)cwkDXD9?V|!Bw{f#>P z>*H8TJ>|j7qP*O*7MU4TyCVvS{i+9-LB?*EUp_sDYOxSy6xHbD0Z$(b#ePg1)~H%Y zEHCRQL0#y--&-8hW7Qg9_%xaSMdao>u@gH@Hj7|~W0&~Jo~?M?XohO;`D2(>dP-BtP|)^JQrtjweuRlCMX4qa&xeez=`I$f2-Bk*ATOP6}ssVb(!pTSsj=wfo()T1_#AC@zNS-rq*-@@e@QcNMEb%79@>_dQ^_xp4n$`UF*^iy$ z-7ZBY-u~OKPI$wdEWxGJ9Jh;y=b`la`@)&G0kcgdd$zw@yqrT5v;)9!P_|>1 ziL)EMey#=78Uz$Qn5m@fTCv8ee`&L6$}kE$=(q)};>Ui_dimfMpn|byej$h-EF=Nx zIQMf%Qk$RMZNVe@{2pVG3aj_xOFrau?0NU#5D3lsbo=$%%R&p#CQA0olyocw39&to znrf7rRo0s|#&e%`&W7uGl`NYA!q5@eOrb{gLj55Er8;5Q5Tw9g+xGFj7=;nKJAR%Us45&M-nid!BDn?p0aV=k z(4-WPo>NP{b(fr={(|wmhU8{!c*{r*WiLS_jD4^{-#f<=9I_Cl*#)@%Gd$-lSjB%0 z56MF5#DTGI-x0V|ec;Lm+vl9t@9c9>=f zP_*OV;Cq(Em?3_3UQvTiy8C*Yw*?2OXdh!pOwyM$FeF~9#B6M?VE+2z2?kGqvF^hR zvm+e~76cy`P%}YCW|som)nT_>ViD>&9j^;Bb4FiZHs3zc;k- z=3c53x&B7G>KW0ame~)~SR1t>?_pxJqhv(#h4(^n(qczpeC1FB7925i-5EzS*S1#z zBAh5y4JicFfc1!f9$uCRi)oPS@Yh06j zcsG*9t{xBN2%2Z0l~&!*T4e)8?W1FAUZnEbr0VF@}5s*0_SXpEGyU(6mGa z1!2G1kI#(NGcSPFKs+r&DU5jInVG7u*z%m#as&Nl$vnPpoZTVt*=4d(X$+G`+etW? zN2rRwdf|oCwBAyW^(tkYPO5O(&XJ&J_a^%NXvhZh`Be#={TfbbuS7Oxk`}o$A1Rp%$GdH$J~Sa#9H1-9n-CHYq_ zF7`8y=DuwMbyKfVYCxqJ%dflh2W{L_9&AA2KCyJZRM^)!(mwv z^Btm4Tp;&pY?h=iyH@iPa#zCIux_5d5}wE0&`d$<@&+hbA@WOX84X*TX?&8io7X#O zDFi%RvfU*&Wri^&o#K?J#%jBAYx}s3peu3CBF!jJN$p9PA-lK)w+X8^}ym2t$OoK&Q!mMSpov z9#cavk$j$u&54rObmQJaCZIylf-u^KUqvRsq?BkvTV!8RPZ3-iIVAed12XIvBPFMn zo-f+K`(?GTgFMi1Cp^1R$-Z_#$}YEl=o`~I9<(W0hVqS57x%Q%-D@Xtlcl1?X{xVi+y)hgghtZeZ_4MHG8Q zW(_*AiyvsU2IZa1xLHckr5F0suo9yMyU9ibrnNbN1wK9E=b?SHgM~c~rUGB|{sSHPeZc%cB0ib_h!fi;TkL+yksu zVO<pj~dg3*Ga*rb13^<17qSE%#*QA$;9b zU$+oqGHROj&evlF-uB;K#gGWc5~{9FWv#PWFm4O)*#Y@BZCyHTNX=zneh4ap5k*H! zj8_<8uXg350`40B7De<1Hby24K_+mxcf*!s%BGkwFtxmJrNV~Iy& znp-(`?7$>eh<;YRi3Cod(^}qJIPoaH_MJFd_?TM zxYRmV`w~^ONi)Ybp-0wx^DFm$Z}4&fCd2RsPuam`%{AI8A$owfW-ECkk464Ggo*oV z^e~QxK+xyUM30i{MEF-k&r14}=+hJbeWLF|{V@J&nYz9t5c?p{A!m31AHW9Dyv3xR&%Q+s*`=)B#}BT z6i;g0oQZV|tK0JK>y^DMN~Di_OI;4-&R+m!hm^;;`sx}-r}aCYK8*7Fh`K8+4JS@K zt!!hhi{vhat-|sB7aDry9-DHZoHAdWRW*rQux1<&5ZnsS$Me&-414WP_3b(Q<ak54|f8x9H za}e}5PJiR{|D`_>xI{Tow{Y zR*3al+8iH|^6|oRZd&!uG^KK1U>|NB4pCIldHi(3^PD>X2T?h8xJPO_gQFtez_s| zI3`V0z`$L((n<#55lnWf{2btx9|_Q;z0P1779X>6(XiqOW18*8``NM-XOP_p5P}HEPPu&-VKU0Q>!NguEny&L zAwt($U&*0rv_noF!)=<;)XJ7bV5`&$@l16nHWGtkbXs#iwqc9m7n_P+Lsk2i^M5%{ ztnx|QvfjJ-RBj&OTL89%ww6p!^NBNXSIskTVvwd%U4;*OBe&kI_(JuAUilk@=1Kk3 z>Ad_zReU77f=ushpk7#oTxRq^K$a&s4hOfW6$a}ImX>7d?YF-*S zOCEOpqSc1Y6+XlD-He-mL4i;xDxzGd2w_P4lzdjDFcy8We!10^M^oLe-bpE&s4!*; zR$afNo}e!^JF*t?7`-|G*L$QU``W-@$-s4ph2o)DR%O95iyQ38vqY@w>V5Nqsuu=x z_K;#)oN#W=)Ak84C;@#Y$;6ex5xf2EngleU$F9>Z?#j9E`LwN1aU8SoGySF!DN-q& zk!HiUPbga>ybIlRPU1#O!ipAjMSrmonA1bP{Br&;=k27UP?C&4KH85?oH%p3s4r(% zx&>5xaB%(rRc>-3Oow>nx+%$wHM)(4L7*Seux?ssPoPQ~y+H}I=7zMZ$Ruo4wS3*hmQQxEj*~Xc=sFY==rW|OvncN6!)~W}(_9xdqNRMEa*aHKc-eZ-2!=Vm z5vfbtS=vG_YaIhp)!9hKc;_I33Vn{M)rO%Wl5z`p7}>t|wrZ*RkyDucRHPJjboGT! zUjI9n=m9HikJH-SB_Fd~6|4yg{4z*>()Cyfkh9S&{$W+sgiUhmG{ssZuPUcfCFk3< z@J4~nCHQ2s+C%3@*$!Kl5wU(#`90}wU{y^hn_<5H+7=k<^vK&fIrHrU)2357;GJ6tCxd3{XHcR36yA{ZNxs<&ZJ*=qV|1}psh z#Np)OdUd`{wuW>IDf0#;>k@-tCyZ;qu^%$*Q6q};84?>l=CoukkS@h<2DBcN;`uLxs~_ok z%3o6#0V*ggRbHFmk-Z_z(>x3B$?5(d>+*iBZq ze!oRmTUAutpt1IF_>|WpJ=hHBu^3iI@f^AkvM9jmz z$`_r(FkXj=SHq}3GCuv%=Tv^NpFGb^FZt#CU(WNgdK1`Lh2AJ?X5n%}=387C`oV8| zWo9<>SiK}!#wt72hI~vFyk~fn@wm$T9-?1qjaZesCU^Q{v?=Xp=azUvo&05y;k&Oy z!yO$(-o{vx>zPMC`o4cPq_jWrY*)9SJY1>_?X$zK8L#GtCQCm_@ROS#uj7y3^4FWf zp6wTM%Be!klE<}#E$=Oo4z?Vty@8gtjt#E+b!6-deco{|3LrBjtu`I*HUl=rF@vbd z%|LpHsXn_RwV!mE@!MRw-fdgtXWs(AOG%0xy7V1IK$qzp&g#Iri~#~gd>|&(d4_}1 zMQvSs?M|weD65x(wRWf0Ug7I#Zc-p{sZZPHb6x!$pMfkTiJ9?UaPjwbPW&4F_HE^F zZ@-#z`GQc)S)0nQ>h(FETMEQQlnxnG4HzP)9F3nep&f< z#@`|NuWAf@SBUr8j~cKlH*PSjZvm{OIvX8q$P9sT4v4sP0f)WoVsrAF>kmR--AxUD z&UpbpXNiAdB6Cit?6YbIfBmB>?cn7h)G4pfG2EyCH z^l9H72-`pGO)ti8-Y|t%wsRwP3y660Jog?A6?~D3h6WH6^q(?AwZ_9$zk&lvgd(!c z#$gz=3=xUPP$fTqv&e-g!Ac6l?n(U8**8rqhy)(Kj=&xC5WnkDznd4hDB-t&J^JE> zlbgs}z=*M0$yvrNU^o@dYCoFKL+Ftm8$T`9XWXz(kEB@NNXdJb8XVo=5R_y&aVdS9 zG7Y}UeC;VuI_~aer@VmetU$`N<1#n5fj&)bQ1!RSj-U4dQPH%*fne$!R{791- zmb^u+UD=|yviT%kD~w$ge0=Cezlf)%Ge6R$v%eB|tt&>ICz#4H(EhPi;32AG0bjC9 zqG?nj_)s13uKP4-Qow6yajJ-1I0j_}M+oqSHT^#wv!9{noQj|f+eBdlw}M#s_@;Y2 zvwg^2$fZ0Id6h}=wopgWCjAkRaPO~pdrN%31t5tki>L@Dj_E5KXG|S6-vWsHiZxbx ztbH$0lux4gEqU}AC30dc0{lcZ}9|n9I^t8$S`s3sx`|Y=U zV}||{{F_1K0oNTTB%F>cZyv|X47WPxYx*$^3K39ox(jA(C6*(&vc!vyb+*=j^!u{g z$@@CXS`^ZJ!4y}F+(*as2Q8oUw-d$NPeK;UKnCmfFkHKdd!ocTg3rga%9na=t}dxUgvv>iNXTf#T}Qs| zNxTXBB%y+~GyjCF$Ug9^+kIVN>Ynq`Ot1<%2s*n3$ww<7Ju3vq2)z2*HY$`ns1+A^ z&Dds2*3gYL1>Z~hcf0<7$PK?0&@Se!eb!Z5Jf>=6HZomd;N4V1)EGX!sh9e${ZwGz zoft!pyhbaoY}t7(-1^()dod97T0Lh;A%ekx#eP!AJn~_=A)?B~k@63VdRd%SJv!6W zE}Uy!^d#r`r#Ip0|6))6TL|{I5bVFV5bV!A@x@KfzDky!k#lOBwz`pTqq+dZ%O&oi z5*@=y_i1A^*G;ONs0c7(h8$MWQC&C7d(nr29-w{SJLVGq6Pr3*Zl}7}Yi>n#3&=gd z&}~k#6gk?qI>MDxp?n*eu&a=~F8I6P&WSEYMNOXG{tH(t_u$gLV6foml)i_A!gjom z7hwtM*;{O4NXsHkj$uK=b(tXtP~V3T2C1pqeIFPZ&RCNBL-#Q)WEmHPayI9JM93LF zlpG?I?M_jyTY400Ty_=F5ach?0| zv)b>ZjdZd232U}!SG6pCN7kaM9Y4BPN+;d(G(8)32)BSUJ2}p4lkTUZAs3OzF(yLA zT&SE5;S(<;)zN0pyE7n`Z?@=P8|Gu|@_3}z&*bY5U}=)=#4$vIAkPd+ z_1Tj*BdjyxE20)PQJ$Ga$vag(J76ki`;JE2-{T=W@X>`7;N~E+(z>2}pjuqC8D#gV zT|zuRBcVk`Vuy6fE5}F7;RkrGMz?pV10*zLmgLtVHUQ3R`Jz9Yy_LT_{}RVO>mroECKf>!D9J4KW)LjU?)N@ z-A?8r!#R0hQh9H-do)bkxD8|&Fb#!FHx_X5V-{aYZ8Ai^-mYq)XA~t}v_l7ldL`bt z`t%ti7X@Lj59T;xUGP5X>-ONN><0I?vfB*Q`8G8_o;|p(s4U0!TPpo>dG6TU%#0S4 z(evsrU6OY~P93+AEi)IQixnqHsX@203Ub{h7#8fJf~`vSH5Si9fLAq+L7}~N zsPIv3+tQ-CW||8x{+D_YpOa!n1c}&4TY4%#aHK?Ug-x|1vQ^yN=Nk#yXTZ@zZFOSt zxSBYQTL5EnA*B3A{Dr%b7strgWci*e7)Rfw_jKIJx+_{xBNF4Ehx*=h2z5r9HcixhPL8Z#c%H;UruW0=>T6;C25Vdxqxm>fn>pG|u~YnmC1#U~FipLN`j{*J zm@_>jX*DxyS3#n}-1uj^S{nw6T37zXf+)9u*ho9)C^4f5xlgM)RWHw|sukoijO6P7fCSd^Pa!(y0Nc z-JMhY|Kyb5FHY&2IN89R3W)jLDJi2roGKqK1A$6}#JAVJ>{jj*$9l#JfZ`V?X=o0k z&7t2+%F_+$>h$3Qdi{g@wcjYKe)Ysikh-exFFkpye?oGj$T8&`kZf z0pQ{J^!zsR5t?h?O;*W~KZiEfn3y0q4q1wt- zv`So9Ivx33n4>exV0An?2h-5UIkC-gI+^4;Cl_R5W-dr?Re8kGU7ogXn725QXwi*K8tOBhMB$T=(B@-XCAI=V^P5@qk^O_(CUhI(RpqtN{0zauv7d!z+%7c~v*Q&hkHU`XFtAk6?(zz2!$DF=o__0;rDl zU74Oz{u_L+RgI6h>-9RT^$Ok_uNM}G*keXa+M%pl0AMwsil-;*vn~NyGNXN;cvqTs zVvZ;DuRNn?Sr+a2n;r{>Ei$Ty!bp3yHnQV(#~iX#cs%{yO&zUcRvJHi*xU{z7|019 zC10Q>H#ntKNM17VSt)vtr@m9YI~X7@1K$+Z;f9N?`YE`NVhR+iJgW~?6!%U0)?!v= z_!r(+v5P`+_b%T?3X)4;z#-7UZXn95Hx97bWl#^W)$EOH!+`!k3FgT^{$bLWMyerpuYBPK5>8Ie1-wkw-PIRlkFPp*g^<7t35f>EgB9 zs2u)dtHTZjgCjsQRla3RD{On(NuR;C64o<4;9%LPs{b;PRJ{&LXg_b` zKWdu!nzD-*E;t#v1x!(4XIaI?nV%{SvZ~cQXjJV`@wkiroL%ZVXTY7(>Kh(Ui)bhI z%3pqPZ<{GkhOj6Y=|%K0<}84@OrBYp15D}t@e;?8iS9; zI-NtL?(!F@1D#B*o%5l+@}6T*(5ru*!ehHRiR9pKWEW~HcfXwB*X6BI0Jr;6KKeJ= zgQwn2(m_l*bgbyvn4**xmra-yZ}r(6LAyNZ5m=6YB36P>m}N`5V3{t=Dzb zKh9yuu$}$BT=H=khIR{3Q0@n-33?iSd3E7mC8!_vW1MrOWsM^~UWSDq@;#+W2{_$> z-z84E%;i3{rYo)Sac&hObG*LF>v8JN%hSD4fNnC+{q8DKhV(Wr9gMAll(THM$HF>t z>#0vg2dpG|s5A0ZH7N`sFP&i~5pBgMontSvYYZ&Xsx=HPe-PZMu9Rsazt+NmNJMi` zYMEs(+n|X0R(u2iVTH_MfP>~j+swIi{@J@~lY71@@`lQ77vfj0IZK}K{ zt6o2w_Q#pqze#^~{FKh0hsG-%-|>((oQKHZJf!hgJVf3?HEuWL5B!OM?an_CDE{9O znBXDH&fFBPB;2cKE@t}nMVXe6)!v})?llv**R{JT;sZ$}R? zd8Ow~!QjoIhf-e?AXTw;J5vs zaNVwWyij}XWsm-SnrVgibg@y=(r}jfZ5sZ!PUF9ap61Uhr80Vn@AWr9K&4* zHa+Wk6s#=|_j_bCERh6&ZQaQ873*sGp+#;?6?4GaCiKT4&>U6wH;DFn1+fOK(JPnf z@B0xivfT2XGv1>K;i%iqH`gWC;>$>YrVC@(UJ<&gLZ2v{WeSwe$gZs>%^Ah8o#hB7(xB%g({E@tR-Z_=CYGRnKCTNmH0udXl^z@iwIb{ z`82LjyTC%;{ByTmm12I)>_&QFR?4S19WyHsnOH|AfVZO@PCuW1<5FH<+OHKU=XdP3oPw4bY+TeQv25wmzL9G`&+D);R!;(5bU z56&h>F(jR^vF>ThV61p(KbUs2_PJROS|UD1emFWIV;Yw}@p9Vfd=3epIFV<1Zm!$h z*mVXwlgXyTv)U|94>O=oqqo3k5W?K6J9TazAREZlHmfIj^MbMtzRax(lWY&fd6cqN zLe}fDrCc~+gD#3?h}_1MmXn*~_bKk#0wV}Vb@;WG#Gm&3@)-+$IsfpB9YrxsWxQYX z)Io)qIK?lJvY>!wW#LkY|CC8gV{08xk0}Qd2p%^SnebukDbjuNdSRPw2&e&7%nkPE z*BlksZC7>*FEm~DO2DBtAjAH)lGvq{XeKKx>c=zY?J_D7XS1F0V*4p0>184oq1j&I z!muH(#1|_1>sJHC3CA&_wwQS17Ksdegb|5fYh@2heKbD1*l|`K)-CK?T`60Myks#B zeAKyW~$Z+%2a|27A5!$tz-)0rvdek2$AB5#s#3<~hOaF$|czldZm?YhFKF z+OE~13_j9~6q>lz%$RR6yA!*JQ%cg=uO1}dzPX{&4GLHG(Qu6{pQk1*7e~)l zXq%G+n&3TInC-SIVDKKi@&EqjdJ%zR3k3-7DvVy%c@>et+ar`)2p&Xk6-arznT1$j z{5~gT@D>m%w*-=$-q*(z>=dx;N{i~A@nO|idn(+$R*5QlIqT*mUar9quoa0uIiRU@ zv(dqy@UmPXRBw8#O4%5Q1CoOgBzY)1pLFa57lzLKNjX7d#y>sN5myYA1i94P z)P{-kcDF6y8;%UVVz37WPo{hod4L07#?T_AuOKeh-|u5%u`W8P*U8(ciQ__(@6Wq4;;@yJ+I^1uASF$?DpI3cL3Q7MP)?*1_l6tfqnpPmoYh& z<>bsYwKWu#RTchhz`O@Q2R1(d0CsYB(^h)MWMF8-^sDY4VPOez`3L?_-qG`(PW_r4 z02t@}Pul-?RRmVn5KDBYee~1a4V@glSSvK9u>Bi;^9#TJ8;<;i-E_6((0ww{nA7$* z{Q5WSM^>__(+@xCHoj?hxP;5ZoamCAvdMLP$VB3?wEYB_jip z-66V5ewU0KjmdsZg7Ir47B)V5AQ>S6A-eYeFmC?<0Pz7wfMYBSW&kD-0}F_8+W}xe zpFT`140Qa10RSF8dRM1u_6SF}ec@HZ~4A|F5%+iG_`WiwDHN``|G-#XTBk zS*@1_772Od69Uh)-xE;24rCE^b*p~j6(km0QOO=RhMtBFJ^imN|I7gZ;NW85;bUW= z8~K3%Objf{UkPyj-T?!h1Bmkg_wHj^JaR1y0oV7LBe9p3A>P^kG zMDQ2GSFQYgOByiq*O1jB3;NS7sdLp5?E43dvLKP2nW3vjS}APccsFuoO#-$qHpB-( zs-qxbTPDh^aT74*muB~tXh5!BB6nSLM=guL)cCM%w`7*QS?svyGBBBzqq|+5_$8RT z#25yw5F^MKJqkHNpKizOhuT{tyowl_M1SX zE;Z8TNWr64w>E{gNNkQrgK=FjrrxLqEIP?EuJp+EL0b_~OfM5`#V+iDIaHX)jKBYCP}9^g)8ajhbbEqyLL_(l_-NDF?Mv4>=!7Lb^rG1?T4G zrJ6|6v!(_2B+9p($nAy>YJ0$EDK-=GGsgX_w&kN=y;G+#$E27_qCiyTl_Ib0i!(w) zt(chsnWo0e+e(6OSA@cMT}ztG3g-reD*DMeQtofY?)frXe!YUe@tk9*ktk7#Vr1ra z&!-K+Z|9a5Q(Y?xr&TJ-XarrVEUhY|{)RT>+srp$iU| zv$ud~8_^Dv)}|AejNmtl>s4nt@=_s0)!mhwWIv)1;&eo@4Y<}zYRve7+paXb0D=b$oGkO=8 zDDa$_?@~2$?kmh1zgU-pKddW0)SwBNV}%W8fdX_8J=INO!;a#aA7+krY?K=2ee%Gn z%(9g;ElQ792G;7RVmEOd!-pW->W_$+neX9;zT*tgsmmWL;jh=QfESjwm=%5=lxpZF zXNQqrSotpWB;5jJSkf74y1@-4wh^Xob@taOMC3$>JwMnb`4?Utda>OJ-@{}hVVPyg zz$xdM%CvJ&!C-ur{OJ1b7HyMtvCbh#*!+;Ilu8&Y%m=2-#i2DZnSJ=Z@=>euGW1b! z2pia$lB?7!J=W~!)?(g5?qJ!$UM}ScLqBT=#N;)}tA$HMMqnPWewP_)pN^N40FYcY za13B6v-T`_R5!R5zU@@#EGVQ4sWC{G8nS=j*6P>*DH6+rnhnVX>C!xa$+C5gvh?KD z)n+h3yHxsw9kUC*VKw?ZVnfsqv(audZUm2B$sKJKiAPfC+-MC^4@&OteaRfJGFnSp z_mom=E1_8sJtuBHP@N6^%;Ieoc`7av{UqhPkx~w2Ih>#}PR$xyUhV;q3}-(Ech%oa zPtA8T*UHwm{-faK=~Kuf{U>54SUPTwSudcwM71=9oIMg%+J78T_%$!zGrcM07^>C_ z@7&l1PjMOh_d>0$Io&CFy_Ow|T|up9N0=4xoGK&!%zVv!l5pUa)e0Y5U7<&@sUCcC zB5|fFanunARE`Py_T8)^%ao9IDs1SKDQzb%8)7SgRi^ zM!osVcpb9~dqbKTlm)T$bqqahnNX@=BI=jkpDTQrA~=Y*f8Tr`ZnrDM}tDCgan1cynJkPugS;14x|_ zM7YF6+;{P{DCKPYMbFSM1mFH_=iQnU+y=6Rn`bp6AI~sL5NK*!eMP%e zJO8Dae>x`fBQYvdGhA*iwlS6XhL_}&ElhAI#)ZLY_d~4F)t;kEI2C*yTe#lt_-)Y& zlVq*Rs;Ru~*p!>x_+^$`nZq^s3p>rR`G-8gbmzGZ$jJ|AKqt1mx!Y6p)i5-a#LHD8 zpL{c~_@#P}*_^PUV6BRKhqu)J%AgMJEucU&8E{m6Ewaj{0M9py%}WX{em!|F*dDys z@Gul6Qr;P-)3?~pqfJum>o>#*6AzRvNdAJ|kZIvw@x69iT|;rYeze>CVP-M#Mn5fS zBgf^a@lES7PPM3UeTh=DnO;E4P~r@u!chL>oV%;mlAzRRY{u`_o3eSJ0RKXUSft9;RS~~V@C;< z6rK!THNq(;LJccI#1&cFGA{Y4O8OVB6#kuE{9dd*az0KZOCHhBk3(?AK!B|F4Qu!6 zD97rTciM*y^*xa^3}xSlhXyc8oYrlEcBkvMX5*<<)cwX`KO5Ngn$ItMW0BlT;9cJ& zB#7Wys@eYbL(7^u%gMY&aHGxfEr6hMbBM;SjfXej&FsU^8gw}l&CkT^QPN&w9d(zz z#&?*Jz_Nc0wyGe!pyFWSUG!k_1dq{0 z-22gH%R^1^9kaa6U>bN`nmSGD>}O-=f(N_2u2xlt(d|4M3-q~=+fcVC0M7R>EL~Z2#r+TJ33WeJ65~s>^IC5i=+X? z^v#rZG)j8(E4bz>?F@^l{#3u7x!&sJWFxpW{*q*HXaFG8nD)+`j`&XTT0W%0w6W#q zi-W{SeX3Jf&B*6MeUSYM5b8O^h*GJr=esOP572M{@ue*3`%yDmewMY#1q&*yd&xK< ze52EbT=}FA^*cfl3?ydY-qjQQ&|pkvCb6ZCh1B7^lu}a(3y9;4)!01mIPk}r7o$Ux z$hB-o58h^g+WCu!M70wZwa3ISJBuFEkIgOW>Ht}tEhE_T<6D9aa{f*^Lo3sS<8UBY zv#i0;1+<&bkqts_tROy(OyS=GxYY;TwMD(>zrMP_L^z16DNlIV@vIjKy`wpMfLvkr5qD{jAUrrW{lmWBF>q@ zPzV`S-2~CjI3OrP(kqI0>jWe$%IMOPu#D!11_@VevnM`Hz;_azb`I<$2_X6vC53zj z3RhCbr*n?}=9wwuSM0<2qSo2?W!2X!c6ne)rx?^Z{?>ZkIdc8(${w2|XZV;C1QNh^ zbZi^uT>b8PG0Oi`=p7jKw%D<*X^qiF9s<+hReHC zO`mb?d|`6WiyR^#2~0@m{i3}VTe)CPM=NW`_nru-hjq2U)`dt zZPPx-Gh?Smfy!Cc_7kSxpUx!|t-d5=^_JeqgaB>|O*gc|0ijtDDBq%FeI>mpyEP#@ zXyEM4s%hL0l24<_tq(@D$2%*xOvZ$L`&TTV^Wt=f3KE!7Jc?a4QL&%TJ-dXmgxXF} z7^|34LX9F!eeJtf+{sjJtcF2eUJv4f<{ZUia^aL)GcZFt0XkkCu97oxJNQFe+oc2= zTKaBMS9`p(r*D7AKSf`CC>?AloeKxtn;Ql-C~*|v9O*e;mDtAJY?NB5Wb?J8Ow>La z4)MCCpnA3RZE)wlvY>v6c*IwHI=4xaq9vW4sCBRE8xqWX1{v49FMuAFs|wO;eO8l^SQ z&Xqtri(JwYikInTgA^GWipjanv@91AsebelYAt?}uMeumPU}JhE`1sqpU`QkO?bY@ z2_e-Qd8aSa)*TdW59a#WH-8dyw}=z|TRHAG9K$%vWU*KB%vt@MCN040{%1JzkHt$d z;j@QQy4&kOqlft^A?_2V64U;iy(NZE-!1O&4uf?kRSUubh4sdy4Lj6bqlzt8e3M97 zOz26z|48oEPqtDNmkf9^?&mQkk>IeCt-14zlkOs!n9^!5d2z&)Os1HL?fTUqBIyJs z2_gbc*d%iZQ9_gds8c*D^ViMraOAH#s$bl-J4_w%{Hoth@;GYl@rIRv@S+N(SPZm6 ztOR3N`iudokrPj_)UeX#`9x1AputrwkGdGPJXO=MtCM6bha8=uP$dTwF`X(dd_Hl7 zgt^X1^1LxPO&BYUELk+fV73yTo$E|MOv*w$8XW2(rH*^r7s*XWhhA|wfy2I~{ULFe z)Z(UCSjFavRqaZGk^Z>xu6w!G*t7Z5@O!hgT~QZ1w1DeRkR{8u?y8!2KWnFp-rsN! zfgXk4Z{`1X8!4EK|7h?dDHb zQ^griolmLOYl$iJReXHU#kX(S9lHVZSaNOpCY?^Q)V-*>eI_86pX+1L^UoYyj%6V35)kP=^{<> zntMjx$i34lZ*@BfGj5BJdtJLp#{x8T&bi^KJxYf3Q}5Ql_(D+}V=q4L&$}*3&=eK6 z%!}rY6HY0+f{aZ)3kP^JQFc4w>;yHzWWFrUY8Q3&9d*0uRFXWtD)ukC^!JM2#R|}Y z!OQ(G9Wv@0=7mfY8856X_QDVw>-^-k!W}#6-xzG=e zbQ_-_z~BiePs%EqwjJApCQo@#!7|T<5BPQGz8)uoF%hpM%InfdGGCCPl(MWn($aIl zhlVJscC1s~ilrC|dI}kC>h>bvWPA3;sct_la#D8@m8xSOw9Q&qU4m%TU85Q~6ZBLd z$DWhJmx`^;yEZXdHt`%LWTcYHt%9#`drduko=jX*b6^dx)-;)SN3;vUar1jAu;xYWzHp!5w*@~ec;9UJ1U_S8 zGPwo(^mTb(Bo;rX2`OQ|u?=X}r7gN>SwDO3Ta^Pa?WI&PSa|0SdTMkF2w!e%5KcJ+0r&&{b%1GM9EKRj)YcFlST44dIu&h99vJ;K;85C|1;$Oi80Vm zT%52?PdfYYE2{CUidM^fiYkh<1;fV3r!cxBppT`(W#n@qbzjpY-E@(~sH zrv1`F{R>Vp-x4()V+z&z*6d`|D=fFCbm?Q5*FGY*fZ~M4fVm5qn}|E{0pT*|?d9gD$9Lp`nmaU{CK#p1+5VIWn2$><0-i zUZR^Y_KpaXb3LGw@qQ|u@3YrmZZ>6ZG|6z$iMH7gi>Eiyw}7m+T=V7V8~GFTaS+}D z9?NGSs4K5TbOR!Ut89$|V#dsQsHJ2+G;wd5sOoqL8!QJrWMYIVo__Itk@hbKtG6U^ zRcyC--O}B%lA&FcZz6I~-}aWHy({tc3}b_(E;UG)+NySXOpUvJbBj4M2&TBlQH=n- zKMNAJpQgML-&)Y1qRC4sx9KU>QDEK8&J>VZ7A9Ue`mr+wO;g5l!?Opx=gInYhy7oY z!i+_nwDfZ*nqa?dY`Dgh+Cn{8Bk%jNkXDP$n{2079v|{U&-}u4AR@ zC@f8=YK>Ovi^?rvMa-iwHJSI(;;Y_;G2DSQkTu@nq3XzpS?9NS2GGsNSAI(NL31h| zxFHQANSa|ay?YD`i@GDe@v5w+QXg*t+3z8yjV7{K2lnPfNa>Avlu3)Sds{aYxm}PZ z#|FkSVc_Ln=p_{4W2$Npoxjd>GDKknZ$UXs1GjLcl>N#~E))Gn^e|t4uJ4;M9KgWK zi7jtm7%8a572iwSUn$)C&K-W|d*5~dH$P9X_7YBCBpe%u%eKctJ6Vi&VslRP=`^{gYwx_3qrJ1mu%Jts?i*JIr^2$`8_<7-fG=O84l(LlD+1b^T9)e^UwQGdik z_|Z-v=UR`Gqn%6SX$=(5^Xy*l?&ds0V-Hq*$;eNVB^BOEGy%r059j%O8q*+pvXqv7 za0b?>Z~XknP}?W*x!E_LEXtv#KX7;cd!Kk_%qG{|HbtpU&y)xqcIafv%IZm7(~i@$ z_QWweM}6~4*O=a=eCUiL+b2L5`GD?6z6QG9MVR4z+tEC#ZP@BvbO->530(ygQ$43hps z(w6mnkksXMsSeb-XnJl3Oj$~qHQr+h3QVY_hPZOjno^1PUfO1vHD1t8M_tK=5Dgm6 zDyTOadjEXgXiHaf$x~A6oaYo25*@`^T7WWSXGvKhgW#Ucdtg)YM-AIkKvegoSSu~o zx!Nty89s1V%ldaY3%)e=Q1Q+z%1*23I6y&^3FF~5<5Aj!f^Mg7^jsOeL@)wA;jsJF zLY++**q#DrT9wueihnT7jjC=lGM)>jfyJHF0%$BB{g@It?VdomoJD*oET!{*4GWCx zmV^WysWml?&y8$u@j}#(8X5DJgd_Lp{DK#~^T6_I@n0(xeHrMwlLuXRS;p>sn<@v< zJ@I5u=|f8i&(PitM6r3InoWQeIGWT?ps;hqYr4{Xcf74jEN|Mx_95H+(q4tB>&TAn&j`DywbG{2 zpQo0Q3IlYDFYn;nesuEH@KJm6$1!X^Bo)pb{lk-}VjSn}UXzw7cv5XGxCrXmPu^WW z$jZlCh^2VaFEKLkzP9*9$@qv0lYiGRPe>Cyd4w@7GVzn+44zgQp69U{xAcScl%Njn zVUL?p&~h}kX>Jw5UA*FR_%Q21;&p{G&jow!iTF;0@p$TKd(l0qFVbCBz9ndbYod*n zPU`b9gi&$`^xmE^M!%)HM~7ldbB>;KMN@C8r@4c_%w(VqG1OV_qjIss$;a*K^GYob%R z9jmX|Hhtnz?<8uo4vn@`548~Gs8I0z4jJj9?1EMWnN|8Fzwx1k^9u$E1%&;Am*oVK zYcy>oI%aNBvlGA9h!V@^LeDXz8NQAwQwE#8J@0tRO{LrYtL;6^$AN3$;aqG};ThE}_3|ce) zI=2>?w5G2eBC9?9mc6f=>g)Xger~P?6@~0Ov>ta{HZt#bsS7L{hbJ0!P8v0tD*Jy{ z_NQtEQY7P>LUFdyinYXFignA9&q$J>}|8jlcQBxAcZ#%b=ysu>3}ynk8OhAjy1S3f{ey)iXxzJ#SZO4~A0O7hKzp_xll! zzT6MZe*P)Gvw!Bl-+T z&>Iobh#)onpotOn!;Rgu*}4pDv`JF@>HYN>+9Me(n)!n=%h>b7*;UkoT9rXlRjc#a z1%sAz`Bkf_{;J{4rSv-U5AQ|e;?CeLkCu)cELVs2fj}R8&E~rRWGTF_u+(3$ICAHV zKlsbr9uk|a8e8cM2OG6d%3AZ82`fTuGD0`j#TSL2 z;+D#5*Ucd^X3y8JH02e}SpT-oS@$AuaFtGR=ycx++O4#XQ*p0VRf=0Ak(}grzW5Lp zLn>iD{#IMpsKKL<);`psi&rbuCSl<+D=Cb{m)=lFvgAsjlWD8Fc3^3frGS+-EO}q0 zh>BW;kMM2Pk7KZJ8okG13T^BCRr?v}KZI;!ouIm**`O-N6YBo{iUc|}PYt@f2A@}> zl8~jQ)%l$hUS_Tr&H};O4yLn1oL%-s{6>8(TRehXuiQmVxY%L7Sq0#_N6+;h$otJTzr*hcf311ob!Q7NE1suH`R|K zdEZgg2FKCQT};`_?(j$lzf>_m>)9^Fk|*)D;MUkV;&;fMKWL{=o_1#QzR;3FE%&PR zL9s^>S!S1eU-Ii2+M1~rrt71+%04~p+#{(-kO0?68G%pdYMeFpKTD@BB}6i}O`k<& zC089Z$Tj|8fv2ymLsC_uzs8qk@k-A*^K4js(kGKw_<%ML>04JGDRWizzl1vr9uHGV zHrw;*>VSXL3V@jIObt7bM7{%kP6CBdSdUp*e$j{*H zf^lt12HMGC!s}0YCP6!T3#exz$+b&Jus%~A;?b_X+oaX0;hi$?nlkU0zRn+z3K&>S(p-He~wcd%Dsi|=dlE%Dj2TeYfas4-( zgR+sLAqOuBwzc{4A_>2GrP^YEpS)iq?gxn^kSD`sY_bb7VTfeZVhlkpmA;lTto-m&?| zj2d39YlR;ICg@e)y-hq`{8UiyzNjrYPB!Uhlnor@Z8}kSd{^;Qw8FvL_@{Na?B6(- zMcyS=9QesTNl2KRh}%5t<|EuR1Qp*@BYqWqShdrwz!H)+*F~DawU(VTk*1^{IOLP9 z=c<8&M4G-hQ#a}Jty^XP;#pa#QHpquW8*Tw%{<|l9!=Dl@d$yC*6qycR>8l5^e9;x zk)od4ZRu($C$1%?mM3MlqfWcV&GKqZY%*(fO>I$vN1;WF>det~b!eWG@txILk$mNw zjIpm~)m~8;_)`oel$RtFEg5)ka}CXXV5y-0O)Nruy(l zq7aB{7Pk7)ynV6-T+=;yK~o~r=6C@KHsX&UG+z)7w;Au+B-x9B{$7E+tiQx=-xF0MMEKlb)iBoF`K9o$01jk)Db4}wX4ao4PW7odwcey9MD*HSo>npB0e6m?ZWXseWD!2xcF z-b1_>b_3sIHXhn9&z$ht(@Cu!l;=QT%0UA@`x61%>c+;HzP8;OhUeOo;U|v0JXJKr35D_cmuZ4}pDHW&`-!4REJNz5 zK3rzVxczyb9A5q8PVK~+xVfoKet2NkWZbZ}#7rRX3M{-}2;XTgB!;kwqxwY=Uo|ps z*rR6oCu<6~ewxApHgUZJLeHf_DGn7*%}=@&zYxTkfgjGCH$#-BhDVy~}{ZD`_m9JIG@DwOLp&aKuFJ!_)ZDXXlK19W`mQ<^grfqQU;M3RTsk z2CD_t(>1AYMP#wNY*bHcz1(OFOl#T;?--Svl_awze0WeXDNwWs$qTPY@O(>S5t}*S zaz+&s;Esp-Q@Q}^=UM1qq;{)p7f&2$>KaveZz=imD|~g+(xYi5o^v_G@X9$Y)Ki#h z{4|5AL7HR7DL9N5H2(3vmRGM2LG}F5fArZJ#IE*sj zRA2Wsa`Z4f%zhFmmyw$vVLMTu<9L?X)fHnz80unow}I1~rLQhwyisNEj9!UsxPY@J zp@EyenyTS+Ji2RxDQTcLeF}w=<0h>6=J7y9pL?>BwPM6d*eFlW809{yuRS!}&Lbcw z24!3xBSpQt?m^2M&$tzh0Ay`!G63Kn>>BydfrgMr*;ddjB|F2n^bRhrOZn4F7Q%Q z7;o|#i%gmPgin0ahCH2A)9njQVzD-5SxuE+zc3*x8WL$YQ_&9x@j#u9{44k7D;b03Sir~SI?4FkEGZ-OM|-aG9T&=)>2wH5 z4oe|Dk;{CFSqqQB{j$pE8i+S(ne|p-fVeEEt<$s`MZU3mt78A^3~8` zSC?AEI1e7$zNi{0bs#iPzlQ0#_AM<8iB-;YdVj0ks>V`S<*k@?E?B5}T7{BBEgpT>5zYT(|-T% zg~vK1Ue(Y1cy#4F{qqVU7Fqeynl|J$@af`2j~$%DZ|Ej)MbR*6*A)zc2CZL^GP(4MSUpY1I0Duj<0;Ss4S z(3#)dmL3A~2Q^a*Jk_2>gr7^s^*Su}@)Q|=rl6n@3<-#%dIt*QTZ}L1iA9C+DPWG4IRB?^p@Y5FsS*5>~|J!Z8cJD))s|lJU ze%N?iBi}j|N5lo}{Fp=LoamIMD%jk=-HjzYbXjB;_2_yDtIFtU!lw{dVatadQ{9AyZvh>|PE&v4$d64Z-pwhfSV ze|l5)F7f1paD(O4^Mhi3C9M>z)CqlYTg)Z8q1F@a_mgF9<3sBK)!BUz+1UeQBGE1p z$L`FSo;iOW-L+@pJ!@5Xl9xy?S813oNAPwu!M8y@wVTaO;Uu#Pl?bER?P_%kFeyaI zN{e5uivPn5osaWm=MY=B&*V>RdMu}&prLa$j)OFIy)$aa|>)~VKTP&6Uq*sR_`eB(C9 zZ3`-W{7?1&>aYA; xPN=v6f0Rq{wS&b20%rpf40zm^69VHJ`$b$s@5*_vLefz=Cy+3CdA!@1{{R`T7qb8W literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/balloon3.jpeg b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/balloon3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2fd399041def0d85e3f865c645cd43e5bd0971bc GIT binary patch literal 16539 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 literal 0 HcmV?d00001 From 99bd48a733aa4bdf8370374a467551208dda9a73 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 29 Dec 2023 21:37:14 +0800 Subject: [PATCH 083/253] Add solution and test-cases for problem 1335 --- .../README.md | 41 ++++++++++----- .../Solution.go | 48 +++++++++++++++++- .../Solution_test.go | 23 +++++---- .../untitled.png | Bin 0 -> 5868 bytes 4 files changed, 86 insertions(+), 26 deletions(-) create mode 100644 leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/untitled.png diff --git a/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/README.md b/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/README.md index 10b67cf8c..79ee313f2 100644 --- a/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/README.md +++ b/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/README.md @@ -1,28 +1,41 @@ # [1335.Minimum Difficulty of a Job Schedule][title] -> [!WARNING|style:flat] -> 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 want to schedule a list of jobs in `d` days. Jobs are dependent (i.e To work on the ith job, you have to finish all the jobs j where `0 <= j < i`). + +You have to finish **at least** one task every day. The difficulty of a job schedule is the sum of difficulties of each day of the d days. The difficulty of a day is the maximum difficulty of a job done on that day. + +You are given an integer array `jobDifficulty` and an integer `d`. The difficulty of the ith job is `jobDifficulty[i]`. + +Return the minimum difficulty of a job schedule. If you cannot find a schedule for the jobs return `-1`. + +**Example 1:** -**Example 1:** +![1](./untitled.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: jobDifficulty = [6,5,4,3,2,1], d = 2 +Output: 7 +Explanation: First day you can finish the first 5 jobs, total difficulty = 6. +Second day you can finish the last job, total difficulty = 1. +The difficulty of the schedule = 6 + 1 = 7 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Difficulty of a Job Schedule -```go ``` +Input: jobDifficulty = [9,9,9], d = 4 +Output: -1 +Explanation: If you finish a job per day you will still have a free day. you cannot find a schedule for the given jobs. +``` + +**Example 3:** +``` +Input: jobDifficulty = [1,1,1], d = 3 +Output: 3 +Explanation: The schedule is one job per day. total difficulty will be 3. +``` ## 结语 diff --git a/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution.go b/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution.go index d115ccf5e..3eaef0ba1 100644 --- a/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution.go +++ b/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(jobDifficulty []int, d int) int { + l := len(jobDifficulty) + maxCache := make([][]int, l) + cache := make(map[int]map[int]int) + + for i := 0; i < l; i++ { + maxCache[i] = make([]int, l) + maxCache[i][i] = jobDifficulty[i] + cache[i] = make(map[int]int) + } + for i := 0; i < l-1; i++ { + for j := i + 1; j < l; j++ { + maxCache[i][j] = maxCache[i][j-1] + if maxCache[i][j] < jobDifficulty[j] { + maxCache[i][j] = jobDifficulty[j] + } + } + } + + var dfs func(int, int) int + dfs = func(index, day int) int { + if index >= l { + return -1 + } + if l-index < day { + return -1 + } + if c, ok := cache[index]; ok { + if cnt, ok := c[day]; ok { + return cnt + } + } + if day == 1 { + return maxCache[index][l-1] + } + ans := -1 + for i := index; i < l; i++ { + cost := maxCache[index][i] + if r := dfs(i+1, day-1); r != -1 && (ans == -1 || ans > r+cost) { + ans = r + cost + } + } + cache[index][day] = ans + return ans + } + return dfs(0, d) } diff --git a/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution_test.go b/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution_test.go index 14ff50eb4..bad6654d3 100644 --- a/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution_test.go +++ b/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/Solution_test.go @@ -10,30 +10,33 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + jobs []int + day int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{6, 5, 4, 3, 2, 1}, 2, 7}, + {"TestCase2", []int{9, 9, 9}, 4, -1}, + {"TestCase3", []int{1, 1, 1}, 3, 3}, + {"TestCase4", []int{100, 23, 48, 96, 72, 33, 67, 300, 235, 786, 999, 1, 0, 3, 5}, 10, 1308}, + {"TestCase5", []int{100, 23, 48, 96, 72, 33, 67, 300, 235, 786, 999, 1, 0, 3, 5}, 5, 1008}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.jobs, c.day) 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.jobs, c.day) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/untitled.png b/leetcode/1301-1400/1335.Minimum-Difficulty-of-a-Job-Schedule/untitled.png new file mode 100644 index 0000000000000000000000000000000000000000..6d4a3f8307e1be00fe708ec28d12c99b231949f8 GIT binary patch literal 5868 zcmeHLe^`?D7ALh;Yst*6t^zf2*R`BJdv0Y4!7L408!VT3-A!Cqn{)jTG$j;ey45rr z$nM?TOk-hSA_ZOtio%198gsC zG9xjHMp9! z<+&#}+tOSn6OQoM?;=GwQZOy5^sIN{qO=06k;tiDsJsz|qM9!RRiL1rWh(lXE;?1o zFSsneVpp?yGgGSI`MX@Hijv4Wym@V7J6`CX8BSi(y=2exRlh{bqTU(e;8ab4xj9|q zXnaLL<<*5zj;JjJ+A*O?x50JmhB@aybwrPOb>BAX0BMrTeF{C}7xW6twY)NIq? zqvt+4?B?rH6Zz}@%b-?k5HOeYb~b27tv~F6{qaUk6GmO1v{-nEdiqkCItcZcw7{3E zHSGI9u^Q^FMoj@)j!Ttylx?hdOu(}Nxp`ZLIpA6sOo5yfjGw$*ZKMMWq3{Ko2|?D} z$YD;%uMWDR&)4dkF+h8-6VSvx{B+QGv}0Un*^e#vVx*+m5p8#Eavde2%kz^mhOnMH z*dg3DKtBuxzG|mLn4Z60(?wmuZdJlkgg^(Uc8)8Ut;pl*GV{mC0B9%#FWCbCiEPO6 zI+!m@>}dy$@M*i15PUt|?n;WsUB|tDnLm)O8@=+VO9XS8v8a#HW9=0WkfrE^Rn9yu z(vk+a6YH?K;pe%?(LyMkx$PXSc7K_k#d^&b3Q6Y2*zO`%B_xV4pStSiZws&OBT@%1 zaU^*&;pMgemR<+BIwwV4*3KA2RH z{ZNy@KJM~s^CfA7_;Ai8L3L`Nzi2ZQ{l?OfxjKbPX?{r^99*9ZVsi9T0kGgb%^z2H z_+x8_@$Ejd#G*GeT@e11LHuHyqcMRuJC9drb-G9M&4e({j8X91T%|dGNcUjmR-0xW z`vC_;x!}asHU&yLlA19DiOXdFCf4=|F$y4|Aq!R6c8x6%5<;LQ@FvRE>lM66*ExQ| znd^(;UrhfxF2bBP5Q)R!v^E$?t|ge`qHGq4&?Jg04$+|p@Z+{Dafb3q8)_hq$;;ejp14>8os)% z5!OeRw-91ot|1j;f7e_4AB%#g4G4l1?GXndyp)d0cM!t7%irjOSst(`5>XWQR(euz z$H|YDh4c1gGNRh;C|nyJT!>rRGbmHeyLUjFo+` zQ5rXCI`Q$hFbWYPTO*fwFXzCj{EEbZwF)(caBV)Ay7T$(y=;=0uY28y{ zE(apTdA7C$>1si}?CVN;4%8x5l)9`w-;y@2r;x#k4RJ1{JWf@fcBy$7{@(gzc~qB9 z6jTd$UXv(&=LmZn=d#Ho{uJ6%ZLYlkU^T_yu4Qah`{6BsFN=o-1E$BR*Q zb570c*;ouf`f6_7F0HAg-1|SAP%531<{y&S+t{5(%xa(=c~E>>t{iDc*JRF};xE^n z+g2ySJCeYucRKSVVc(A()q(mcgo8beO*obk8qD>nh1@mJrQWt1MHPm^Kbm$}gPFbP6`^c%US}zzVDbjxMhYdI zYBnI0hPep?(97DKX)T(*8|t^!f9gZ0Jw0;#bK;Ai*s7IxoNI6^8}}2WyEkoe+QujP zF9O>&&b+ves!>gf{jA)x}>Ww#s+&Yzi**U}+ zJt4j35qb-S_g)ATb^ULFVFflYP4;9bg1p)hO#$NttHF3Z47@MVA33twXwLCrPiJ14 z(fxuv*-s~4>OvmV*d7j2$=u>rj|$sNo2IW*Uz0i>Pmom)hS-eOuS0}EK>IyivPK0O zZX^%SEHElDy|crsx`Too#e9jlFzv^C_ zTcA^gw4&vfhd*AV&sO6FntJL5shE8$?RC2_}axrSKBAKH?21cPud@0 z_1r2m`~B6dY-{c>31Gj}G&z{W!wNoM^z0!&Up=yh`^dC!;w{S*LtM`5XjvdreFff? zn$#4N3|Ykf5*wSH|J*B+XA-{PYX)h=v#j@P+oUGF2or;ExTjQGgikhPzd0fPVAkAX bbN7i{D}QFy{rBt>YQ**!a&+C6cMJaw*uB7Q literal 0 HcmV?d00001 From 2d039d76c6e1459557d53a4a04953f6c915c8644 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 30 Dec 2023 12:34:31 +0800 Subject: [PATCH 084/253] Add solution and test-cases for problem 1897 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 16 ++++++++-- .../Solution_test.go | 11 ++++--- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/README.md b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/README.md index b193ba0f5..32d2ec1b6 100755 --- a/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/README.md +++ b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/README.md @@ -1,28 +1,29 @@ # [1897.Redistribute Characters to Make All 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 an array of strings `words` (0-indexed). + +In one operation, pick two **distinct** indices `i` and `j`, where `words[i]` is a non-empty string, and move **any** character from `words[i]` to any position in `words[j]`. + +Return `true` if you can make **every** string in `wrods` **equal** using **any** number of operations, and `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["abc","aabc","bc"] +Output: true +Explanation: Move the first 'a' in words[1] to the front of words[2], +to make words[1] = "abc" and words[2] = "abc". +All the strings are now equal to "abc", so return true. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Redistribute Characters to Make All Strings Equal -```go ``` - +Input: words = ["ab","a"] +Output: false +Explanation: It is impossible to make all the strings equal using the operation. +``` ## 结语 diff --git a/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution.go b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution.go index d115ccf5e..c6bbf2df5 100644 --- a/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution.go +++ b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words []string) bool { + letters := [26]int{} + for _, word := range words { + for _, b := range word { + letters[b-'a']++ + } + } + l := len(words) + for i := 0; i < 26; i++ { + if letters[i]%l != 0 { + return false + } + } + return true } diff --git a/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution_test.go b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution_test.go index 14ff50eb4..96219ba3b 100644 --- a/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution_test.go +++ b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/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{"abc", "aabc", "bc"}, true}, + {"TestCase2", []string{"ab", "a"}, false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c11f215633bacf1b7cb638b3cdef0529aaa7755e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 30 Dec 2023 18:26:34 +0800 Subject: [PATCH 085/253] Add solution and test-cases for problem 2350 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 14 ++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 51 insertions(+), 25 deletions(-) diff --git a/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/README.md b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/README.md index 9f3908f18..87f57ea27 100755 --- a/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/README.md +++ b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/README.md @@ -1,28 +1,43 @@ # [2350.Shortest Impossible Sequence of Rolls][title] -> [!WARNING|style:flat] -> 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 `rolls` of length `n` and an integer `k`. You roll a `k` sided dice numbered from `1` to `k`, `n` times, where the result of the ith roll is `rolls[i]`. + +Return the length of the **shortest** sequence of rolls that **cannot** be taken from `rolls`. + +A **sequence of rolls** of length `len` is the result of rolling a `k` sided dice `len` times. + +**Note** that the sequence taken does not have to be consecutive as long as it is in order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: rolls = [4,2,1,2,3,3,2,4,1], k = 4 +Output: 3 +Explanation: Every sequence of rolls of length 1, [1], [2], [3], [4], can be taken from rolls. +Every sequence of rolls of length 2, [1, 1], [1, 2], ..., [4, 4], can be taken from rolls. +The sequence [1, 4, 2] cannot be taken from rolls, so we return 3. +Note that there are other sequences that cannot be taken from rolls. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Shortest Impossible Sequence of Rolls -```go ``` +Input: rolls = [1,1,2,2], k = 2 +Output: 2 +Explanation: Every sequence of rolls of length 1, [1], [2], can be taken from rolls. +The sequence [2, 1] cannot be taken from rolls, so we return 2. +Note that there are other sequences that cannot be taken from rolls but [2, 1] is the shortest. +``` + +**Example 3:** +``` +Input: rolls = [1,1,3,2,2,2,3,3], k = 4 +Output: 1 +Explanation: The sequence [4] cannot be taken from rolls, so we return 1. +Note that there are other sequences that cannot be taken from rolls but [4] is the shortest. +``` ## 结语 diff --git a/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution.go b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution.go index d115ccf5e..c20f60034 100644 --- a/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution.go +++ b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(rolls []int, k int) int { + // 4, 2, 1, 2, 3, 3, 2, 4, 1 + ans := 1 + cache := make(map[int]struct{}) + for i := 0; i < len(rolls); i++ { + cache[rolls[i]] = struct{}{} + if len(cache) == k { + ans++ + cache = map[int]struct{}{} + } + } + return ans } diff --git a/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution_test.go b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution_test.go index 14ff50eb4..b30dd73dc 100644 --- a/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution_test.go +++ b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/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{4, 2, 1, 2, 3, 3, 2, 4, 1}, 4, 3}, + {"TestCase2", []int{1, 1, 2, 2}, 2, 2}, + {"TestCase3", []int{1, 1, 3, 2, 2, 2, 3, 3}, 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.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 96d2632b943ee837430482ffb6567e6309fbf682 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 31 Dec 2023 09:51:14 +0800 Subject: [PATCH 086/253] Add solution and test-cases for problem 1624 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 28 +++++++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 51 insertions(+), 22 deletions(-) diff --git a/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md index 890beed81..0e09ce85b 100755 --- a/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md +++ b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md @@ -1,28 +1,33 @@ # [1624.Largest Substring Between Two Equal 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 +Given a string `s`, return the length of the longest substring between two equal characters, excluding the two characters. If there is no such substring return `-1`. + +A **substring** is a contiguous sequence of characters within a string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aa" +Output: 0 +Explanation: The optimal substring here is an empty substring between the two 'a's. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Largest Substring Between Two Equal Characters -```go +``` +Input: s = "abca" +Output: 2 +Explanation: The optimal substring here is "bc". ``` +**Example 3:** + +``` +Input: s = "cbzxy" +Output: -1 +Explanation: There are no characters that appear twice in s. +``` ## 结语 diff --git a/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution.go b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution.go index d115ccf5e..64a35a252 100644 --- a/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution.go +++ b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + m1 := [26]int{} + m2 := [26]int{} + for i := 0; i < 26; i++ { + m1[i] = -1 + m2[i] = -1 + } + for idx, b := range s { + if m1[b-'a'] == -1 { + m1[b-'a'] = idx + } + } + for idx := len(s) - 1; idx >= 0; idx-- { + if m2[s[idx]-'a'] == -1 { + m2[s[idx]-'a'] = idx + } + } + ans := -1 + for i := 0; i < 26; i++ { + if m1[i] != -1 && m2[i] != -1 && m2[i] != m1[i] { + if diff := m2[i] - m1[i] - 1; diff > ans { + ans = diff + } + } + } + return ans } diff --git a/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution_test.go b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution_test.go index 14ff50eb4..e9269eac9 100644 --- a/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution_test.go +++ b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/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", "aa", 0}, + {"TestCase2", "abca", 2}, + {"TestCase3", "cbzxy", -1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ee65e3db5c0dbf65ad7f92ad9268538ddabcd548 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 1 Jan 2024 15:47:25 +0800 Subject: [PATCH 087/253] Add solution and test-cases for problem 2095 --- .../README.md | 47 +++++++++---- .../Solution.go | 23 ++++++- .../Solution_test.go | 64 ++++++++++++++++-- .../eg1drawio.png | Bin 0 -> 16636 bytes .../eg2drawio.png | Bin 0 -> 10093 bytes .../eg3drawio.png | Bin 0 -> 7207 bytes 6 files changed, 112 insertions(+), 22 deletions(-) create mode 100644 leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/eg1drawio.png create mode 100644 leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/eg2drawio.png create mode 100644 leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/eg3drawio.png diff --git a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/README.md b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/README.md index afc937b27..aa067f9de 100755 --- a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/README.md +++ b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/README.md @@ -1,28 +1,49 @@ # [2095.Delete the Middle Node of a Linked List][title] -> [!WARNING|style:flat] -> 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 `head` of a linked list. **Delete** the **middle node**, and return the `head` of the modified linked list. + +The **middle node** of a linked list of size `n` is the `⌊n / 2⌋th` node from the **start** using **0-based indexing**, where `⌊x⌋` denotes the largest integer less than or equal to `x`. + +- For `n` = `1`, `2`, `3`, `4`, and `5`, the middle nodes are `0`, `1`, `1`, `2`, and `2`, respectively. -**Example 1:** +**Example 1:** + +![1](./eg1drawio.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: head = [1,3,4,7,1,2,6] +Output: [1,3,4,1,2,6] +Explanation: +The above figure represents the given linked list. The indices of the nodes are written below. +Since n = 7, node 3 with value 7 is the middle node, which is marked in red. +We return the new list after removing this node. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./eg2drawio.png) -### 思路1 -> ... -Delete the Middle Node of a Linked List -```go +``` +Input: head = [1,2,3,4] +Output: [1,2,4] +Explanation: +The above figure represents the given linked list. +For n = 4, node 2 with value 3 is the middle node, which is marked in red. ``` +**Example 3:** + +![3](./eg3drawio.png) + +``` +Input: head = [2,1] +Output: [2] +Explanation: +The above figure represents the given linked list. +For n = 2, node 1 with value 1 is the middle node, which is marked in red. +Node 0 with value 2 is the only node remaining after removing node 1. +``` ## 结语 diff --git a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution.go b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution.go index d115ccf5e..184192acc 100644 --- a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution.go +++ b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +type ListNode struct { + Val int + Next *ListNode +} + +func Solution(head *ListNode) *ListNode { + if head == nil || head.Next == nil { + return nil + } + + pre, cur := head, head + for cur != nil && cur.Next != nil { + pre = pre.Next + cur = cur.Next.Next + } + if pre.Next == nil { + head.Next = nil + } else { + *pre = *(pre.Next) + } + return head } diff --git a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution_test.go b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution_test.go index 14ff50eb4..62761e87b 100644 --- a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution_test.go +++ b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution_test.go @@ -10,12 +10,62 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *ListNode + expect *ListNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{Val: 6}, + }, + }, + }, + }, + }, + }, &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{Val: 6}, + }, + }, + }, + }, + }}, + {"TestCase2", &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{Val: 4}, + }, + }, + }, &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 4, + }, + }, + }}, + {"TestCase3", &ListNode{Val: 2, Next: &ListNode{Val: 1}}, &ListNode{Val: 2}}, } // 开始测试 @@ -30,10 +80,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/eg1drawio.png b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/eg1drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4ebe6aab091078a61490d3d1e9c5d84e77844e GIT binary patch literal 16636 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 MmVsuCy2Jhd1Bega0ssI2 literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/eg3drawio.png b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/eg3drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6c544ffb188d7b6778d39460c6d5184950af56 GIT binary patch literal 7207 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 literal 0 HcmV?d00001 From 949a59bf69db8f8d2b36363d0ee00e38e43d3144 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 1 Jan 2024 16:17:00 +0800 Subject: [PATCH 088/253] Add solution and test-cases for problem 2058 --- .../README.md | 53 ++++++++++++---- .../Solution.go | 35 ++++++++++- .../Solution_test.go | 58 +++++++++++++++--- .../a1.png | Bin 0 -> 1139 bytes .../a2.png | Bin 0 -> 3725 bytes .../a5.png | Bin 0 -> 3602 bytes 6 files changed, 124 insertions(+), 22 deletions(-) create mode 100644 leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a1.png create mode 100644 leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a2.png create mode 100644 leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a5.png diff --git a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/README.md b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/README.md index b80209ef6..6072b52e1 100755 --- a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/README.md +++ b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/README.md @@ -1,28 +1,55 @@ # [2058.Find the Minimum and Maximum Number of Nodes Between Critical 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 +A **critical point** in a linked list is defined as **either** a **local maxima** or a **local minima**. + +A node is a **local maxima** if the current node has a value **strictly greater** than the previous node and the next node. + +A node is a **local minima** if the current node has a value **strictly smaller** than the previous node and the next node. + +Note that a node can only be a local maxima/minima if there exists **both** a previous node and a next node. + +Given a linked list `head`, return an array of length 2 containing [`minDistance`, `maxDistance`] where `minDistance` is the **minimum distance** between **any two distinct** critical points and `maxDistance` is the **maximum distance** between **any two distinct** critical points. If there are **fewer** than two critical points, return [`-1, -1`]. + +**Example 1:** -**Example 1:** +![1](./a1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: head = [3,1] +Output: [-1,-1] +Explanation: There are no critical points in [3,1]. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./a2.png) -### 思路1 -> ... -Find the Minimum and Maximum Number of Nodes Between Critical Points -```go ``` +Input: head = [5,3,1,2,5,1,2] +Output: [1,3] +Explanation: There are three critical points: +- [5,3,1,2,5,1,2]: The third node is a local minima because 1 is less than 3 and 2. +- [5,3,1,2,5,1,2]: The fifth node is a local maxima because 5 is greater than 2 and 1. +- [5,3,1,2,5,1,2]: The sixth node is a local minima because 1 is less than 5 and 2. +The minimum distance is between the fifth and the sixth node. minDistance = 6 - 5 = 1. +The maximum distance is between the third and the sixth node. maxDistance = 6 - 3 = 3. +``` + +**Example 3:** + +![3](./a5.png) +``` +Input: head = [1,3,2,2,3,2,2,2,7] +Output: [3,3] +Explanation: There are two critical points: +- [1,3,2,2,3,2,2,2,7]: The second node is a local maxima because 3 is greater than 1 and 2. +- [1,3,2,2,3,2,2,2,7]: The fifth node is a local maxima because 3 is greater than 2 and 2. +Both the minimum and maximum distances are between the second and the fifth node. +Thus, minDistance and maxDistance is 5 - 2 = 3. +Note that the last node is not considered a local maxima because it does not have a next node. +``` ## 结语 diff --git a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution.go b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution.go index d115ccf5e..986377831 100644 --- a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution.go +++ b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +type ListNode struct { + Val int + Next *ListNode +} + +func Solution(head *ListNode) []int { + result := []int{-1, -1} + if head == nil || head.Next == nil || head.Next.Next == nil { + return result + } + start, preStart := -1, -1 + end, index := -1, 1 + pre, cur := head, head.Next + + for ; cur.Next != nil; pre, cur, index = cur, cur.Next, index+1 { + a := pre.Val + b := cur.Next.Val + if !(cur.Val > a && cur.Val > b || cur.Val < a && cur.Val < b) { + continue + } + end = index + if start == -1 { + start = index + } else if result[0] == -1 || index-preStart < result[0] { + result[0] = index - preStart + } + + preStart = index + } + if end != start { + result[1] = end - start + } + return result } diff --git a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution_test.go b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution_test.go index 14ff50eb4..e2dde7b8c 100644 --- a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution_test.go +++ b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution_test.go @@ -10,12 +10,56 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *ListNode + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &ListNode{Val: 3, Next: &ListNode{Val: 1}}, []int{-1, -1}}, + {"TestCase2", &ListNode{ + Val: 5, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 5, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + }, + }, + }, + }, + }, + }, + }, []int{1, 3}}, + {"TestCase3", &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 2, + Next: &ListNode{Val: 7}, + }, + }, + }, + }, + }, + }, + }, + }, []int{3, 3}}, } // 开始测试 @@ -30,10 +74,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a1.png b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a1.png new file mode 100644 index 0000000000000000000000000000000000000000..b45848eaee7038c5e7ecdd90e67955f5fe60fa2c GIT binary patch literal 1139 zcmeAS@N?(olHy`uVBq!ia0vp^Q-IiOnNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%{~6#D;`;yp{}(S_%$qkaB_+k%+uO*C;c1Jo)?g@6VqNaI$^>D2?>e#`1otruBD}= zSy@?~JbCiLg9rBZ_6Z3I4C&aj%F3#$s=IgZW@ct8D=T+)cDlQ}YinyCKYrZA#N_bd!%9j@;o;#I zE?ii?e0fVt%lr55qobo2En4L0=(uOk9zj7tb#?U*A3m_NvkM3aeEs^hzP|qc{rk6W z-P*Tr-;5bE7B5~5^kD5_et#epToU9L3=9M+1BSHDx=5h$oCO|{#S9F5he4R}c>anM z1_q`jo-U3d8P0EKIIdf(z|%H&f|`ne*a0;jW;M08#y9nz;`|HTS9o2WKIh3#-gj>e zPsDp^CVc<&>65X=O5M*7W?sFtG~M6%a>1O&36qQF22U0_@Z)n`ps58c$jK5pW*t2dFq>8jHj;A?RuGVw|zw--xAhpwatAdCW{`n?PWMu5Py75 z-@>d7i@!bOoz`O=V0t9-R>s7h*8!$Ge2>|EtC;aTz*J_=@}9=(lYZAOq&LpZ%-YhQ zr+Fy8_g2#bo4BM~89XLBQniL10SSyXTa~At^|+$HTke%k^laYS0zM4QvWMn>v0i+N zU4*OmLbOE1+bfF#yS~o9o5>>a_fF|8G@T+iv}x?N&X zqg$5O`A;T!2FxLP5=G1E=ghi$$mD{@%qcaYtcKT&KJ3!d34FvPw>l_eNlcm6zv#gE zeXok!R!7YfRDN11_n*xqD3W>pz71)oLo0KC)yV%kel9s<$tJdWFXpyvedfMSW!HOq z;r7f06Hj%<>0Nh`NPQ@>SEZzQN}2($Nsv+I8wWL0>lpB)Xx~!b$JTT9R~%gwFS6d@dctw< z*E6%NLl3{LQ=Ij1U+UXAg=;Pfou3Y*z2&|73_wh`X|0qEMnlOWb5t z|B~d|i@Q#<@}4_zDsbkx6@gqE{y&)fRg~BK->u_+r%#{$f9AU1%rn^HTw1pCgNhdh MPgg&ebxsLQ0Q;vo)&Kwi literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a2.png b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a2.png new file mode 100644 index 0000000000000000000000000000000000000000..09c7968d200387c28794900bfbc91dacb555895b GIT binary patch literal 3725 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 literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a5.png b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/a5.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e98ee007f2be592aa2a0a6fe4db3238dcb8613 GIT binary patch literal 3602 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 an9iTa;3C$ZAakSN05DB`jcVxAi2nfPeNnvt literal 0 HcmV?d00001 From fc94548437ed6323409b6b5ed7de810db329529a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 2 Jan 2024 09:30:57 +0800 Subject: [PATCH 089/253] Add solution and test-cases for problem 2610 --- .../README.md | 40 +++++++++++++++++++ .../Solution.go | 23 ++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/README.md diff --git a/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/README.md b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/README.md new file mode 100644 index 000000000..821a6ac6a --- /dev/null +++ b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/README.md @@ -0,0 +1,40 @@ +# [2610.Convert an Array Into a 2D Array With Conditions][title] + +## Description +You are given an integer array `nums`. You need to create a 2D array from `nums` satisfying the following conditions: + +- The 2D array should contain **only** the elements of the array `nums`. +- Each row in the 2D array contains **distinct** integers. +- The number of rows in the 2D array should be **minimal**. + +Return the resulting array. If there are multiple answers, return any of them. + +**Note** that the 2D array can have a different number of elements on each row. + +**Example 1:** + +``` +Input: nums = [1,3,4,1,2,3,1] +Output: [[1,3,4,2],[1,3],[1]] +Explanation: We can create a 2D array that contains the following rows: +- 1,3,4,2 +- 1,3 +- 1 +All elements of nums were used, and each row of the 2D array contains distinct integers, so it is a valid answer. +It can be shown that we cannot have less than 3 rows in a valid array. +``` + +**Example 2:** + +``` +Input: nums = [1,2,3,4] +Output: [[4,3,2,1]] +Explanation: All elements of the array are distinct, so we can keep all of them in the first row of the 2D array. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/convert-an-array-into-a-2d-array-with-conditions +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution.go b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution.go index d115ccf5e..69a149667 100755 --- a/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution.go +++ b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) [][]int { + ans := make([][]int, 0) + l := len(nums) + a := make([]int, l+1) + loop := 0 + for _, n := range nums { + a[n]++ + if a[n] > loop { + loop = a[n] + } + } + for index := 0; loop > 0; index, loop = index+1, loop-1 { + ans = append(ans, []int{}) + for i := 1; i <= l; i++ { + if a[i] > 0 { + ans[index] = append(ans[index], i) + a[i]-- + } + } + } + return ans } diff --git a/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution_test.go b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution_test.go index 14ff50eb4..b58156802 100755 --- a/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution_test.go +++ b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/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, 4, 1, 2, 3, 1}, [][]int{{1, 2, 3, 4}, {1, 3}, {1}}}, + {"TestCase2", []int{1, 2, 3, 4}, [][]int{{1, 2, 3, 4}}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1109fb53c82fd1766c94086bc2c241e2c7018da3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 3 Jan 2024 22:44:38 +0800 Subject: [PATCH 090/253] Add solution and test-cases for problem 468 --- .../0468.Validate-IP-Address/README.md | 39 ++++++++++++------ .../0468.Validate-IP-Address/Solution.go | 40 ++++++++++++++++++- .../0468.Validate-IP-Address/Solution_test.go | 14 +++---- 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0468.Validate-IP-Address/README.md b/leetcode/401-500/0468.Validate-IP-Address/README.md index 9214279de..cc096c6bc 100644 --- a/leetcode/401-500/0468.Validate-IP-Address/README.md +++ b/leetcode/401-500/0468.Validate-IP-Address/README.md @@ -1,28 +1,41 @@ # [468.Validate IP Address][title] -> [!WARNING|style:flat] -> 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 `queryIP`, return `"IPv4"` if IP is a valid IPv4 address, `"IPv6"` if IP is a valid IPv6 address or `"Neither"` if IP is not a correct IP of any type. + +**A valid IPv4** address is an IP in the form `"x1.x2.x3.x4"` where `0 <= xi <= 255` and `xi` **cannot contain** leading zeros. For example, `"192.168.1.1"` and `"192.168.1.0"` are valid IPv4 addresses while `"192.168.01.1"`, `"192.168.1.00"`, and `"192.168@1.1`" are invalid IPv4 addresses. + +**A valid IPv6** address is an IP in the form `"x1:x2:x3:x4:x5:x6:x7:x8"` where: + +- `1 <= xi.length <= 4` +- `xi` is a **hexadecimal string** which may contain digits, lowercase English letter (`'a'` to `'f'`) and upper-case English letters (`'A'` to `'F'`). +- Leading zeros are allowed in `xi`. + +For example, `"2001:0db8:85a3:0000:0000:8a2e:0370:7334"` and `"2001:db8:85a3:0:0:8A2E:0370:7334"` are valid IPv6 addresses, while `"2001:0db8:85a3::8A2E:037j:7334"` and `"02001:0db8:85a3:0000:0000:8a2e:0370:7334"` are invalid IPv6 addresses. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: queryIP = "172.16.254.1" +Output: "IPv4" +Explanation: This is a valid IPv4 address, return "IPv4". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Validate IP Address -```go ``` +Input: queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334" +Output: "IPv6" +Explanation: This is a valid IPv6 address, return "IPv6". +``` + +**Example 3:** +``` +Input: queryIP = "256.256.256.256" +Output: "Neither" +Explanation: This is neither a IPv4 address nor a IPv6 address. +``` ## 结语 diff --git a/leetcode/401-500/0468.Validate-IP-Address/Solution.go b/leetcode/401-500/0468.Validate-IP-Address/Solution.go index d115ccf5e..fee6402e9 100644 --- a/leetcode/401-500/0468.Validate-IP-Address/Solution.go +++ b/leetcode/401-500/0468.Validate-IP-Address/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "regexp" + "strings" +) + +func Solution(IP string) string { + if isIPv4(IP) { + return "IPv4" + } else if isIPv6(IP) { + return "IPv6" + } + return "Neither" +} + +func isIPv4(IP string) bool { + pattern := `^(([1-9]\d{0,2}|0)\.){3}([1-9]\d{0,2}|0)$` + match, _ := regexp.MatchString(pattern, IP) + if !match { + return false + } + + segments := strings.Split(IP, ".") + var num int + for _, segment := range segments { + fmt.Sscanf(segment, "%d", &num) + if num > 255 || (segment[0] == '0' && len(segment) > 1) { + return false + } + } + + return true +} + +func isIPv6(IP string) bool { + pattern := `^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$` + match, _ := regexp.MatchString(pattern, IP) + return match } diff --git a/leetcode/401-500/0468.Validate-IP-Address/Solution_test.go b/leetcode/401-500/0468.Validate-IP-Address/Solution_test.go index 14ff50eb4..a45d2f3ea 100644 --- a/leetcode/401-500/0468.Validate-IP-Address/Solution_test.go +++ b/leetcode/401-500/0468.Validate-IP-Address/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", "172.16.254.1", "IPv4"}, + {"TestCase2", "2001:0db8:85a3:0:0:8A2E:0370:7334", "IPv6"}, + {"TestCase3", "256.256.256.256", "Neither"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b6e5efb4dd90c25285f6f945640003a54fe130e7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 4 Jan 2024 16:50:46 +0800 Subject: [PATCH 091/253] Add solution and test-cases for problem 2870 --- .../README.md | 39 +++++++++++++++++++ .../Solution.go | 26 +++++++++++++ .../Solution_test.go | 39 +++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/README.md create mode 100755 leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/Solution.go create mode 100755 leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/Solution_test.go diff --git a/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/README.md b/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/README.md new file mode 100644 index 000000000..8c66652fe --- /dev/null +++ b/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/README.md @@ -0,0 +1,39 @@ +# [2870.Minimum Number of Operations to Make Array Empty][title] + +## Description +You are given a **0-indexed** array `nums` consisting of positive integers. + +There are two types of operations that you can apply on the array **any** number of times: + +- Choose **two** elements with **equal** values and **delete** them from the array. +- Choose **three** elements with **equal** values and **delete** them from the array. + +Return the **minimum** number of operations required to make the array empty, or `-1` if it is not possible. + +**Example 1:** + +``` +Input: nums = [2,3,3,2,2,4,2,3,4] +Output: 4 +Explanation: We can apply the following operations to make the array empty: +- Apply the first operation on the elements at indices 0 and 3. The resulting array is nums = [3,3,2,4,2,3,4]. +- Apply the first operation on the elements at indices 2 and 4. The resulting array is nums = [3,3,4,3,4]. +- Apply the second operation on the elements at indices 0, 1, and 3. The resulting array is nums = [4,4]. +- Apply the first operation on the elements at indices 0 and 1. The resulting array is nums = []. +It can be shown that we cannot make the array empty in less than 4 operations. +``` + +**Example 2:** + +``` +Input: nums = [2,1,2,2,3,3] +Output: -1 +Explanation: It is impossible to empty the array. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、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/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/Solution.go b/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/Solution.go new file mode 100755 index 000000000..39bf04e6b --- /dev/null +++ b/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/Solution.go @@ -0,0 +1,26 @@ +package Solution + +func Solution(nums []int) int { + arr := make(map[int]int) + for _, n := range nums { + arr[n]++ + } + + ans := 0 + for _, n := range arr { + if n == 1 { + return -1 + } + three := n / 3 + mod := n % 3 + if mod == 1 { + three-- //挪出去一个3,组成3+1 + three += 2 + } + if mod == 2 { + three++ + } + ans += three + } + return ans +} diff --git a/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/Solution_test.go b/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/Solution_test.go new file mode 100755 index 000000000..c7cef1bc8 --- /dev/null +++ b/leetcode/2801-2900/2870.Minimum-Number-of-Operations-to-Make-Array-Empty/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 int + }{ + {"TestCase1", []int{2, 3, 3, 2, 2, 4, 2, 3, 4}, 4}, + {"TestCase2", []int{2, 1, 2, 2, 3, 3}, -1}, + {"TestCase3", []int{14, 12, 14, 14, 12, 14, 14, 12, 12, 12, 12, 14, 14, 12, 14, 14, 14, 12, 12}, 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 e30ece956be8fe0bbc2c9c57a4daf87e5889006f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 5 Jan 2024 22:48:36 +0800 Subject: [PATCH 092/253] Add solution and test-cases for problem 481 --- .../401-500/0481.Magical-String/README.md | 28 ++++++------- .../401-500/0481.Magical-String/Solution.go | 40 ++++++++++++++++++- .../0481.Magical-String/Solution_test.go | 19 +++++---- 3 files changed, 64 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0481.Magical-String/README.md b/leetcode/401-500/0481.Magical-String/README.md index 5c88c34ba..3f96f669f 100644 --- a/leetcode/401-500/0481.Magical-String/README.md +++ b/leetcode/401-500/0481.Magical-String/README.md @@ -1,28 +1,28 @@ # [481.Magical 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 +A magical string `s` consists of only `'1'` and `'2'` and obeys the following rules: + +- The string s is magical because concatenating the number of contiguous occurrences of characters `'1'` and `'2'` generates the string `s` itself. + +The first few elements of `s` is `s = "1221121221221121122……"`. If we group the consecutive `1`'s and `2`'s in `s`, it will be `"1 22 11 2 1 22 1 22 11 2 11 22 ......"` and the occurrences of `1`'s or `2`'s in each group are `"1 2 2 1 1 2 1 2 2 1 2 2 ......"`. You can see that the occurrence sequence is `s` itself. + +Given an integer `n`, return the number of `1`'s in the first `n` number in the magical string `s`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 6 +Output: 3 +Explanation: The first 6 elements of magical string s is "122112" and it contains three 1's, so return 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Magical String -```go ``` - +Input: n = 1 +Output: 1 +``` ## 结语 diff --git a/leetcode/401-500/0481.Magical-String/Solution.go b/leetcode/401-500/0481.Magical-String/Solution.go index d115ccf5e..8cde11aba 100644 --- a/leetcode/401-500/0481.Magical-String/Solution.go +++ b/leetcode/401-500/0481.Magical-String/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + if n <= 3 { + return 1 + } + if n == 4 { + return 2 + } + if n <= 6 { + return 3 + } + ans := 3 + cur := 2 + index := 4 + buf := []byte("122112") + + //1 22 11 2 1 22 1 22 |11 2 11 22 + //1 2 2 1 1 2 1 2 2 1 2 2 + // 122112 1 22 1 22 11 + for len(buf) < n { + cnt := buf[index] - '0' + index++ + if cur == 2 { + for ; cnt > 0 && len(buf) < n; cnt-- { + buf = append(buf, '1') + ans++ + } + cur = 1 + continue + } + if cur == 1 { + for ; cnt > 0 && len(buf) < n; cnt-- { + buf = append(buf, '2') + } + cur = 2 + continue + } + } + return ans } diff --git a/leetcode/401-500/0481.Magical-String/Solution_test.go b/leetcode/401-500/0481.Magical-String/Solution_test.go index 14ff50eb4..8ff2be91a 100644 --- a/leetcode/401-500/0481.Magical-String/Solution_test.go +++ b/leetcode/401-500/0481.Magical-String/Solution_test.go @@ -10,12 +10,17 @@ 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", 6, 3}, + {"TestCase2", 7, 4}, + {"TestCase3", 8, 4}, + {"TestCase4", 9, 4}, + {"TestCase5", 10, 5}, + {"TestCase6", 252, 126}, + {"TestCase7", 1314, 659}, + {"TestCase8", 9987, 4990}, } // 开始测试 @@ -30,10 +35,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5b7a8990b85615b1335d417f0ee0b4e1d0d6f032 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 7 Jan 2024 11:27:04 +0800 Subject: [PATCH 093/253] Add solution and test-cases for problem 677 --- leetcode/601-700/0677.Map-Sum-Pairs/README.md | 37 ++++++---- .../601-700/0677.Map-Sum-Pairs/Solution.go | 74 ++++++++++++++++++- .../0677.Map-Sum-Pairs/Solution_test.go | 14 ++-- 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/leetcode/601-700/0677.Map-Sum-Pairs/README.md b/leetcode/601-700/0677.Map-Sum-Pairs/README.md index dbb513e6b..0dc0444ed 100644 --- a/leetcode/601-700/0677.Map-Sum-Pairs/README.md +++ b/leetcode/601-700/0677.Map-Sum-Pairs/README.md @@ -1,28 +1,33 @@ # [677.Map 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 +Design a map that allows you to do the following: -**Example 1:** +- Maps a string key to a given value. +- Returns the sum of the values that have a key with a prefix equal to a given string. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `MapSum` class: -## 题意 -> ... +- `MapSum()` Initializes the `MapSum` object. +- `void insert(String key, int val)` Inserts the `key-val` pair into the map. If the `key` already existed, the original `key-value` pair will be overridden to the new one. +- `int sum(string prefix)` Returns the sum of all the pairs' value whose `key` starts with the `prefix`. -## 题解 +**Example 1:** -### 思路1 -> ... -Map Sum Pairs -```go ``` - +Input +["MapSum", "insert", "sum", "insert", "sum"] +[[], ["apple", 3], ["ap"], ["app", 2], ["ap"]] +Output +[null, null, 3, null, 5] + +Explanation +MapSum mapSum = new MapSum(); +mapSum.insert("apple", 3); +mapSum.sum("ap"); // return 3 (apple = 3) +mapSum.insert("app", 2); +mapSum.sum("ap"); // return 5 (apple + app = 3 + 2 = 5) +``` ## 结语 diff --git a/leetcode/601-700/0677.Map-Sum-Pairs/Solution.go b/leetcode/601-700/0677.Map-Sum-Pairs/Solution.go index d115ccf5e..8b43df384 100644 --- a/leetcode/601-700/0677.Map-Sum-Pairs/Solution.go +++ b/leetcode/601-700/0677.Map-Sum-Pairs/Solution.go @@ -1,5 +1,75 @@ package Solution -func Solution(x bool) bool { - return x +type trieNode677 struct { + val int + child [26]*trieNode677 +} + +func (this *trieNode677) insert(key string, val int) { + root := this + for _, b := range key { + idx := b - 'a' + if root.child[idx] == nil { + root.child[idx] = &trieNode677{child: [26]*trieNode677{}, val: 0} + } + root.child[idx].val += val + root = root.child[idx] + } +} + +func (this *trieNode677) sum(prefix string) int { + root := this + ans := 0 + for _, b := range prefix { + idx := b - 'a' + if root.child[idx] == nil { + return 0 + } + ans = root.child[idx].val + root = root.child[idx] + } + return ans + +} + +type MapSum struct { + tree *trieNode677 + cache map[string]int +} + +func Constructor677() MapSum { + return MapSum{tree: &trieNode677{child: [26]*trieNode677{}}, cache: make(map[string]int)} +} + +func (this *MapSum) Insert(key string, val int) { + source := val + v, ok := this.cache[key] + if ok { + val -= v + } + this.tree.insert(key, val) + this.cache[key] = source +} + +func (this *MapSum) Sum(prefix string) int { + return this.tree.sum(prefix) +} + +type opt struct { + name string + key string + val int +} + +func Solution(opts []opt) []int { + c := Constructor677() + ans := make([]int, 0) + for _, op := range opts { + if op.name == "i" { + c.Insert(op.key, op.val) + continue + } + ans = append(ans, c.Sum(op.key)) + } + return ans } diff --git a/leetcode/601-700/0677.Map-Sum-Pairs/Solution_test.go b/leetcode/601-700/0677.Map-Sum-Pairs/Solution_test.go index 14ff50eb4..9a4903fbc 100644 --- a/leetcode/601-700/0677.Map-Sum-Pairs/Solution_test.go +++ b/leetcode/601-700/0677.Map-Sum-Pairs/Solution_test.go @@ -10,12 +10,12 @@ 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{{"i", "apple", 3}, {"", "ap", 0}, {"i", "app", 2}, {"", "ap", 0}}, []int{3, 5}}, + {"TestCase2", []opt{{"i", "apple", 3}, {"", "ap", 0}, {"i", "app", 2}, {"i", "apple", 2}, {"", "ap", 0}}, []int{3, 4}}, + {"TestCase3", []opt{{"i", "apple", 3}, {"", "app", 0}, {"i", "app", 2}, {"", "ap", 0}, {"i", "apple", 5}, {"i", "apple", 1}, {"", "apple", 0}}, []int{3, 5, 1}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 17059edb16b8ac705b0cc36109a222a6478da8a9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 8 Jan 2024 21:37:24 +0800 Subject: [PATCH 094/253] Add solution and test-cases for problem 648 --- leetcode/601-700/0648.Replace-Words/README.md | 25 ++++---- .../601-700/0648.Replace-Words/Solution.go | 62 ++++++++++++++++++- .../0648.Replace-Words/Solution_test.go | 22 +++---- 3 files changed, 82 insertions(+), 27 deletions(-) diff --git a/leetcode/601-700/0648.Replace-Words/README.md b/leetcode/601-700/0648.Replace-Words/README.md index bb1127e91..b92ae67e7 100644 --- a/leetcode/601-700/0648.Replace-Words/README.md +++ b/leetcode/601-700/0648.Replace-Words/README.md @@ -1,28 +1,25 @@ # [648.Replace 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 +In English, we have a concept called **root**, which can be followed by some other word to form another longer word - let's call this word **successor**. For example, when the **root** `"an"` is followed by the **successor** word `"other"`, we can form a new word `"another"`. + +Given a `dictionary` consisting of many **roots** and a `sentence` consisting of words separated by spaces, replace all the **successors** in the sentence with the **root** forming it. If a **successor** can be replaced by more than one **root**, replace it with the **root** that has **the shortest length**. + +Return the `sentence` after the replacement. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery" +Output: "the cat was rat by the bat" ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Replace Words -```go ``` - +Input: dictionary = ["a","b","c"], sentence = "aadsfasf absbs bbab cadsfafs" +Output: "a a b c" +``` ## 结语 diff --git a/leetcode/601-700/0648.Replace-Words/Solution.go b/leetcode/601-700/0648.Replace-Words/Solution.go index d115ccf5e..950636f4e 100644 --- a/leetcode/601-700/0648.Replace-Words/Solution.go +++ b/leetcode/601-700/0648.Replace-Words/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +type trieNode648 struct { + child [26]*trieNode648 + end bool +} + +func (t *trieNode648) insert(word string) { + root := t + for i, b := range word { + idx := b - 'a' + if root.child[idx] == nil { + root.child[idx] = &trieNode648{child: [26]*trieNode648{}, end: false} + } + if i == len(word)-1 { + root.child[idx].end = true + } + root = root.child[idx] + } +} + +func (t *trieNode648) search(word string) int { + idx := 0 + root := t + for _, b := range word { + ix := b - 'a' + idx++ + if root.child[ix] == nil { + return -1 + } + if root.child[ix].end { + return idx + } + root = root.child[ix] + } + return -1 +} + +func Solution(dictionary []string, sentence string) string { + + t := &trieNode648{child: [26]*trieNode648{}, end: false} + for _, root := range dictionary { + t.insert(root) + } + sb := strings.Builder{} + + words := strings.Split(sentence, " ") + + for idx, word := range words { + i := t.search(word) + if i == -1 { + sb.WriteString(word) + } else { + sb.WriteString(word[:i]) + } + if idx != len(words)-1 { + sb.WriteByte(' ') + } + } + return sb.String() } diff --git a/leetcode/601-700/0648.Replace-Words/Solution_test.go b/leetcode/601-700/0648.Replace-Words/Solution_test.go index 14ff50eb4..9e868efe3 100644 --- a/leetcode/601-700/0648.Replace-Words/Solution_test.go +++ b/leetcode/601-700/0648.Replace-Words/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + dic []string + sentence string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"cat", "bat", "rat"}, "the cattle was rattled by the battery", "the cat was rat by the bat"}, + {"TestCase2", []string{"a", "b", "c"}, "aadsfasf absbs bbab cadsfafs", "a a b c"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.dic, c.sentence) 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.dic, c.sentence) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2772e9c2f794d8d4982e29066500d1f592a0a4a2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 9 Jan 2024 22:46:06 +0800 Subject: [PATCH 095/253] Add solution and test-cases for problem 811 --- .../0811.Subdomain-Visit-Count/README.md | 31 ++++++++++--------- .../0811.Subdomain-Visit-Count/Solution.go | 25 +++++++++++++-- .../Solution_test.go | 15 ++++----- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/leetcode/801-900/0811.Subdomain-Visit-Count/README.md b/leetcode/801-900/0811.Subdomain-Visit-Count/README.md index a02fe1cda..ecfe6236b 100644 --- a/leetcode/801-900/0811.Subdomain-Visit-Count/README.md +++ b/leetcode/801-900/0811.Subdomain-Visit-Count/README.md @@ -1,28 +1,31 @@ # [811.Subdomain Visit Count][title] -> [!WARNING|style:flat] -> 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 website domain `"discuss.leetcode.com"` consists of various subdomains. At the top level, we have `"com"`, at the next level, we have `"leetcode.com"` and at the lowest level, `"discuss.leetcode.com"`. When we visit a domain like `"discuss.leetcode.com"`, we will also visit the parent domains `"leetcode.com"` and `"com"` implicitly. + +A **count-paired domain** is a domain that has one of the two formats `"rep d1.d2.d3"` or `"rep d1.d2"` where `rep` is the number of visits to the domain and `d1.d2.d3` is the domain itself. + +- For example, `"9001 discuss.leetcode.com"` is a **count-paired domain** that indicates that `discuss.leetcode.com` was visited `9001` times. + +Given an array of **count-paired domains** `cpdomains`, return an array of the **count-paired domains** of each subdomain in the input. You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: cpdomains = ["9001 discuss.leetcode.com"] +Output: ["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"] +Explanation: We only have one website domain: "discuss.leetcode.com". +As discussed above, the subdomain "leetcode.com" and "com" will also be visited. So they will all be visited 9001 times. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Subdomain Visit Count -```go ``` - +Input: cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"] +Output: ["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"] +Explanation: We will visit "google.mail.com" 900 times, "yahoo.com" 50 times, "intel.mail.com" once and "wiki.org" 5 times. +For the subdomains, we will visit "mail.com" 900 + 1 = 901 times, "com" 900 + 50 + 1 = 951 times, and "org" 5 times. +``` ## 结语 diff --git a/leetcode/801-900/0811.Subdomain-Visit-Count/Solution.go b/leetcode/801-900/0811.Subdomain-Visit-Count/Solution.go index d115ccf5e..fa4748c97 100644 --- a/leetcode/801-900/0811.Subdomain-Visit-Count/Solution.go +++ b/leetcode/801-900/0811.Subdomain-Visit-Count/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(cpdomains []string) []string { + domains := make(map[string]int) + var ( + rep int + domain string + ) + for _, cnt := range cpdomains { + fmt.Sscanf(cnt, "%d %s", &rep, &domain) + domains[domain] += rep + for idx := len(domain) - 1; idx >= 0; idx-- { + if domain[idx] == '.' { + x := domain[idx+1:] + domains[x] += rep + } + } + } + ans := make([]string, 0) + for domain, cnt := range domains { + ans = append(ans, fmt.Sprintf("%d %s", cnt, domain)) + } + return ans } diff --git a/leetcode/801-900/0811.Subdomain-Visit-Count/Solution_test.go b/leetcode/801-900/0811.Subdomain-Visit-Count/Solution_test.go index 14ff50eb4..fad146ea0 100644 --- a/leetcode/801-900/0811.Subdomain-Visit-Count/Solution_test.go +++ b/leetcode/801-900/0811.Subdomain-Visit-Count/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,18 @@ 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{"9001 discuss.leetcode.com"}, []string{"9001 com", "9001 discuss.leetcode.com", "9001 leetcode.com"}}, + {"TestCase2", []string{"900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"}, []string{"1 intel.mail.com", "5 org", "5 wiki.org", "50 yahoo.com", "900 google.mail.com", "901 mail.com", "951 com"}}, } // 开始测试 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 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2de9020e434e9d1db828e99501c38a67fed385f0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 10 Jan 2024 21:41:22 +0800 Subject: [PATCH 096/253] Add solution and test-cases for problem 2685 --- .../README.md | 37 ++++++++++++ .../Solution.go | 57 +++++++++++++++++- .../Solution_test.go | 24 +++++--- .../screenshot-from-2023-04-11-23-31-23.png | Bin 0 -> 15399 bytes .../screenshot-from-2023-04-11-23-32-00.png | Bin 0 -> 17460 bytes 5 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/README.md create mode 100644 leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/screenshot-from-2023-04-11-23-31-23.png create mode 100644 leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/screenshot-from-2023-04-11-23-32-00.png diff --git a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/README.md b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/README.md new file mode 100644 index 000000000..4e42ca157 --- /dev/null +++ b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/README.md @@ -0,0 +1,37 @@ +# [2685. Count the Number of Complete Components][title] + +## Description +You are given an integer `n`. There is an **undirected** graph with `n` vertices, numbered from `0` to `n - 1`. You are given a 2D integer array `edges` where `edges[i] = [ai, bi]` denotes that there exists an **undirected** edge connecting vertices ai and bi. + +Return the number of **complete connected components** of the graph. + +A **connected component** is a subgraph of a graph in which there exists a path between any two vertices, and no vertex of the subgraph shares an edge with a vertex outside of the subgraph. + +A connected component is said to be **complete** if there exists an edge between every pair of its vertices. + +**Example 1:** + +![1](./screenshot-from-2023-04-11-23-31-23.png) + +``` +Input: n = 6, edges = [[0,1],[0,2],[1,2],[3,4]] +Output: 3 +Explanation: From the picture above, one can see that all of the components of this graph are complete. +``` + +**Example 2:** + +![2](./screenshot-from-2023-04-11-23-32-00.png) + +``` +Input: n = 6, edges = [[0,1],[0,2],[1,2],[3,4],[3,5]] +Output: 1 +Explanation: The component containing vertices 0, 1, and 2 is complete since there is an edge between every pair of two vertices. On the other hand, the component containing vertices 3, 4, and 5 is not complete since there is no edge between vertices 4 and 5. Thus, the number of complete components in this graph is 1. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-complete-components +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go index d115ccf5e..c11a62671 100755 --- a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go +++ b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go @@ -1,5 +1,58 @@ package Solution -func Solution(x bool) bool { - return x +type unionFind2685 struct { + father []int +} + +func (u *unionFind2685) find(x int) int { + if u.father[x] != x { + u.father[x] = u.find(u.father[x]) + } + return u.father[x] +} +func (u *unionFind2685) union(x, y int) { + fx := u.find(x) + fy := u.find(y) + if fx < fy { + u.father[fy] = fx + } else { + u.father[fx] = fy + } +} + +func Solution(n int, edges [][]int) int { + in := make([]int, n) + for _, e := range edges { + in[e[0]]++ + in[e[1]]++ + } + u := &unionFind2685{father: make([]int, n)} + for i := 0; i < n; i++ { + u.father[i] = i + } + for _, e := range edges { + u.union(e[0], e[1]) + } + + ans := 0 + groupMembers := make([]int, n) + for i := 0; i < n; i++ { + f := u.find(i) + groupMembers[f]++ + } + for i := 0; i < n; i++ { + f := u.find(i) + if groupMembers[f] == -1 { + continue + } + if in[i] != groupMembers[f]-1 { + groupMembers[f] = -1 + } + } + for i := 0; i < n; i++ { + if groupMembers[i] > 0 { + ans++ + } + } + return ans } diff --git a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution_test.go b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution_test.go index 14ff50eb4..ca78c52b3 100755 --- a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution_test.go +++ b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution_test.go @@ -10,30 +10,34 @@ 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", 6, [][]int{ + {0, 1}, {0, 2}, {1, 2}, {3, 4}, + }, 3}, + {"TestCase2", 6, [][]int{ + {0, 1}, {0, 2}, {1, 2}, {3, 4}, {3, 5}, + }, 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() { } diff --git a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/screenshot-from-2023-04-11-23-31-23.png b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/screenshot-from-2023-04-11-23-31-23.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ce331abe8f86f95fac5ce075765acbab31245a GIT binary patch literal 15399 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 literal 0 HcmV?d00001 diff --git a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/screenshot-from-2023-04-11-23-32-00.png b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/screenshot-from-2023-04-11-23-32-00.png new file mode 100644 index 0000000000000000000000000000000000000000..dec702a8ca36eaf6b07af25b9a41ed2356cdbc82 GIT binary patch literal 17460 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 Date: Thu, 11 Jan 2024 22:11:08 +0800 Subject: [PATCH 097/253] Add solution and test-cases for problem 784 --- .../0784.Letter-Case-Permutation/README.md | 23 ++++++-------- .../0784.Letter-Case-Permutation/Solution.go | 30 +++++++++++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/leetcode/701-800/0784.Letter-Case-Permutation/README.md b/leetcode/701-800/0784.Letter-Case-Permutation/README.md index 39e503595..5504f0320 100644 --- a/leetcode/701-800/0784.Letter-Case-Permutation/README.md +++ b/leetcode/701-800/0784.Letter-Case-Permutation/README.md @@ -1,28 +1,23 @@ # [784.Letter Case 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 +Given a string `s`, you can transform every letter individually to be lowercase or uppercase to create another string. + +Return a list of all possible strings we could create. Return the output in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "a1b2" +Output: ["a1b2","a1B2","A1b2","A1B2"] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Letter Case Permutation -```go ``` - +Input: s = "3z4" +Output: ["3z4","3Z4"] +``` ## 结语 diff --git a/leetcode/701-800/0784.Letter-Case-Permutation/Solution.go b/leetcode/701-800/0784.Letter-Case-Permutation/Solution.go index d115ccf5e..9700d94aa 100644 --- a/leetcode/701-800/0784.Letter-Case-Permutation/Solution.go +++ b/leetcode/701-800/0784.Letter-Case-Permutation/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) []string { + bs := []byte(s) + ans := make([]string, 0) + help(bs, 0, &ans) + return ans +} + +func help(bs []byte, index int, ans *[]string) { + if index == len(bs) { + *ans = append(*ans, string(bs)) + return + } + // diff = 32 + if bs[index] >= '0' && bs[index] <= '9' { + help(bs, index+1, ans) + return + } + source := bs[index] + help(bs, index+1, ans) + + if bs[index] >= 'a' && bs[index] <= 'z' { + bs[index] = bs[index] - 32 + } else if bs[index] >= 'A' && bs[index] <= 'Z' { + bs[index] = bs[index] + 32 + } + help(bs, index+1, ans) + bs[index] = source + } diff --git a/leetcode/701-800/0784.Letter-Case-Permutation/Solution_test.go b/leetcode/701-800/0784.Letter-Case-Permutation/Solution_test.go index 14ff50eb4..b839c7d01 100644 --- a/leetcode/701-800/0784.Letter-Case-Permutation/Solution_test.go +++ b/leetcode/701-800/0784.Letter-Case-Permutation/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", "a1b2", []string{"a1b2", "a1B2", "A1b2", "A1B2"}}, + {"TestCase2", "3z4", []string{"3z4", "3Z4"}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 775adbaa6e5de16bb88207de618dd66e9250103c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 11 Jan 2024 23:54:27 +0800 Subject: [PATCH 098/253] Add solution and test-cases for problem 856 --- .../0856.Score-of-Parentheses/README.md | 32 +++++++++++-------- .../0856.Score-of-Parentheses/Solution.go | 28 ++++++++++++++-- .../Solution_test.go | 15 +++++---- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0856.Score-of-Parentheses/README.md b/leetcode/801-900/0856.Score-of-Parentheses/README.md index b06ea88f2..f42a2d306 100644 --- a/leetcode/801-900/0856.Score-of-Parentheses/README.md +++ b/leetcode/801-900/0856.Score-of-Parentheses/README.md @@ -1,28 +1,34 @@ # [856.Score 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 +Given a balanced parentheses string `s` return the **score** of the string. + +The **score** of a balanced parentheses string is based on the following rule: + +- `"()"` has score `1`. +- `AB` has score `A + B`, where `A` and `B` are balanced parentheses strings. +- `(A)` has score `2 * A`, where `A` is a balanced parentheses string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "()" +Output: 1 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Score of Parentheses -```go ``` +Input: s = "(())" +Output: 2 +``` + +**Example 3:** +``` +Input: s = "()()" +Output: 2 +``` ## 结语 diff --git a/leetcode/801-900/0856.Score-of-Parentheses/Solution.go b/leetcode/801-900/0856.Score-of-Parentheses/Solution.go index d115ccf5e..1d25da051 100644 --- a/leetcode/801-900/0856.Score-of-Parentheses/Solution.go +++ b/leetcode/801-900/0856.Score-of-Parentheses/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + a := make([]int, len(s)) + at := 0 + ans := 0 + // () ( () ) + // 1 0 1 + for i := 1; i < len(s); i++ { + if s[i] == '(' { + at++ + a[at] = 0 + continue + } + if a[at] == 0 { + a[at] = 1 + continue + } + tmp := 0 + for ; at != 0 && a[at] != 0; at-- { + tmp += a[at] + } + a[at] = tmp * 2 + } + for i := 0; i <= at; i++ { + ans += a[i] + } + return ans } diff --git a/leetcode/801-900/0856.Score-of-Parentheses/Solution_test.go b/leetcode/801-900/0856.Score-of-Parentheses/Solution_test.go index 14ff50eb4..100c24d3c 100644 --- a/leetcode/801-900/0856.Score-of-Parentheses/Solution_test.go +++ b/leetcode/801-900/0856.Score-of-Parentheses/Solution_test.go @@ -10,12 +10,13 @@ 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", "()(())", 3}, + {"TestCase2", "()", 1}, + {"TestCase3", "(())", 2}, + {"TestCase4", "()()", 2}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cd77dc02f9b809571c3cde9e9e3aa81ee1b0305e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 12 Jan 2024 22:50:06 +0800 Subject: [PATCH 099/253] Add solution and test-cases for problem 833 --- .../833-ex1.png | Bin 0 -> 22059 bytes .../833-ex2-1.png | Bin 0 -> 20379 bytes .../0833.Find-And-Replace-in-String/README.md | 47 ++++++++++----- .../Solution.go | 57 +++++++++++++++++- .../Solution_test.go | 24 ++++---- 5 files changed, 101 insertions(+), 27 deletions(-) create mode 100644 leetcode/801-900/0833.Find-And-Replace-in-String/833-ex1.png create mode 100644 leetcode/801-900/0833.Find-And-Replace-in-String/833-ex2-1.png diff --git a/leetcode/801-900/0833.Find-And-Replace-in-String/833-ex1.png b/leetcode/801-900/0833.Find-And-Replace-in-String/833-ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..986a9a7f64e1b9ff8139fe21b55c36365db0e85d GIT binary patch literal 22059 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%0A!?Pxcqv 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 Ks#mGnJ^dHJ<@Wdh literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0833.Find-And-Replace-in-String/833-ex2-1.png b/leetcode/801-900/0833.Find-And-Replace-in-String/833-ex2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7eda6ca2363111dfd2dc2c6b494081801c283a77 GIT binary patch literal 20379 zcmdSAWmr^Q_&!Q1Al=fE(lrbW(hWm*$4~WX+cR5&OoD0s?Ba@r^;s9C`M4b~&z z+D;82M?ranK*}2;oqg>b5Vj~Rg0lbKu?X|J!U^q?P@@Po>qAJq%s-{q5ECw0&)jVZsm( zgMafN{oHK-&13KCYL5Ua6<`sR2L|)MQ3J|%_-~y2psoroKGq`AKGyvDast|#`Uc+r zW*0Vwt6K|s`p7E-1EwHnZ3EI$@-cF>7gBL{QWJI(aMFMofuJyXX$(8q#~^3&M)mDC?sd?s%ONn%I~0~=!&$}R^u}gGO#mL za8T4U)>id%0qOd>2nd1&Rrp}So?sy#X$MWXrl$&@hb9OZ9f$|NjUCL%+ZE{~tE;cZ z@8xXkp(*d>p{C;i*Hwb4duaTJCG0 zA*A99bFvYV^@BKp9r)ydAG+BH0!h*cS6!%(HyGq7@9HV-EUTm{i!e5J(tzmeAd$A7 zK72yT##%~Hn3a{FjEsVejlGVoDoEGRMn~GsQN~k1z>iM}YJhOj^Vd@}a?_XAv$xU{ z5YTXtw$)ehM(X-{gYBVqnpU=23ibvLsv^J^Q}DNuR<#z9u>yhBROE$Z;9whBLAZ;Y zrVqcGx4*Q3k}k*|Y!CBy646$NIB7UT{B>3AMEGQMyj^`Ens$1?=1|abwpMj>^wc!= zH*gUFI-%|)r)XrX57zZnH*)mwR^Wqs`}4{3Imp;JiRh`?+JFrmp*kR_ytjd)jSt)x zD(wOk0)_EGJOzDWNNwOBCubFen=%sERWeY79?0F(SVP?(>gyor?g|!0SlL4D<@to% zJY2Q;t&w)RuFej|5H~&}M{f@gZ6}DPt(G2GUeHfl%L8TrH&F6a0C_6fcst8^Xez7P zsvA2xYD&x7xB{nxjiM^j8!qRrB&>KRyR`1{Dh?H%=j zX7DRIdLit98+#okO$`@W11otAeg!@&MJU`42GbL9u+an=z*Su}6yefV-tvyXuJPkn zSNGBo1RDxzdC7Td05h*3W2*xcp#gk^9c=8O_QKjo;J}kHQnq&h4kQ@?Z6TO|4xa|h z&=aQO=x+^Cbk`IyfU5~ZK(cUI4TzQy(ow_7-&;ph)g7w)P?VmlypNTki?fERyQU^w zR>qLu2RNM_{Y9j0ysTg@)vxC`AN$m zG?ZODAwEuEO&?!*2*^>`Q^Ct#!3}H;)S=+2WDK!a7j{tcQGxgmX@EhnWc{mvQ zK;%F`x|+YQygZ+PKSToz(RKqK2!aJXfG-hg;NSzk|L5%c=O6_B|L?^jC?AHWpofCO zfTAoXt?O%knDbayPjNQFLW)#VxA*;=CV%QGrPDV<>l!7{`O2t0c5^x$CfrY@JjvTU zzQXx=MaU849j9g8V@^cK&iJM4e76HaGj@2lBJR{m+@fhIg zW$ngD55dH4shcxQ5j$)CRZH6`#0}H3i|)^l+ceD z+oM^LizlIPrEwzK`ZMb+9Z^Y_n(k^g<1$= z5)yvouI4k956I0yqHpiDdOj@M*7?QW?9WudS3AYW@+51t5XiW4y~kr?)Yf%%r>L;g z?8xq1@qmfvG>f=f?lNLW<~|2}`mZ9@L@dzEatc1a~pXx}#X(PIL- zsNWFZ|NI%a&HIp8 zl7NyArNM6WRa#n_zu2ZV$6qw7nb3yQenZ4TV91=<&NH{IuVjr*v-lLe=A=2=#*E24 z!_N)1^%XI0Mr62P6&4juHaQs}7MtLwS6Pc8m zg7J$$GR$JJd2sn7uh{AKjL}C>PgbL_$o-{As)b2>$Hm3E`K@@n|EY@2(0URkss!r$ zTXS0w`y9q7jxdSjPnC;}UmG``tJcs>axqoksBewBo2NsO=Y0#-GF#Y#Nsz~XmKzG1 zbzvlggdtH;So{G=rNza}xbzY^c z-=01Mhu)jt52mtHyL7d4*E>8hC`vHPRtyG?v+IWSY}M{+toOYUspGc`jndU)InuDV z>;^pD%e0_V<#spJi_U8t_nV6fXWn|m)7v)h87RU7<8cp@lfIZm!=rh}8JTXFc z5WyWeRgX96L#mJ$m_Ft!%JyWjac6W6759b)XN=le5a$PBe1gv=&wf8A zC68FTyZ+3r!zzEX1xxkm#Ujm?5bs$Tt$fnJw| z=`HJx6}?W`e|^=oV^7GUht6#5e9_pqJvh2E#@P z9Ph7r89-{(sPuD$T}Xm130Oq_hl{m$5Lp>bn=23B%j*x)ll6v!M}!Bh9~E!o&(+Vt ztFb5dTWYT$zenWWybx0Vww5zQy_kuRUB2~d`tA@VoT=RJzJ>&r?q#SYn!0*7Y274? zDhEqoaNOHnCt#jK?Pll2T9;*TNz)=V=y( zewzJnEMST}3%R?hv)`b-^4jv@8?)N>Bah^{4yB+_yBArZG#JnK+L-%c*2LaLPa5VZ z}w{>BGFLK|9#%?n7}V;329zmtRQ`(2DIdDgBpaK zdeLo1KOp24LKgn6-UR1#^QxnwN7_Q7N&BOICDbC1}_kQ z%uc4j&0-Dim27!^{dN7ZRkmoaq`u5Iw0tkdhI?=56=KA=u2%DNgp~AcpWWTGtQ2Ar zkL8dwZ&3^3V0PZ{596B~X(L2=@@|UwH>+H7=kdW;?#L`myT!|U}8ikg4 zCe?SmAHK;-W>d$HO;2Hm*8GgHDGuvy8~*#a0RZ{jYI*n(|?&tUYPfg(!Ns5H|Ul&N7UWYeP#K1=uh+83SUCQJ{XvNAw?{$(x zw64Mp$YFzZ&-T!~>gNo9jfeL2`&YKIuv&uAezU3nFz$))C81#3AJJ}a5!uV@u#zSE z_{L7~ckq4mfS^62_hK{h&<-D0ZlYA}xLi}Z7gTgR#q4FRf0w&YKq*cIk&%&G62y6T z3LB?eq7}fXskShPHLpASnbhHK9e1Z26PL;f<-z3;R0>OHPwhw-EtL9G0XL0red8tk z-KwVwZ`a_H#Ulc+UkjCEi*f-g){O`*i$^L7cN1*@5|?C5wRm)09f_& zbjmqob#uFNy-(9a?uZ!pTLs-13RAfz9cZ|nwGzi#&>trT-Z(c}>uKX~Gm%k`qhW?I zOs*tWlk$0Uq4mF+r2HQ7m74l2CC9y{a3xM)@7PSVw1m@Sf&6bL4OC{VWEl&)KR;x zV4nD0$8rN3d`Ojj64UvrOjSDf^Xn#@xW>wYi+N4Lv2wlA^Yukv7`h2)5|2 zg-W3kJs%>Y=NxD+yf$wTmDk0c&TsnqA5F9>vs&_?k$ORnen^YuyfC;;D||E|Z^um7 z8gQX-etkBRl*#_JJ2@}tOL8q=v7G!flhI7Z?ox}N-}h3dbYUAAl9DT{b+SwS%D=}8 zXRCUqF`p#5?Wd$4`o7}`&#p3F>j=90^9faV#XfUu;wq~(Z5#IY^< z$6VLH=532VL$MN;N5CERy+Sm-8Nbvl)`Skzm znv!?yKUkqa2$+*-R1{VZS@}?VuxjTh`(r%?{{TqX|pgk@Byt9bf-IPg&}s&sYf!!QmdIBn$L*H`lP=8f{55SFHE!xg*V+BMh!o~foWGGX21BctN!HvTG`;(qr*Yy+zKCPs(@f8RL~1IFV&vli|hxY& zeOggnBLlpu>$>`a+UkZU@vQ3H{}9>S=nKO4u zZH>Nj=RT)WNTrT;&?|$$gb&8-$f?_?iNS+2SnYFd6th%d(&aHp;Iv^?brZtyo?X2o zI4`>Ye*LBT4DWl9S{>NizNqMFFKh$O)PF8Y78)jK-)od9%+Eh42q(n3yKT@p8&7&6 zcz6p6e7Wv)8E_SQm(`63jbEb8TCDy!S6o`U4xrAtCMODf8j+CGo$-zH!^J{$7HFzm zI1brFzBD?<Fhza5)yD}8_R7XkcW|F#wa2{aZMr`D zy}zw?>2(kVtI+3XdBHScr$LQqZz58|5&9fo`r=?jbU;9{Y%Xz-1_0mFrD`NHMVwdH z*RbvoR7#0Jk(Fr=tWiDlFV#~TX5*N_xw%q~rZm;xDm$`XM$Kzo-b8&kb3+W6bt z=u=_98vUFeW6f80BKM+kieGh#0}KGQbOBqOQuUn7YT=m=da?jw{PF7-Z&2{ni7kzo zucr8P!RpL=Ep*AdKO`LbmG70l{9E0C@6zGGSEo4Y4FG5!U+ppxMfCT~&IY})hE5U9 zx%)iMJcP3bU6^dF64FqPguP+N*Fxk<2FKTQ-BUdw=OUb$dSlxgMYOy4krxdOO@Ifx z-9Nk|;9@nNco^&71I|>QH0!^dV13K6*{MP?aQ!nr0eGs)PYF;L^dym5~lNV6eNBHp1ag9&zC(1*O+$@7xFuO=d$8E9J;;! zS@T|}41Z~9snPqD9Yj3fyf>PJO|G-qc@ehK?st583N;w}w})*3^@rc`U!Xr;-&<-u zK0YN8q{_n~JNTvzhN?688t^r*ti&WTKAW3@$1>&*wkVPQ=KgX_iuF8Z6hPjSrE1g@ z0>+k>45>V39AOHpjlq9|fX-kN&`XfYgI$)QzE_z5+qjM?taChqbEi$x4wp_Xmy58y z%ZImqHu$IU@DM-NQbHH+xhox;ME_<2>qZuiE0g$pV$74`Z$)wh1G|auszw;VlarIX zt6h@cYbBNtRdAk^#zE|#xnr=~dRs7NU z71{kY5#kFGgoVcE^&J-`#LNCj@mfF zX{m+ZakiR!KM^N&3M#_Efm2~n)1S(1a=eolj6*$G^2ufS)9!Q`fyz6M63?dzxGV&s z#{DJ@c6dR5?|ibw1N7%KyppVC0jEiC(A!S5%(rhD_f0;!AL)##OKYtbuHVL4kW0FYqnhbxvgPCBKca8U<;VY~ zEm~KQw&Jt;lFb~M^2z%!2I9FLm6q3<{D-9-F)!d75U{c6+C^sXmqI)*)xhFWUfP~X z+)=s5qQ>j$TrM9=p3ZL_LCEI}tSQe|1Hd9^+Wt9Hk!G33YjGVXYX*}Y@i|(G{(HM4 z$pzXD8mu(U+rQ5^nVdWx%+P71YxCl)e%y6t&cSDka}q~oYg^F*ffB+SJBZGg7GHZy zAM(|F7t@_HME!7=X+rC2RHz(TBbYNcp$hxa9ctJa*t$#E@q9>2DorPZpR}0Q%A=$c zx%W1GC{a-6?)prt#m(yX$#Un*0MWGl+FHKA-+dG@;JdR~3)rJ#4|Rsn!cP*{yG&M$ z*aMv}Z=`a)Q{Z43m~pu_OCQg~RUxqKD;CpceNHx&wdm*7*qNE-L}WKdvkc7gz;(|G z3efABbw51CYt0P4zuFNi;@>W)chB&Ic&@7%4pw`a2l4@YCgZEi{z(z!VHb2``+B+yV=8*|^<#ow= zHzmAQj+_S7rm)h z@wzQIaTwNGehSpcljs9HNc^7Ls=sdlkEk`^`+RE0oRpOGWhgY2j6KPW8ACqi_NRjk z%zghGJ1(7=A-7vfq@5+*uj*ejtYB?^rf1d#?n{zt#u7JWE@qRcc_&+1$TP=Vof{)v|RR8Bf;xbwJ&e(Ge_Dg8|LUmfbxOr9GIk2okZO6j~&N~I*Jp7uo}=ua4sRYn;dk(O5K zbVr9s-jPa+rXu59-$9LIyIbFTVkO{GKy8zFncR;9@Y89%;4bL-;r}g1wA#ol277# zZad(hKfg}4k}i+<8aR>-G6bIc9Ww|x_*T<)%~nsN8}mGAqh!7BV;yij6tUo}dNaV& zYX>-r*Gnpm{j~+&g+(mYzUx)kmoBT(kwqXX4ZWFMU&KTa5)l=wv_W28H)1_kVJwAW zdEK=F!%agBw|H~@&Jd2A^n5eU4m*X+7uc3>HC8GJX45=-28)hM-XNY(M9wjdV$~(_ z8f2UjC3S|ei=yTnPNwQto3fv4ru0U%&%?pe(W!Sz3}WKqP2VrB&z$%@wGM~EA|s1z zhf@nj0Ozpu(MSqhIo`CTqrLsjerIFe=7Q>BISnOzHTv4NyhNo4cU$HW2}9Zr0L;Bo zPY09G@5TM2h9^ZJU{tfh^JPYtB!N zX-I%)oe~jqSKFfUjO+{->#xLTgIvEYk?LqmoUOaHipKr+jItQ0*QshdV$UZZiMC?y z3?}vbD2qOqQ)<~|Y|@ap!a%072Am)4`y*++Q-t6D8tK<{&-X4F_9*?%cF2Z}hwWFU zp3_T5bjVx2K0diZ1fg*A;6lUR8C$DoPPZFNB;@w|b zi#TWN?51<*eW1MkrrDCAA$g}u`zHBS065TRTvX3ay)FrdS)L&O#z(+@3{gA!0ZrRV za3^;Z;6k|0L!MWv!C-}MU8U*nDIoa)@Fx<}2@Z_s+w&W>e9!n=1OEIldZYK=lPO+_ zp=Tsw$@eiHRT#^!^%qY`qLN|JlPA=)+Qo9S^3w=ue}Z^OpWS$_IQ-kLvy@m#GcIlV z#y~>sHT-))jWE?&0)FmPfrf`oeox^ixp&pp!1srnU|-1SL{k0BAe_#jVVh?9$IadM z*oK=isD9~bSEoBqgst~h5+HpMG943B-+=QD!@YzPZ&OzKu{`@%6u%NJ-;CcI1F@Qr zl;Rz4C5FAF_& zyU2DPdsO2HogAiuQjniXh7MwPf-StXK$P8~?OBRMSq4R`;Ivw?O2ach3{+7*6{zKu zI2*e{dCOOO{ZH3d>wQm%jw0+7Qjkr31bh$BvzrJT-cEiEG;00e$xCRNT-IXasubJS zyXx@LG*)Mi=?KwL5VGTsS4Y?uUlRmN(>w-4N)Th_DY^!=DNg>A_k{KP0*;;#78aq~^VdMStm*&7+_Z1>Q&_gHXJ z>aS8zwZ^sTPfBWfQDVcp=9Iy~!OU!Iv2FHnY$%x;@VXt&<eZ*- zh!Z-AKuX{p3H4D!UFI`xuv2@+p`ukhlo8UtodSD1l!nf3`24Uhg5>7uke zP+dd}-q!5J{ZnH6%;gDl?Nlx!khgN)b>nhVk*nmEpmL@%k*C^cxtv4k&3l09`>}+9 zjEVbj!z|h;C(kpoStU=W`ym6@xpJC2omAt^IoB>CuDbXa)KD)$LXcX|d~Y-p^pi1w zUCWnpVf>kfV7(swi*gzW%0y*!H8`Ik^TU%Bc!Z)L?TJLur+4QKxO-(Fe^65eH*qsh z=h)@d&zlSP4*4e&^W-WS=;*)i<7tmM%#4?pTVCEAYrKB6pLe(Lkz(y`nZ@9(Nv7J= z)^N-B#`5cY`{>t?rL{0dl4!z1A=i#oqSbxovN=(rzUjxBpbREYeD^KS88N*X)(0Ou z;EK`xYs#%5bbx5q+4PFA!F%K%8z+deB_RS1O|c&jo9oRJDKJ9d(|(c6yA4QFs#eb- zY_UXLdKp;x-47ZQSHxFKg%AWGCGRCZL>dg_r1^kiM*B^uCjoTj}8~GG_Ec?IUz@>MT57VZ`%LVR!eag9S4FU)lQg00;q)Zt0V?Jl{Ry>gme$BQvdz zmS>*V$nMe6iS0LIuF7@pq>mJO8l*q()Z`X@ZhjHMayqaf zIbown(ykQrENHgWkh;>T7T=|I#nV<9^xYD0y9^O+ei~I_5PF9C@#ehmRIfs=W8U$b z)P!r-Go5PFeeX@)>p+W_;b=N#nKSri?~Jq&z##G{od1DfD>dYdy8W44H1UhQChwa} zEW$d**39x-AHoK$tQfvbQ@hDOH`ED^6Zh(2HmUp!xO|GAt$)#HNlc9hU{YNF-NxDR zE_HBoST!`3{FzUUxxUc!TNwIdD@(l}tl-oLP~+kvKDCPrp%6QF(ok9kt8Q*c9oazU zT>TyC$A>YydFt9MM}T$#fVu<#oI>u}ykyt>PJi&UIt}jiMZ`0UprDIKOjXw-=Vnoz zTr0`IGk}ZMS*`h5mOZ#BZj1-~O$#b$Syxw~m>V}K|6~3YX3KI--rxhXy)sKL+SS>DM&drz7mU&@ho0y~?IpLWcwIQ!`S=)^;buhK#tl!SUVQHc|T3Qu_;)0KM5X zQjEkO__}Re4EbjO25a3*QW+UuPLi8+(FHl*i{Ioso_x8xI8~R=FpNU zgE$NgMM--7LskMrW#7T(S&?F4c4QuX`*3Rbs(oH)HnG6gSXGmRGfdWiSS&}9e$wgt z4}khCbXnDqkj@Q7Uo-j0^W&&`S|7?kF<(n!pV$cxuDoaJy!;W1+i~ch-}g4)Fu zG&dbcz_C?bESwaUf>Fl?y7<+4`QqAjVmxK{ZBtAuCv4*J>j{Bc7O^FQmC#F~1`PtunOwoYx7e8@2Z$fbNKy-qaEk)kq zH3LU%oOw@gMmFF}4gk((JJ)Ym@&+~PKAnoj>dJ_>t}DHV_jgI>*G=D9!y=cnA#UU6 zHEbyoV0XF@^X@zRi=Ho>PqcW0#pOWJgsVr+?*?CtVo!3Y!HJ>R*D5Y^wG7a%U)v>7dzBo={Hv z#rPj9wO0AN7%4~y-C!T<-^<^=w;KscP*u53t)j#>4SHXI$vGUQX3iFiZhHVqodf7ja@=rHvW-_Xb$2DMOa{(Q~8UtCIeVORhI$SD6&;PL+tY z`6;US-}j{KNU`I_v7b3`-aKC;+IOys9Oh4xZ|3>sLqzAIBFIflE2>LHcXfVLi_^+! z>3Z5R_-<=;kn%(GW)g0_ug&M)uO$4pJ!_&D0dU?(u{{JCEV8d(TO;eq_n%R)qF;PZ zJq&euz@++RgC|>q+Kul4(WHZ~h%F9X;7!$~m}h~^^G@r?LcTqx8o@13xjLikaqT~% z-=HHBCpVh|_vANP0y~RNJMV}`UoHG{;yuxE8_!YmS>I@ zl2|-_%IKnqs+f=0AnH*eFB^0eN<#Js{<)TYX=wjoc|T5!l9#0XqW4W^Ot0b%;qf) zCqr%vV!={1mbxU1AKUQX^8n@GN8Iveno#MJKUvc9r*g9dcJ1x}^v8?=uOF?um3+m_ zOq)FL9Q?RCAOAhTxM#SBvqx{Nx!#Zm+#^8~VKifxfxsU}s45JSi9A77^dtlr1)7hd z-lWeQpJP5ud)X$MvqN1$gV^716=f2CjARJP(CqzOkY_!U?UTFy4hs#f6u}xuHTuV> zX1KeaS0|A@9e0fr3KtSrG=Kr&- zu_2Y5+PJ@{Cnp6#CiTsn-c^w#Yi`pJG{1r|kViwI^u&%k3jOnAO|by?WWwQ&$yfD{ zqs2ckcFL=Mm^BVJLR88xU@o|W>a;KqiVL(polTpqQ>;`GVq%pXkkT(HgI|(`5qLDeT+SbBGXAPM}(?0xNBKfE#gKh z9dbXfl5U7VO3r5YC}YdH&N0}LevnJbexjcBh#to*nVn>%w>RX=mE`q(0AS-K#lI5e zkV;}?_{@-`$x`Ab^v4g-eh^Zb42%%O7hL>V5+@arXS=JGi$VVwx3SrwCma(1eIADe-Fg zyK7Vl=usGF1-c-Rb^`i)j*fb4s^zn(M}W2f?1u|%k!K7(FZJtVvmfK!{Yj2;_O|~a zCC6>_mM1GvSxvOzH@gKL;G^wn=!^aByR8~$fICqcV+SI2&rCigV#-DUepZ>!j2*U~MXDiCan8>o)dm;+D8y#TtZwg;XUR~Mu-k)c+V5ZnX zN%1mW_KIJ4G|K0I>zzzT)UlLYzcKR);W!k1+EDN+VqN|$J8aq5t6)I5n+(T38Z2VE zJo{x4ev#E^PRzY?Wp^><`0TeC1LT;777bqx zXhrCwShXg4H1_e_wVHf}cE8_f(plhV_7(c))-)zxFb)y{0+|*cCu@@ugKj)CJb+1| zyUi4GyV~j*Zv`?L!azI}qVS{DXoun0r`1CV&}LxKMnrUa z6jm)~BP||I7R(bU@*jcZJQj1dX!!5}&LN`b>mC0?%c4o(BmbNx( z-AHlUT#y5Ce>^Rxs_{R(WHI{@gYi^MHaITK2R4pq)CLG78 zog@_wG=o^ztYPfu=g(2gpWc}jn0a2d&i=xJlVyd3pdb$y$XY$Nrf|3*kf(r$pDmvD zMa0f{Ud3rdSePZitqo=g*YuzQLdKS74JNPW$rfB9Bk&p+QLA78%7s*#wUIZ#ZFF59qKb>XCe7Art8(KL@Ellv1MSYlJP-4 zP$txdSiC0W^&ba-w%u6ki7Z@WQjE`6h@-+6!UcAXkSV^^!A6Fl`>$c%HM35!`-CEy z7rp6qN!v`8M0I}0KSGaJL;=xoEpjwd=u6LN5?~uK#iee{eeek95eWdFc<90ho{BVo zvq2*#qHewUQy?3u+2-vW*Ix=S$pHH(lkyMK_41-BVW|x8&xU&+E?}qa100@1r7Q>j zhYVdC8|I+O!)%LwkUIySTWemDIGf>SHGqQd$74sOE66J$ImJe`F?C{x*P$HH; z>HQR(uQ1>Zyjb=bOykXiNqD+@%}C-x&rP;))C8$B*B+L=RQCbwbk-uc0AOU+vmhnF z)WoL20C$+camr3fh7{n8la`T+Hg5;W5}mHWy~W#Xh^Hn%MpdmJZ>3qlCJW^YX&|f< z&vdSTl|a*axfHi@)w)bRAL#+B|`H zI&msMCa#%XGKpIoaB;*?kk7p14iHsh z*4EZ>i90Tp8wX4M&-QH%7Z|k)pFTZ{ds~`8$9*-4I0h(LMtbhEB*naM)s2myY*8;9 zfFsk7ZCz?wS~AVKBk0z@vo?U6B<*-R%Xh%Me=1RYQ zWHt1brSKLwgu>l8xCbV89w_SNwvYbhnw^m>I|V=a4({)6!ugUu=6!2gA~tnCvlINqC3v@_v}e?|BI9|^bh!ZcM*P> zp2hjM#4sK>bxq>AXA!{|Z*UA`*Bo{iAsw}P4!4)U>6I>Mub$IUoQ4GC8hx?3=JkyP zvb;vl>|n6|2pt$Phk{cin`<%EL0vvK@i+K%RG7-1>RbFD%$f=bvlY1L3tX%L6tz(C zlAX6HVH$bY>a2B4RsT{lwT<6-8txw*NhYl0OhQq1cWcJ`TpI-_+5qM4C z(^68HQ|EQ5Z%-PeKAj_wc)y0zc%|vwHy^2aLupAi*X5su4(4PKbF&l6^78VUso7it zvxWzL^@LJRY6~Z4Xq>>-WeMdjjfBKa0Zkz`4ku#iwaRP|`a7M45nQ*&+UJdFAzTK8>9zMGgU~(4fD+2k0*Wg-73K zsB`qW1$iVtl*477R8kHN~%tzgZ543d&?^S`8Xr(etG3%U^J?lJWSEdy)U+=Koki-+5 z@ui2@^zdrUi*@k`mny6b5Cfp(kiJg_h60RcM@0QfW>^skmTL+w+PlTsDtX}oXO)XK zjUQ42WCJ6tb?-XiUf}};5xWS&CbeeGx4%x|B#b43{K$CL=g*b+!*HWXURH}b6*)g0 zO%bPtx(PXGw$!cwR*kW%ZuX=!cDfp3H(cd0_08GOG6iW~gt6V*Jg@l%dxBjWd=^o6 zjnxAO1(?d)81(SOXBSS+%2Zq_OA$lEYWqP|z+Ron5Zid3l>FrtAWdY`po<%2VP?kC z5MP&7<^ey%afpFhtvK~mNA7P{|HjDXA-5y&+l*gTuv>qz#bW{twDWRJ)ROUR{z|?b zJ2Y?gZUjvBu6X+X&s&2&NKpgZAL24w7KcJCbRe#TSU5m?p~aoa_@he|+05O|g?tL? ziAqtH0)@-@v_Phy7K`uD6IVQpP5CIl-huA=%GT zU|mU7D*WFz4~I1Fe-cB>ALplpv$Ti~zdm|?7iHc>C%oA78gROPU1`TA5Fe|8sI1PZ z&$3#2*A;XSUVpy>#Hr6z_mQ)A(eq#Fp;&W6O7 z;QI2D>5I+IS?X9WEA7!lObYMqE&f0by)K8wgyAGvt3fwvrds*?^f@yH8JVC>N$kNY zlaI%TA6Ic)#T^QN=VqSf`zxc5R%aTL9p_r6fjgDhr$<*v-ya(LT1*ouLADv}$ zpUG-Q70E2x5w_?xknpw5C5Dq4M~F=hI)uC}J?4)jpeGLyYaA(7Aq{N>f|+D=;YM)a zy}I9>o1&;QB3Ldmp`Egys+lP?`7xNDo_?^1)hSEMfrL87OJO*i)K~YN?qT9Ga|{yT z`WRB+tqGJ9h}gHKCBj!3EGI5S9e~E{s}#HA>(X?O?M=sXws_8O%2N9{X4eNsmu|Z7 zoDq@NcO-xXG9m1?ph3yl8m&o}V;HWmdSkNN2jz8GNH;L92UaoWU@?V6_^CnoMj8QT zpL~&JekLq)PxPCzV3bu)#9q5kgdJa_4J8>_NhgPiNfg~n-^BdM1HgX(7acCv5bu?v zFt`a0%bAw(4)-2&_u4Wyl0#rUcix?bo^^+!zp7!iN4-|{7u?DVzQ;Zp(|%X*6y47e z^YLS+v&*-!=-f_btse5eA>}Un#ZMK0IJUk@=&V{AKn@-hvGmZs@QxA`ZlqBXGT2AWo|Hv)0T=jd7DBtW5#%fa?#jl1O`BAd~ z+)?+`-z6P;SL4T7GFuBNX_zptMd4*C_uy}ySK*Bjn}bR=Jlb-9RUm96wT!4`MAV!D z8>Q(XYFJ{K{OA{o@nPD!yN@>pdM=VRdL`9WyXmlN=jJxv*Q%*Xp@%~014D|TX$)~V zIc`TZJO=MW7-K1Vx)cfQ1~3lZ0@%q6{|R*;Mhf=xR++zmElxb1r`X-%J}4O^R%DIl ztqdR(p2+Yx7+NN_l39Vc$7XjAHi;ad4-IlW$N+vWo`ApDk3otBB$m)O%pGsQ#sTPj z;D?+8r?E-V*^Q@i5lI{9z+j2KN74CkJ+Cgyf$rBfyboF>x;e~aq>s7{+A;+r_h zkJ|Py#A!WW6!=kX(e~^hE-q5WnW9WUtftWU1JKJ=jC8g}!@&TJdH_)??sfJ6k~|j^ zMNpGW$VhdjZRm80J=bJoW3^0psLNe3;>V;FB9s%949>Bl&TLmBlD^Vn__ZkVHEWdPLO$FKhpiCdzPvjLgh zdzT)9O9A%_kRtg1c8V$kpX-WPARq$Ur(#vljsm25?}OEql%(MB=j1%5@9&rYgGeOC zTZP{l2+7F8fzVCs*=n=GRx(cgsJwSm;ZG=lfCy^SHgC1Sr51PV2jp^pf4_eKm^QK( zN6Ryk3Dm;)e-e25J;MQ|?}IeEkrLIv08n7c7tJxVvcdpuAcK~6$$wCfydjzsOn@re zyZwI;C>7`2u3HFl0zl_#oz*Z+$o~YCHkF*Xb~!jWr1M$5x>PI&%mKrXF0_DzaSNrx z)0qU1DC;4Z)M)&(PulF+uT}a6`|*g6A3sv910Y7LOr7>@9Gb=>|IuaH^pOCtxNwDh zz7b;ppd%(z$mv6cd4pZtWdx^MGOOB`xjO5FTBZ0`@z5 z5pcSY6M1`k`#18TJTm8D54(eiW!*lQwXp2x2oc6mKn0g?*5=&;`0e>D9HLb}1r|1@ z{))Qu#>~PaqP|+m4*V7GJCwFy>I`|;*H3ou*pfib#PBlo5>OZeqxc>W%6&RFL~uo{ z7Lrjjf=@bH*>y@S0aexBfpuMhysbL0LMY{b061p%TRF-3(Q<|Rf0elE_LvT?W8nT% z%M@`&qlAH}`c_6qDD21hkfiM;+KSFdn2ydm$RM_5GVq3 zI_)JXDoO=(r4NwnJz%_vd-LDxeY8)Lq?>`TsjyfS_*m^Y6`Y$Hlct!!=r}~& zODhs$@X;lDT>NxP_WS-!Qk##fO^pS;i%~tLuIoaDfiDmVkjrfxc4<9ud_BpeB>|l* zJgzdK0K{Aj)H(bfKEm%;Qc_3(y({?(pCb%zXs(zaaJorScqQ6f>`j&Y229)7Q|Q)k znj(OM*kA=d%o!4EXWc8GZdpiV4m>j{gL*i8v6`jc2oCDCjVT0+D}@ zy1Wlj#MO(EYnP6u9|J*_PFraJKa0U*h{7wr+_<5U+k2QRp5(jt_PhVxLbLpuMUZr< zm>)8pJ{m3h^X2c2-#5RyevW87MIOfX4GdWCe=ENPI?^{)s{MbOInS@A(k+Z5DuOZt zA|L`HMp}?!h6rKAfDi%*QbLt3MOqM1iu4{K5E4Ks0Svu5bWs8*N>`NLYm_PoT&h6O zc{A5p>;4J%%lUHFIxB0v=j`m~+0Sq1%<1Ck>p)d5{sWj=DxHZX#40mQ1RaQwxOk%K zBUosAsuBZI%;OdHACS-a_9I zfPgqRm?bxU-Ci5|Eoz}FET9(4zuAwS2R1@0ki=K<;g~yMF0LvE&K*|Y^AtE6VL%6! z^1y5K$RdPvjtx z@v|p5*0FDymB55!8!I_8?r~ZL*6@cT=D7kuW+$8nZ%V@%G0Y?OZA}Le95cy^a(x)g zI-mq#YPnQn=>1;E?CPL)r7pSmxpkv?OJ>q1AepkS-o+ z@RRE}9yH&Twxqjec*#gy+Phb*Q8FQ`Cv5yAk7QGG^HHGT+rY~YbNVFcDT5}PVRZu5 zZ)0`7wCAUVjDiQ?PGi58N4bx<6bw zokS)}hFiQpYKcap@d%%q1vN&{xaIkWbOjIGjthEo(A0+Qt)VEdK);YTxP13?5wkU6 zE|#_VY_hu=JzAqRV6j+8AvyI369QoHQ&hlrKPxvE-B@5Gjtlj=Nfg0TWmnxLQJr!j z!Q8~?P`y?>zq=ka@b;|fNAk^;$Em>i~W2^-Tf6&=$l{OE585s@{oVGY{f^1F;ba%7~+@l=UXaZaxZ zc}_nawA*L=7)LPh?-4Niv+J>Lx5$ivQ)SqXAD=Qmip*xQxpwfOZY40oUJlfdohUftp&HylsaG93|&)6Y8 z>%z`9nq)hB`zQ(QNW~306&S_B*;iU0Y6rigB=U1p6ftE*r^#VNM9M5m$ro^Tnce`BSBvI_r`2JiciK5_hVLtkAb<$m8hZgLMgGoA{hHU^8ACJQoYzEn-*iw&iSFFRN;J(WOb6O0it~44x6T=S zm&;3{uny|ciF#F&+Z6*FS zp;Nu9@PQ*Y2glj%^u*aIXYT8MZ^MswJZr`v{)Js^+JRjRbSO3$Mp7gw?=3 z@6NxTP1Z2qkyP?6vzB8ayX&JIeLdE^f|4j(zMEU9ADu}F3UDJ|hlLt=Lkxk(vupOE zTgMrK>P%6%2PUreo$}8(%k$U1#;;_M@lR6u96-m@jOa*dTvTFjq(hlic+V#kLBp92 zlTIaV>5C6)cn(X@34uOp@8E#!(V-x(TNMd{kNt-w_<(+uuZH07`jMg8{W~S7|9o=R zYXNlmX>LPr=OhR#>8J{w67qQu&+|FohW>JT#+d5GQtuqIiXN|B3U^H0Q^r)ASuEFa?;W`&zyv9>RMV`)w7UY z3DzXX%THikvQ=g+v*c+BmElxp z7_n z%;3ZQr8vkf)vNAf@X9#!JGGeBHj+5Z-umCV31jy9$TaD+iJel?=Vl7xiVB8Sc|kS3 z;Q5jLg;C9+Wd~TJxuu-iT^0^>SZ9(tw^J*sI(D+2F)T>{T_>_2Jb7Y+c!8+2#vClk z^T#|=fO^cmJ^no2vs<%CVq>%7PV+!YdFOb3+V9e%21YJwGJ5@`{W2NgheVyA)UWa# zTddXgPiT*Pd}(Rz%?(pPJ_MaD$Ko6})913vC<910_E9-GsW~}&lv{&WNtF9de|MGsS;$q

utV=hvJ8xoNv=5xVcr~8-I f`v1Pu^z&$zHQl$B^RgOPy2qrYu8S&DwGICpo74*~ literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0833.Find-And-Replace-in-String/README.md b/leetcode/801-900/0833.Find-And-Replace-in-String/README.md index ab7e5e4c3..8e2852151 100644 --- a/leetcode/801-900/0833.Find-And-Replace-in-String/README.md +++ b/leetcode/801-900/0833.Find-And-Replace-in-String/README.md @@ -1,28 +1,47 @@ # [833.Find And Replace 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 +You are given a **0-indexed** string `s` that you must perform `k` replacement operations on. The replacement operations are given as three **0-indexed** parallel arrays, `indices`, `sources`, and `targets`, all of length `k`. + +To complete the ith replacement operation: + +1. Check if the **substring** `sources[i]` occurs at index `indices[i]` in the **original string** `s`. +2. If it does not occur, **do nothing**. +3. Otherwise if it does occur, **replace** that substring with `targets[i]`. + +For example, if `s = "abcd"`, `indices[i] = 0`, `sources[i] = "ab"`, and `targets[i] = "eee"`, then the result of this replacement will be `"eeecd"`. + +All replacement operations must occur **simultaneously**, meaning the replacement operations should not affect the indexing of each other. The testcases will be generated such that the replacements will **not overlap**. + +- For example, a testcase with `s = "abc"`, `indices = [0, 1]`, and `sources = ["ab","bc"]` will not be generated because the `"ab"` and `"bc"` replacements overlap. -**Example 1:** +Return the **resulting string** after performing all replacement operations on `s`. + +A **substring** is a contiguous sequence of characters in a string. + +**Example 1:** + +![1](./833-ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abcd", indices = [0, 2], sources = ["a", "cd"], targets = ["eee", "ffff"] +Output: "eeebffff" +Explanation: +"a" occurs at index 0 in s, so we replace it with "eee". +"cd" occurs at index 2 in s, so we replace it with "ffff". ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./833-ex2-1.png) -### 思路1 -> ... -Find And Replace in String -```go ``` - +Input: s = "abcd", indices = [0, 2], sources = ["ab","ec"], targets = ["eee","ffff"] +Output: "eeecd" +Explanation: +"ab" occurs at index 0 in s, so we replace it with "eee". +"ec" does not occur at index 2 in s, so we do nothing. +``` ## 结语 diff --git a/leetcode/801-900/0833.Find-And-Replace-in-String/Solution.go b/leetcode/801-900/0833.Find-And-Replace-in-String/Solution.go index d115ccf5e..f1295ca9b 100644 --- a/leetcode/801-900/0833.Find-And-Replace-in-String/Solution.go +++ b/leetcode/801-900/0833.Find-And-Replace-in-String/Solution.go @@ -1,5 +1,58 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" + "strings" +) + +func Solution(s string, indices []int, sources []string, targets []string) string { + position := make([]int, len(indices)) + for i := 0; i < len(indices); i++ { + position[i] = i + } + sort.Slice(position, func(i, j int) bool { + return indices[position[i]] < indices[position[j]] + }) + + length := len(s) + stack := make([]int, len(indices)) + cur := -1 + for _, pos := range position { + sIndex := indices[pos] + if left := length - sIndex; left < len(sources[pos]) { + continue + } + if s[sIndex:sIndex+len(sources[pos])] == sources[pos] { + if cur == -1 { + cur++ + stack[cur] = pos + continue + } + lastestPos := stack[cur] + if sIndex >= indices[lastestPos]+len(sources[lastestPos]) { + cur++ + stack[cur] = pos + continue + } + cur-- + } + } + if cur == -1 { + return s + } + start := 0 + buf := strings.Builder{} + for i := 0; i < cur+1; i++ { + pos := stack[i] + sIndex := indices[pos] + if sIndex > start { + buf.WriteString(s[start:sIndex]) + } + buf.WriteString(targets[pos]) + start = sIndex + len(sources[pos]) + } + if start < len(s) { + buf.WriteString(s[start:]) + } + return buf.String() } diff --git a/leetcode/801-900/0833.Find-And-Replace-in-String/Solution_test.go b/leetcode/801-900/0833.Find-And-Replace-in-String/Solution_test.go index 14ff50eb4..083ecd36b 100644 --- a/leetcode/801-900/0833.Find-And-Replace-in-String/Solution_test.go +++ b/leetcode/801-900/0833.Find-And-Replace-in-String/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + s string + indices []int + sources, targets []string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcd", []int{0, 2}, []string{"a", "cd"}, []string{"eee", "ffff"}, "eeebffff"}, + {"TestCase2", "abcd", []int{0, 2}, []string{"ab", "ed"}, []string{"eee", "ffff"}, "eeecd"}, + {"TestCase3", "abcd", []int{0, 3, 2, 1}, []string{"a", "d", "c", "b"}, []string{"d", "a", "b", "c"}, "dcba"}, } // 开始测试 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.indices, c.sources, c.targets) 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.s, c.indices, c.sources, c.targets) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 15d6c86c829f507740c2bb6a303de9591cfbe7d5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 13 Jan 2024 09:43:12 +0800 Subject: [PATCH 100/253] Add solution and test-cases for problem 1347 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 27 +++++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/README.md b/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/README.md index bb6521ee2..5a526d351 100644 --- a/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/README.md +++ b/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/README.md @@ -1,28 +1,35 @@ # [1347.Minimum Number of Steps to Make Two Strings Anagram][title] -> [!WARNING|style:flat] -> 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 of the same length `s` and `t`. In one step you can choose **any character** of `t` and replace it with **another character**. + +Return the minimum number of steps to make `t` an anagram of `s`. + +An **Anagram** of a string is a string that contains the same characters with a different (or the same) ordering. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "bab", t = "aba" +Output: 1 +Explanation: Replace the first 'a' in t with b, t = "bba" which is anagram of s. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Number of Steps to Make Two Strings Anagram -```go ``` +Input: s = "leetcode", t = "practice" +Output: 5 +Explanation: Replace 'p', 'r', 'a', 'i' and 'c' from t with proper characters to make t anagram of s. +``` + +**Example 3:** +``` +Input: s = "anagram", t = "mangaar" +Output: 0 +Explanation: "anagram" and "mangaar" are anagrams. +``` ## 结语 diff --git a/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution.go b/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution.go index d115ccf5e..b8194543e 100644 --- a/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution.go +++ b/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, t string) int { + as := [26]int{} + ts := [26]int{} + if s == t { + return 0 + } + + for _, b := range s { + as[b-'a']++ + } + for _, b := range t { + ts[b-'a']++ + } + + more := 0 + for i := 0; i < 26; i++ { + diff := ts[i] - as[i] + if diff == 0 { + continue + } + if diff > 0 { + more += diff + } + } + return more } diff --git a/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution_test.go b/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution_test.go index 14ff50eb4..12227f65e 100644 --- a/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution_test.go +++ b/leetcode/1301-1400/1347.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s1, t1 string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "bab", "aba", 1}, + {"TestCase2", "leetcode", "practice", 5}, + {"TestCase3", "anagram", "mangaar", 0}, } // 开始测试 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.t1) 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.t1) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 04d93812ddf3ea1d682f0800a47c19c4dcfd27ee Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 14 Jan 2024 14:46:27 +0800 Subject: [PATCH 101/253] Add solution and test-cases for problem 395 --- .../README.md | 25 ++++---- .../Solution.go | 60 ++++++++++++++++++- .../Solution_test.go | 22 +++---- 3 files changed, 81 insertions(+), 26 deletions(-) diff --git a/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/README.md b/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/README.md index 014a91b94..bcc825797 100644 --- a/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/README.md +++ b/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/README.md @@ -1,28 +1,25 @@ # [395.Longest Substring with At Least K Repeating 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 +Given a string `s` and an integer `k`, return the length of the longest substring of `s` such that the frequency of each character in this substring is greater than or equal to `k`. + +if no such substring exists, return 0. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aaabb", k = 3 +Output: 3 +Explanation: The longest substring is "aaa", as 'a' is repeated 3 times. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Substring with At Least K Repeating Characters -```go ``` - +Input: s = "ababbc", k = 2 +Output: 5 +Explanation: The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times. +``` ## 结语 diff --git a/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution.go b/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution.go index d115ccf5e..607f1ca15 100644 --- a/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution.go +++ b/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) int { + if k > len(s) { + return 0 + } + + length := len(s) + cache := make([][26]int, length) + indies := [26][]int{} + cache[0][s[0]-'a'] = 1 + indies[s[0]-'a'] = append(indies[s[0]-'a'], 0) + + for i := 1; i < length; i++ { + indies[s[i]-'a'] = append(indies[s[i]-'a'], i) + for j := 0; j < 26; j++ { + cache[i][j] = cache[i-1][j] + } + cache[i][s[i]-'a']++ + } + ans := 0 + for i := 0; i < 26; i++ { + l := len(indies[i]) + if l < k { + continue + } + for j := 0; j <= l-k; j++ { + start := indies[i][j] + end := length - 1 + for end >= indies[i][j+k-1] { + cur := -1 + for kk := 0; kk < 26; kk++ { + cut := 0 + if start > 0 { + cut = cache[start-1][kk] + } + diff := cache[end][kk] - cut + if diff == 0 || diff >= k { + continue + } + at := indies[kk][cut] + if cur == -1 || at < cut { + cur = at + if cur < indies[i][j+k-1] { + cur = indies[i][j+k-1] + } + } + } + if cur == -1 { + if ans == 0 || end-start+1 > ans { + ans = end - start + 1 + } + break + } + end = cur - 1 + } + } + } + + return ans } diff --git a/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution_test.go b/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution_test.go index 14ff50eb4..0314b055b 100644 --- a/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution_test.go +++ b/leetcode/301-400/0395.Longest-Substring-with-At-Least-K-Repeating-Characters/Solution_test.go @@ -10,30 +10,32 @@ 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", "aaabb", 3, 3}, + {"TestCase2", "ababbc", 2, 5}, + {"TestCase3", "bbaaacbd", 3, 3}, + {"TestCase4", "aaabbjerwjgjrjfdhdjkjgiorjvkofjiotjrijfifjijdifjoidhjtirutiohfgjdogjhierhtnjgre", 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 8c53bf79acfe6d2cd11182662b9618dcada65455 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 15 Jan 2024 20:34:31 +0800 Subject: [PATCH 102/253] Add solution and test-cases for problem 2428 --- .../2428.Maximum-Sum-of-an-Hourglass/1.jpeg | Bin 0 -> 12779 bytes .../2428.Maximum-Sum-of-an-Hourglass/2.jpeg | Bin 0 -> 7627 bytes .../README.md | 36 +++++++++++------- .../Solution.go | 15 +++++++- .../Solution_test.go | 13 +++---- .../2428.Maximum-Sum-of-an-Hourglass/img.jpeg | Bin 0 -> 7294 bytes 6 files changed, 41 insertions(+), 23 deletions(-) create mode 100644 leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/1.jpeg create mode 100644 leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/2.jpeg create mode 100644 leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/img.jpeg diff --git a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/1.jpeg b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a604b7a706f732e866c9bff2d96678b38dfbf821 GIT binary patch literal 12779 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 literal 0 HcmV?d00001 diff --git a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/2.jpeg b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3b1ba8fc412f034399bd7515945697b65248604d GIT binary patch literal 7627 zcmdT|dpy)z*Z+y+-nfQR88eQ{xXlnbNik@~t#QkxFwBhmoldC8aSh2}G>UQ=x6nZt zBIR~yh}?2N5kjSMNhsdmJm;J@ectEodEU?4KhK)a{C?}R*LUx=etWOI_S$QEX!`{K z!Rll50TvbjU;%%?_S7yJjIOT3X){xOjFH|y1iM55kl2&~z{@+(-^@Vgu(gftVP@Ok zgm(_`{hR+MZ*bg?gUrzZpikkS$p2LnCxIB?41(T+|3H6GIcO{a3fV_;$4&G@8|4X26Ac$#a;+=i{nfw^YAM^4IV(MZN(_$W?x1~Awwg&$P zfB?V@FaUHw{)f`n`Si&F0F6}uV7>me&4~&CHBkT{I`Xv*b_W3VMgl-}w=dow{|{r> zz~?R!2>_M~0D#v900esgfXnW0L%;U@x)%S-w;l%j900%52mHAJo&XUz3}66nz!^{k zIV7MAr~pT{M*&@cbr+MEPgaoF*x8uG!Op&$os)x$i<5(slZ$6B4;MEdHzy}AKQG^2 z2!tQP#Umgn01*Uv2y+k?W=~c&4zMGHo0A)C{Xf$7BY>X+SO%6^S)jl!eil}KmhBec zAk%kQcC#>D`!C|)WZTWYhiexLD=5c6K%ZvY#mNeAfQEB3AuPLCnE(!cP607V4Xd=O zenFMd zfQOX@w2_q`&;}MV4{d0_nUF_}%}$PKQYzDphy$wVwEVpC>m|Q=s&jLFkVUVcik}b0 z+K7>3D`1OjsQmND$*|js=@#i1B(u|_HgaE;H`LiHorYMoomE<%>0KbdV>|NS5a=rK z0|laf&$fZwt*)txuBYA-%|#wZ1KZA-qcOJbhGJX{_GaJT?g^xt>S~r=a*ax+%EUuW z-UVp7I4ka3Uz!iX{1PE9cEO?ec(?3`eBk>sh4D(=lew^PlK#6H!*4#xC=lh2YESH288s8!AX}!tOeQ%Z z-XBt+k9K9xp2d#ZVlZZ=NZg_F}YB9lnj*?Mj@yT)6(m$2&c~pJ}cMJ+W<| zu6cT>NbO0k95%hz@aYL1O^R&{wx(b(7#)&NtS6@yE=>fJY(5z7&odbxznU+QQ0!)1 zr%6Nx-nbIf-rw4!IiH2`GFdp1Cu=~j)Gx|<)4tRxf0{Y`zg`25-}$ZjgstOh`|LdA zuj#3{zYytAJle8xDsjtJq*66`BUu`YONLe1cEPFSc$J>IqmEpbSC7`0WUgZQ3{+yC z4>0V^BvW6dPiE=L+zX3r+$`7z9svvujeh|bKvH*LInYtYBS6s@OckXol{n`kvCC@3Ll7a%`0hjA(?JP zv;Yl{t)vL#AX<)R6|)vwLv>lhE#@k@<<94j)?7KK$RY3u8hx=rymbPRrFZa z3ypZ~=N0DMuMn*sXPFyOo&6@Ye(PcsuX%ERAAxN@tZkk;!pcTH+x=3 zJ2@`b%2r@I2n80j3{x#jNqsl1(S~K76y54-{D_;kcz+~ZI(H419GWzzk(PHi*JIQH zYgH-ZliT`q22$Q#bGI1d*VaoTI9wr-j=F;Lurv(-D3$Md|3$ifem{9ll?sVc4vh{S z_fQf3x$N~5`Gt-H1h&T%r-v1hp*G$RM|x}%HE9$#OxDUGAKNe`-cTJQDgj?BoWZ;^41*H_?4z!9+2n^s^mGri1)a5^7UOd;5SV_3k=sVCsJdyZZ{{PK4CEgk%XH)3mJ z*mfJBQM<@0RE0=daKU2)8hYS@(UAtV@V0G?A{Ab_?3h;IYTS=ShR~hO@>A&#N zN@n`Rf{gj$Zbb-!JYqj@Q&T+_r^T~SwVETMPsl;U{oK$wpP4{+c*UR%z$Z9%MtU~k z@^tRc>w$H74<7S=g*2S_fdck}DtWN_Ac;Vyx8pEiq!@OL#5SH3>{_(oAO7EFo$j|m1D-12M ze1tEHuhDK%#+g^clq@>31QluoXzmY+_>7eL4c#}7Zo~~DwVfvLKHzhB;QwtO2J zKq-sr)J<^+-MtvLQh9zG_>{JOi!1lmnZa#9cSW$w6+@h>EzK%U(i$dyx<(#(yp^pz zb$eY|jFlyq+BUbkiq6!VZNa zBz?3?Mv_#=PsuaKhtDCab0!CU12fyIE9Hc#sXF*JJ<);d? zSN@SqB8c&^EJbDa!`lYavI$r$IXF3aQ%rON)OyhJ5y0*qxMKsguE)8@ksTYrU2agEcSDnLQ2)%k6BSfm%?cbtmgHl z936EZ+s0=q3HvQc?xDQbM$h}#SOfnM8s(i~Yh|zKy80=~lPeR0NQC>TZ zjGeK5pW+magBOX>h<&nWoqzLF?v!?Pjn)yEgmVTPQ>l4NT}@w%!d*J|0OjiWlot5C zl<^GYE|1+ZnSup;ozL<|<4p6Xu7}Kfd0>1nGvp-SS1-WZsl>*2(h_zh6`b8O75ZFE zJROY_szT63-F}se+0Z%bmH&mPHcuc_m_08hgx0)kuaubaeD^SEl!`+cmb=J?gd9=m zB|%=L2G&w?4xrk}>HAj&QnZ`T_E8tt#?+}nC6D24Ercd5)Kanhh4h>pXPBP}{WJf= zUpodA*e9}!#KhdiyR_%BY|_o=p%s*hhHd4Ur!uHfhUz6sw`rLRycjDOu+Tsg_eNlEfKxe3Cv{ zJ;EtFhFeqIY zeR2vIDY|Mx$$?#884xqZ<_W|a`{Xiae7%~QQB-PHu5mK_DEQV}bPfWS3=n;{^PK-8LqUqN3hZcJAAcfw{qB^77`ezMWQg_WC6m8-S^1&lq(U8gfX* zQ>|st;&qErp){Stu%+CABM*}~YWfEW?uH5{({rMf5Q*+c*sgbhl+rY()$s%LaVc#We zj^lxgqbP;2lX1Zz`cttLs}e}0Qukt(%?bABhURAO$eU@s7H`DyaDUe$cN~XID?O{p zSi>(Zx?ol9-wCBm6qCLmSN_BRfNqGehIMh6uhfG;y2BLk&GGR!hMBXS1ptQ)?Uk_M zdMlgSu4a0Wf{Wq}MzL$0yfMaE(#CPfTSR!uEN;%l@?I&V0tM$MV8$0+jNa_1OzcSJ z?i?=tnuYABUg#|VKUSjrGItv=_;RzAc=OiS&oO3${__cS`LX2t{S>4yg*SQN#pAW`PDeV^P5ZuZ?C^69-?oD>_e+89@*Wr}H)vO6;uLkX#!q0Zc{O}yu^XCrbO zxEeP7h`_UFU)4b4$24!Zx@};g`)*?_yu|2o-0P5un8FCF{D;Ls72SwcL+y6|aL`4+ zDQ)}@0|ZIX4_)3RLaP=YNY}cYJh%I`{G41H)+C`+8=7K0As0>+J6L?WbYdMWbZ~3s zWsHw$X7Qz!%+1vuU61c@5>dd-B}A?Y1;cLH=eql#+GAIZDz#?y>UT%7ysHQGf4{l_ zu=T|z1dV#^)$&h_Ow}8(glS@M%GdAFq9u(ONZos4@_*_tiT^`k_^s9cQ+hS^!UzR1 zocS}0i?fc6SnlWXMix?whsJ#dVRw2fKXaafqQA`|VnpoY#>` z3+{NEGHGe}#(7?_&gE`9nCpYm4nV1};f{PvXkC=eU5Y?U|>e z(IE`iHF0h=5p<5!cvg~#Wzhck2bKDLLqQZh3qjHizry)k& z<=KRyv+^c$57O|t&hysog)uiY&O1*8_EvYu{UlHzL|dSW(J(00tSN>RQn^DYi+A{9 zJ{QYc;wyaiO``Xq_5Rdk@x~&Gvz10>{@t9{ubr`j73<(h*Q)UmPPA* z5+ONLz-js3?f5gUkW3k4Z!z9j>NLrPs7l4rAZQva zZ7cB37~=!9TM1w5b}Yrb|I5?dV(cZ#;a8O$`?8Y!55Y7l-C9EU?kX+&*a##AFQiZZ zEU@+B<4OB-&*kNLgJl=o>4}&8`~+g8qZu@TTVD)@&DjewtX`_|A6}acrYs3sDR^ob zlc@Rm`xIa44XTwIti(Xa{Ux9Gw4h*-*|3*?bos8P-n$<{OD14GpCBIZwOAaiu1mS= zB!ms|k&cWHLKA{ZyTnK{+L(1Ajd`-F{1NYg5C zC|1V~BgqM)!ISw#&}i)wpfP*W4+AXJ#2t0`*qv3LJ0RpQ`leX_{{k`3r+=6BZV&$# D;llks literal 0 HcmV?d00001 diff --git a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/README.md b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/README.md index ae3b4d00f..67eef8b68 100755 --- a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/README.md +++ b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/README.md @@ -1,28 +1,36 @@ # [2428.Maximum Sum of an Hourglass][title] -> [!WARNING|style:flat] -> 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`. + +We define an **hourglass** as a part of the matrix with the following form: + +![1](./img.jpeg) + +Return the **maximum** sum of the elements of an hourglass. + +**Note** that an hourglass cannot be rotated and must be entirely contained within the matrix. -**Example 1:** + +**Example 1:** + +![1](./1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[6,2,1,3],[4,2,1,5],[9,2,8,7],[4,1,2,9]] +Output: 30 +Explanation: The cells shown above represent the hourglass with the maximum sum: 6 + 2 + 1 + 2 + 9 + 2 + 8 = 30. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpeg) -### 思路1 -> ... -Maximum Sum of an Hourglass -```go ``` - +Input: grid = [[1,2,3],[4,5,6],[7,8,9]] +Output: 35 +Explanation: There is only one hourglass in the matrix, with the sum: 1 + 2 + 3 + 5 + 7 + 8 + 9 = 35. +``` ## 结语 diff --git a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution.go b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution.go index d115ccf5e..148ba7ef3 100644 --- a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution.go +++ b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + ans := 0 + rows, cols := len(grid), len(grid[0]) + for r := 0; r <= rows-3; r++ { + for c := 0; c <= cols-3; c++ { + sum1 := grid[r][c] + grid[r][c+1] + grid[r][c+2] + sum2 := grid[r+2][c] + grid[r+2][c+1] + grid[r+2][c+2] + if sum3 := sum1 + sum2 + grid[r+1][c+1]; sum3 > ans { + ans = sum3 + } + } + } + return ans } diff --git a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution_test.go b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution_test.go index 14ff50eb4..9261f1d16 100644 --- a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution_test.go +++ b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/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, 1, 2, 3}, {4, 2, 1, 5}, {9, 2, 8, 7}, {4, 1, 2, 9}}, 30}, + {"TestCase2", [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, 35}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/img.jpeg b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/img.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..38353fbbf97031af1dbf658d664fd0d85a1842a9 GIT binary patch literal 7294 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 Xvp*3(B>vVPTSD}$=)ViBn Date: Tue, 16 Jan 2024 21:09:57 +0800 Subject: [PATCH 103/253] Add solution and test-cases for problem 1818 --- .../README.md | 45 ++++++++++---- .../Solution.go | 61 ++++++++++++++++++- .../Solution_test.go | 20 +++--- 3 files changed, 101 insertions(+), 25 deletions(-) diff --git a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md index c3b35cce0..51f2eeea4 100755 --- a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md +++ b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md @@ -1,28 +1,47 @@ # [1818.Minimum Absolute 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 +You are given two positive integer arrays `nums1` and `nums2`, both of length `n`. + +The **absolute sum difference** of arrays `nums1` and `nums2` is defined as the **sum** of `|nums1[i] - nums2[i]|` for each `0 <= i < n` (**0-indexed**). + +You can replace **at most one** element of `nums1` with **any** other element in `nums1` to **minimize** the absolute sum difference. + +Return the minimum absolute sum difference **after** replacing at most one element in the array `nums1`. Since the answer may be large, return it **modulo** `10^9 + 7`. + +`|x|` is defined as: + +- `x` if `x >= 0`, or +- `-x` if `x < 0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [1,7,5], nums2 = [2,3,5] +Output: 3 +Explanation: There are two possible optimal solutions: +- Replace the second element with the first: [1,7,5] => [1,1,5], or +- Replace the second element with the third: [1,7,5] => [1,5,5]. +Both will yield an absolute sum difference of |1-2| + (|1-3| or |5-3|) + |5-5| = 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Absolute Sum Difference -```go ``` +Input: nums1 = [2,4,6,8,10], nums2 = [2,4,6,8,10] +Output: 0 +Explanation: nums1 is equal to nums2 so no replacement is needed. This will result in an +absolute sum difference of 0. +``` + +**Example 3:** +``` +Input: nums1 = [1,10,4,4,2,7], nums2 = [9,3,5,1,7,4] +Output: 20 +Explanation: Replace the first element with the second: [1,10,4,4,2,7] => [10,10,4,4,2,7]. +This yields an absolute sum difference of |10-9| + |10-3| + |4-5| + |4-1| + |2-7| + |7-4| = 20 +``` ## 结语 diff --git a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go index d115ccf5e..84651ee1a 100644 --- a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go +++ b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +const mod1818 = 1000000007 + +func Solution(nums1 []int, nums2 []int) int { + next := make([]int, len(nums1)) + copy(next, nums1) + sort.Ints(next) + shouldCut := -1 + var bsearch func(cur, target int) int + bsearch = func(cur, target int) int { + ans := -1 + left, right := 0, len(next) + for left < right { + mid := (right + left) / 2 + diff := next[mid] - cur + if diff > 0 { + if diff < target && (ans == -1 || ans > diff) { + ans = diff + } + right = mid + } else { + diff = -diff + if diff < target && (ans == -1 || ans > diff) { + ans = diff + } + left = mid + 1 + } + } + return ans + } + diff := make([]int, len(nums1)) + for i := 0; i < len(nums1); i++ { + diff[i] = nums1[i] - nums2[i] + if diff[i] < 0 { + diff[i] = -diff[i] + } + if diff[i] == 0 { + continue + } + r := bsearch(nums2[i], diff[i]) + if r != -1 && (shouldCut == -1 || diff[i]-r > shouldCut) { + shouldCut = diff[i] - r + } + } + + ans := 0 + if shouldCut != -1 { + ans = -shouldCut + } + + for i := 0; i < len(diff); i++ { + if ans < 0 { + ans += diff[i] + continue + } + ans = (ans + diff[i]) % mod1818 + } + return ans } diff --git a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution_test.go b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution_test.go index 14ff50eb4..e45c86b4b 100644 --- a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution_test.go +++ b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution_test.go @@ -10,30 +10,30 @@ 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, 7, 5}, []int{2, 3, 5}, 3}, + {"TestCase2", []int{2, 4, 6, 8, 10}, []int{2, 4, 6, 8, 10}, 0}, + {"TestCase3", []int{1, 10, 4, 4, 2, 7}, []int{9, 3, 5, 1, 7, 4}, 20}, } // 开始测试 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 6ef3381ceef55aec681a814a8329ca32479bb61f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 17 Jan 2024 20:55:54 +0800 Subject: [PATCH 104/253] Add solution and test-cases for problem 423 --- .../README.md | 21 ++---- .../Solution.go | 64 ++++++++++++++++++- .../Solution_test.go | 13 ++-- 3 files changed, 75 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/README.md b/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/README.md index 96f6dd02a..39e7a2ef7 100644 --- a/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/README.md +++ b/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/README.md @@ -1,28 +1,21 @@ # [423.Reconstruct Original Digits from English][title] -> [!WARNING|style:flat] -> 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` containing an out-of-order English representation of digits `0-9`, return the digits in **ascending** order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "owoztneoer" +Output: "012" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reconstruct Original Digits from English -```go ``` - +Input: s = "fviefuro" +Output: "45" +``` ## 结语 diff --git a/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/Solution.go b/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/Solution.go index d115ccf5e..9b256d469 100644 --- a/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/Solution.go +++ b/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func removeChars(a *[26]int, str string, count int) { + for _, b := range str { + a[b-'a'] -= count + } +} + +func Solution(s string) string { + chars := [26]int{} + for _, b := range s { + chars[b-'a']++ + } + buf := strings.Builder{} + ans := [10]int{} + if chars['z'-'a'] > 0 { + ans[0] = chars[25] + removeChars(&chars, "zero", ans[0]) + } + if chars['w'-'a'] > 0 { + ans[2] = chars['w'-'a'] + removeChars(&chars, "two", ans[2]) + } + if chars['x'-'a'] > 0 { + ans[6] = chars['x'-'a'] + removeChars(&chars, "six", ans[6]) + } + if chars['u'-'a'] > 0 { + ans[4] = chars['u'-'a'] + removeChars(&chars, "four", ans[4]) + } + if chars['f'-'a'] > 0 { + ans[5] = chars['f'-'a'] + removeChars(&chars, "five", ans[5]) + } + + if chars['v'-'a'] > 0 { + ans[7] = chars['v'-'a'] + removeChars(&chars, "seven", ans[7]) + } + if chars['o'-'a'] > 0 { + ans[1] = chars['o'-'a'] + removeChars(&chars, "one", ans[1]) + } + if chars['n'-'a'] > 0 { + ans[9] = chars['n'-'a'] / 2 + removeChars(&chars, "nine", ans[9]) + } + + if chars['r'-'a'] > 0 { + ans[3] = chars['r'-'a'] + removeChars(&chars, "three", ans[3]) + } + if chars['e'-'a'] > 0 { + ans[8] = chars['e'-'a'] + } + for i := 0; i < 10; i++ { + for ; ans[i] > 0; ans[i]-- { + buf.WriteByte(byte(i + 48)) + } + } + return buf.String() } diff --git a/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/Solution_test.go b/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/Solution_test.go index 14ff50eb4..45f594627 100644 --- a/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/Solution_test.go +++ b/leetcode/401-500/0423.Reconstruct-Original-Digits-from-English/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", "owoztneoer", "012"}, + {"TestCase2", "fviefuro", "45"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 69abab2aac11ad91899d2287d0dacdb35252ae4f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 18 Jan 2024 21:44:04 +0800 Subject: [PATCH 105/253] Add solution and test-cases for problem 655 --- .../601-700/0655.Print-Binary-Tree/README.md | 39 +++++++---- .../0655.Print-Binary-Tree/Solution.go | 63 +++++++++++++++++- .../0655.Print-Binary-Tree/Solution_test.go | 30 +++++++-- .../0655.Print-Binary-Tree/print1-tree.jpeg | Bin 0 -> 4176 bytes .../0655.Print-Binary-Tree/print2-tree.jpeg | Bin 0 -> 8558 bytes 5 files changed, 109 insertions(+), 23 deletions(-) create mode 100644 leetcode/601-700/0655.Print-Binary-Tree/print1-tree.jpeg create mode 100644 leetcode/601-700/0655.Print-Binary-Tree/print2-tree.jpeg diff --git a/leetcode/601-700/0655.Print-Binary-Tree/README.md b/leetcode/601-700/0655.Print-Binary-Tree/README.md index 48386f7a3..ac3921069 100644 --- a/leetcode/601-700/0655.Print-Binary-Tree/README.md +++ b/leetcode/601-700/0655.Print-Binary-Tree/README.md @@ -1,28 +1,39 @@ # [655.Print 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, construct a **0-indexed** `m x n` string matrix `res` that represents a **formatted layout** of the tree. The formatted layout matrix should be constructed using the following rules: + +- The **height** of the tree is `height` and the number of rows `m` should be equal to `height + 1`. +- The number of columns `n` should be equal to `2^(height+1) - 1`. +- Place the **root node** in the **middle** of the **top row** (more formally, at location `res[0][(n-1)/2]`). +- For each node that has been placed in the matrix at position `res[r][c]`, place its **left child** at `res[r+1][c-2^(height-r-1)]` and its **right child** at `res[r+1][c+2^(height-r-1)]`. +- Continue this process until all the nodes in the tree have been placed. +- Any empty cells should contain the empty string `""`. + +Return the constructed matrix `res`. -**Example 1:** +**Example 1:** + +![1](./print1-tree.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2] +Output: +[["","1",""], + ["2","",""]] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./print2-tree.jpeg) -### 思路1 -> ... -Print Binary Tree -```go ``` - +Input: root = [1,2,3,null,4] +Output: +[["","","","1","","",""], + ["","2","","","","3",""], + ["","","4","","","",""]] +``` ## 结语 diff --git a/leetcode/601-700/0655.Print-Binary-Tree/Solution.go b/leetcode/601-700/0655.Print-Binary-Tree/Solution.go index d115ccf5e..fa1b61224 100644 --- a/leetcode/601-700/0655.Print-Binary-Tree/Solution.go +++ b/leetcode/601-700/0655.Print-Binary-Tree/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +type TreeNode struct { + Val int + Left, Right *TreeNode +} +type qItem struct { + node *TreeNode + cur int +} + +func treeHight(root *TreeNode) int { + if root == nil { + return 0 + } + left := treeHight(root.Left) + right := treeHight(root.Right) + if left > right { + right = left + } + return right + 1 +} + +func Solution(root *TreeNode) [][]string { + th := treeHight(root) + width := (1 << th) - 1 + ans := make([][]string, th) + + for i := 0; i < th; i++ { + ans[i] = make([]string, width) + } + + th-- + cur := width / 2 + + q := []qItem{{node: root, cur: cur}} + index := 0 + for len(q) > 0 { + nq := make([]qItem, 0) + shift := th - index - 1 + if shift < 0 { + for _, item := range q { + ans[index][item.cur] = fmt.Sprintf("%d", item.node.Val) + } + break + } + + x := 1 << shift + for _, item := range q { + ans[index][item.cur] = fmt.Sprintf("%d", item.node.Val) + if item.node.Left != nil { + nq = append(nq, qItem{node: item.node.Left, cur: item.cur - x}) + } + if item.node.Right != nil { + nq = append(nq, qItem{node: item.node.Right, cur: item.cur + x}) + } + } + q = nq + index++ + } + return ans } diff --git a/leetcode/601-700/0655.Print-Binary-Tree/Solution_test.go b/leetcode/601-700/0655.Print-Binary-Tree/Solution_test.go index 14ff50eb4..defa534b5 100644 --- a/leetcode/601-700/0655.Print-Binary-Tree/Solution_test.go +++ b/leetcode/601-700/0655.Print-Binary-Tree/Solution_test.go @@ -10,12 +10,28 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect [][]string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 2}, + }, [][]string{ + {"", "1", ""}, {"2", "", ""}, + }}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{Val: 3}, + }, [][]string{ + {"", "", "", "1", "", "", ""}, + {"", "2", "", "", "", "3", ""}, + {"", "", "4", "", "", "", ""}, + }}, + {"TestCase3", &TreeNode{Val: 1}, [][]string{{"1"}}}, } // 开始测试 @@ -30,10 +46,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0655.Print-Binary-Tree/print1-tree.jpeg b/leetcode/601-700/0655.Print-Binary-Tree/print1-tree.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7cf8660a9099f61d6d74036197336ccd5de82e9f GIT binary patch literal 4176 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0655.Print-Binary-Tree/print2-tree.jpeg b/leetcode/601-700/0655.Print-Binary-Tree/print2-tree.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..7aab65f7c7532de562c041cf4869a3c24bceeec3 GIT binary patch literal 8558 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 uJ3Y5YN2+nv6IYsy Date: Sat, 20 Jan 2024 21:29:59 +0800 Subject: [PATCH 106/253] Add solution and test-cases for problem 537 --- .../README.md | 29 ++++++----- .../Solution.go | 51 ++++++++++++++++++- .../Solution_test.go | 19 ++++--- 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/leetcode/501-600/0537.Complex-Number-Multiplication/README.md b/leetcode/501-600/0537.Complex-Number-Multiplication/README.md index 25f57e8d6..5de002d6f 100644 --- a/leetcode/501-600/0537.Complex-Number-Multiplication/README.md +++ b/leetcode/501-600/0537.Complex-Number-Multiplication/README.md @@ -1,28 +1,29 @@ # [537.Complex Number Multiplication][title] -> [!WARNING|style:flat] -> 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 [complex number](https://en.wikipedia.org/wiki/Complex_number) can be represented as a string on the form `"real+imaginaryi"` where: + +- `real` is the real part and is an integer in the range `[-100, 100]`. +- `imaginary` is the imaginary part and is an integer in the range `[-100, 100]`. +- `i^2 == -1`. + +Given two complex numbers `num1` and `num2` as strings, return a string of the complex number that represents their multiplications. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num1 = "1+1i", num2 = "1+1i" +Output: "0+2i" +Explanation: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i, and you need convert it to the form of 0+2i. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Complex Number Multiplication -```go ``` - +Input: num1 = "1+-1i", num2 = "1+-1i" +Output: "0+-2i" +Explanation: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i, and you need convert it to the form of 0+-2i. +``` ## 结语 diff --git a/leetcode/501-600/0537.Complex-Number-Multiplication/Solution.go b/leetcode/501-600/0537.Complex-Number-Multiplication/Solution.go index d115ccf5e..ef85ad7c8 100644 --- a/leetcode/501-600/0537.Complex-Number-Multiplication/Solution.go +++ b/leetcode/501-600/0537.Complex-Number-Multiplication/Solution.go @@ -1,5 +1,52 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "strings" +) + +type complexNumber struct { + r, i int +} + +func parseComplexNumber(s string) complexNumber { + cm := complexNumber{} + idx := strings.Index(s, "+") + convert := false + for j := 0; j < idx; j++ { + if s[j] == '-' { + convert = true + continue + } + cm.r = cm.r*10 + int(s[j]-'0') + } + if convert { + cm.r = -cm.r + } + convert = false + for j := idx + 1; j < len(s)-1; j++ { + if s[j] == '-' { + convert = true + continue + } + cm.i = cm.i*10 + int(s[j]-'0') + } + if convert { + cm.i = -cm.i + } + return cm +} +func (c complexNumber) String() string { + return fmt.Sprintf("%d+%di", c.r, c.i) +} + +func mul(a, b complexNumber) complexNumber { + r := a.r*b.r - a.i*b.i + i := a.r*b.i + a.i*b.r + return complexNumber{r: r, i: i} +} +func Solution(num1 string, num2 string) string { + a := parseComplexNumber(num1) + b := parseComplexNumber(num2) + return mul(a, b).String() } diff --git a/leetcode/501-600/0537.Complex-Number-Multiplication/Solution_test.go b/leetcode/501-600/0537.Complex-Number-Multiplication/Solution_test.go index 14ff50eb4..a138175e2 100644 --- a/leetcode/501-600/0537.Complex-Number-Multiplication/Solution_test.go +++ b/leetcode/501-600/0537.Complex-Number-Multiplication/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n1, n2 string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "1+1i", "1+1i", "0+2i"}, + {"TestCase2", "1+-1i", "1+-1i", "0+-2i"}, } // 开始测试 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 a3dfcafce1a71e2abe0560c5aa21928e762d9c1e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 20 Jan 2024 22:30:06 +0800 Subject: [PATCH 107/253] Add solution and test-cases for problem 556 --- .../0556.Next-Greater-Element-III/README.md | 23 +++++------ .../0556.Next-Greater-Element-III/Solution.go | 39 ++++++++++++++++++- .../Solution_test.go | 15 +++---- 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/leetcode/501-600/0556.Next-Greater-Element-III/README.md b/leetcode/501-600/0556.Next-Greater-Element-III/README.md index 11208de00..1fc63f8bf 100644 --- a/leetcode/501-600/0556.Next-Greater-Element-III/README.md +++ b/leetcode/501-600/0556.Next-Greater-Element-III/README.md @@ -1,28 +1,23 @@ # [556.Next Greater Element 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 positive integer `n`, find the smallest integer which has exactly the same digits existing in the integer n and is greater in value than `n`. If no such positive integer exists, return `-1`. + +**Note** that the returned integer should fit in **32-bit integer**, if there is a valid answer but it does not fit in **32-bit integer**, return `-1`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 12 +Output: 21 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Next Greater Element III -```go ``` - +Input: n = 21 +Output: -1 +``` ## 结语 diff --git a/leetcode/501-600/0556.Next-Greater-Element-III/Solution.go b/leetcode/501-600/0556.Next-Greater-Element-III/Solution.go index d115ccf5e..fc9ae6ee5 100644 --- a/leetcode/501-600/0556.Next-Greater-Element-III/Solution.go +++ b/leetcode/501-600/0556.Next-Greater-Element-III/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "math" + "sort" + "strconv" +) + +func Solution(n int) int { + bs := []byte(fmt.Sprint(n)) + l := len(bs) + index := l - 1 + for ; index > 0; index-- { + if bs[index] > bs[index-1] { + break + } + } + if index == 0 { + return -1 + } + + idx := l - 1 + for ; idx >= index; idx-- { + if bs[index-1] < bs[idx] { + break + } + } + bs[index-1], bs[idx] = bs[idx], bs[index-1] + part := bs[index:] + sort.Slice(part, func(i, j int) bool { + return part[i] < part[j] + }) + + n1, _ := strconv.Atoi(string(bs)) + if n1 > math.MaxInt32 { + return -1 + } + return n1 } diff --git a/leetcode/501-600/0556.Next-Greater-Element-III/Solution_test.go b/leetcode/501-600/0556.Next-Greater-Element-III/Solution_test.go index 14ff50eb4..aeb7ca6c1 100644 --- a/leetcode/501-600/0556.Next-Greater-Element-III/Solution_test.go +++ b/leetcode/501-600/0556.Next-Greater-Element-III/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", 12, 21}, + {"TestCase2", 21, -1}, + {"TestCase3", 2147483486, -1}, + {"TestCase4", 34125314, 34125341}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 09cb15c1773e667265a1b6487a130f4edfc32783 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 21 Jan 2024 16:21:18 +0800 Subject: [PATCH 108/253] Add solution and test-cases for problem 640 --- .../601-700/0640.Solve-the-Equation/README.md | 28 +++--- .../0640.Solve-the-Equation/Solution.go | 87 ++++++++++++++++++- .../0640.Solve-the-Equation/Solution_test.go | 67 ++++++++++++-- 3 files changed, 160 insertions(+), 22 deletions(-) diff --git a/leetcode/601-700/0640.Solve-the-Equation/README.md b/leetcode/601-700/0640.Solve-the-Equation/README.md index c88a898aa..488a7c302 100644 --- a/leetcode/601-700/0640.Solve-the-Equation/README.md +++ b/leetcode/601-700/0640.Solve-the-Equation/README.md @@ -1,28 +1,30 @@ # [640.Solve the Equation][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Solve a given equation and return the value of `'x'` in the form of a string `"x=#value"`. The equation contains only `'+'`, `'-'` operation, the variable `'x'` and its coefficient. You should return `"No solution"` if there is no solution for the equation, or `"Infinite solutions"` if there are infinite solutions for the equation. + +If there is exactly one solution for the equation, we ensure that the value of `'x'` is an integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: equation = "x+5-3+x=6+x-2" +Output: "x=2" ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Solve the Equation -```go +``` +Input: equation = "x=x" +Output: "Infinite solutions" ``` +**Example 3:** + +``` +Input: equation = "2x=x" +Output: "x=0" +``` ## 结语 diff --git a/leetcode/601-700/0640.Solve-the-Equation/Solution.go b/leetcode/601-700/0640.Solve-the-Equation/Solution.go index d115ccf5e..dd9f1cb8e 100644 --- a/leetcode/601-700/0640.Solve-the-Equation/Solution.go +++ b/leetcode/601-700/0640.Solve-the-Equation/Solution.go @@ -1,5 +1,88 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "strings" +) + +func parseExpression(exp string) (int, int) { + a, b := 0, 0 + idx := 0 + neg := false + cur := 0 + for ; idx < len(exp); idx++ { + if exp[idx] >= '0' && exp[idx] <= '9' { + cur = cur*10 + int(exp[idx]-'0') + continue + } + + if exp[idx] == 'x' { + if cur == 0 && (idx == 0 || exp[idx-1] != '0') { + cur++ + } + if neg { + cur = -cur + } + a += cur + cur = 0 + } else { + if neg { + cur = -cur + } + b += cur + cur = 0 + neg = exp[idx] == '-' + } + } + if neg { + cur = -cur + } + b += cur + return a, b +} + +func gcd640(a, b int) int { + mod := a % b + for mod != 0 { + a, b = b, mod + mod = a % b + } + return b +} + +func Solution(equation string) string { + expressions := strings.Split(equation, "=") + la, lb := parseExpression(expressions[0]) + ra, rb := parseExpression(expressions[1]) + x := la - ra + y := rb - lb + + if x < 0 { + x = -x + y = -y + } + if x == 0 { + if y != 0 { + return "No solution" + } + return "Infinite solutions" + } + if y != 0 { + a, b := x, y + if a < 0 { + a = -a + } + if b < 0 { + b = -b + } + c := gcd640(a, b) + x /= c + y /= c + } else { + x = 1 + } + if x == 1 { + return fmt.Sprintf("x=%d", y) + } + return fmt.Sprintf("%dx=%d", x, y) } diff --git a/leetcode/601-700/0640.Solve-the-Equation/Solution_test.go b/leetcode/601-700/0640.Solve-the-Equation/Solution_test.go index 14ff50eb4..54f7c7869 100644 --- a/leetcode/601-700/0640.Solve-the-Equation/Solution_test.go +++ b/leetcode/601-700/0640.Solve-the-Equation/Solution_test.go @@ -10,12 +10,15 @@ 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", "x+5-3+x=6+x-2", "x=2"}, + {"TestCase2", "x=x", "Infinite solutions"}, + {"TestCase3", "2x=x", "x=0"}, + {"TestCase4", "2x+3x-6x=x+2", "x=-1"}, + {"TestCase5", "2x+0=0", "x=0"}, + {"TestCase6", "0x=0", "Infinite solutions"}, } // 开始测试 @@ -30,10 +33,60 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +func TestParseExpression(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs string + a, b int + }{ + {"TestCase1", "3x-2x+x-5+3", 2, -2}, + {"TestCase2", "-2x+x-5+3", -1, -2}, + {"TestCase3", "x+5-3+x", 2, 2}, + {"TestCase4", "x", 1, 0}, + {"TestCase5", "6+x-2", 1, 4}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + a, b := parseExpression(c.inputs) + if a != c.a || b != c.b { + t.Fatalf("expected: %v %v, but got: %v %v, with inputs: %v", + c.a, c.b, a, b, c.inputs) + } + }) + } +} + +func TestGCD(t *testing.T) { + // 测试用例 + cases := []struct { + name string + a, b int + expect int + }{ + {"TestCase1", 1, 1, 1}, + {"TestCase2", 8, 4, 4}, + {"TestCase3", 12, 2, 2}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := gcd640(c.a, c.b) + if !reflect.DeepEqual(got, c.expect) { + 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 ca916de73aa27ce16fbba37aea7bf33a31d8fec9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 21 Jan 2024 17:54:53 +0800 Subject: [PATCH 109/253] Add solution and test-cases for problem 522 --- .../README.md | 27 ++++---- .../Solution.go | 65 ++++++++++++++++++- .../Solution_test.go | 14 ++-- 3 files changed, 83 insertions(+), 23 deletions(-) diff --git a/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/README.md b/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/README.md index c684d17ff..4e07f07b8 100644 --- a/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/README.md +++ b/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/README.md @@ -1,28 +1,27 @@ # [522.Longest Uncommon 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 +Given an array of strings `strs`, return the length of the **longest uncommon subsequence** between them. If the longest uncommon subsequence does not exist, return `-1`. + +An **uncommon subsequence** between an array of strings is a string that is a **subsequence of one string but not the others**. + +A **subsequence** of a string `s` is a string that can be obtained after deleting any number of characters from `s`. + +- For example, `"abc"` is a subsequence of `"aebdc"` because you can delete the underlined characters in `"aebdc"` to get `"abc"`. Other subsequences of `"aebdc"` include `"aebdc"`, `"aeb"`, and `""` (empty string). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: strs = ["aba","cdc","eae"] +Output: 3 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Longest Uncommon Subsequence II -```go ``` - +Input: strs = ["aaa","aaa","aa"] +Output: -1 +``` ## 结语 diff --git a/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/Solution.go b/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/Solution.go index d115ccf5e..4d8d0c0f6 100644 --- a/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/Solution.go +++ b/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/Solution.go @@ -1,5 +1,66 @@ package Solution -func Solution(x bool) bool { - return x +func sub522(source string, l, cur int, exist map[string]struct{}, str []byte, result *[]string) { + if l == 0 { + y := string(str) + if _, ok := exist[y]; !ok { + *result = append(*result, y) + exist[y] = struct{}{} + } + return + } + if cur >= len(source) { + return + } + str = append(str, source[cur]) + sub522(source, l-1, cur+1, exist, str, result) + str = str[:len(str)-1] + sub522(source, l, cur+1, exist, str, result) +} + +type lus struct { + source string + subsets []string + exist map[string]struct{} +} + +func Solution(strs []string) int { + length := len(strs) + ls := make([]lus, 0) + exist := make(map[string]int) + for i := range strs { + exist[strs[i]]++ + if exist[strs[i]] > 1 { + continue + } + ls = append(ls, lus{source: strs[i], subsets: make([]string, 0), exist: make(map[string]struct{})}) + li := len(ls) - 1 + for l := len(strs[i]); l > 0; l-- { + sub522(strs[i], l, 0, ls[li].exist, []byte{}, &ls[li].subsets) + } + } + length = len(ls) + ans := -1 + for i := 0; i < length; i++ { + if exist[ls[i].source] > 1 { + continue + } + for _, sub := range ls[i].subsets { + j := 0 + for ; j < length; j++ { + if j == i { + continue + } + if _, ok := ls[j].exist[sub]; ok { + break + } + } + if j == length && len(sub) > ans { + ans = len(sub) + break + } + } + + } + return ans } diff --git a/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/Solution_test.go b/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/Solution_test.go index 14ff50eb4..4d16e5207 100644 --- a/leetcode/501-600/0522.Longest-Uncommon-Subsequence-II/Solution_test.go +++ b/leetcode/501-600/0522.Longest-Uncommon-Subsequence-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", []string{"abc", "cdc", "eae"}, 3}, + {"TestCase2", []string{"aaa", "aaa", "aa"}, -1}, + {"TestCase3", []string{"aabbcc", "aabbcc", "cb"}, 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 410866d22a4efdd1ec566a63a85734b9b178f5d1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 22 Jan 2024 23:39:10 +0800 Subject: [PATCH 110/253] Add solution and test-cases for problem 467 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 25 ++++++++++++-- .../Solution_test.go | 15 +++++---- 3 files changed, 51 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/README.md b/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/README.md index 769093ad6..a3c382837 100644 --- a/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/README.md +++ b/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/README.md @@ -1,28 +1,35 @@ # [467.Unique Substrings in Wraparound 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 +We define the string `base` to be the infinite wraparound string of `"abcdefghijklmnopqrstuvwxyz"`, so `base` will look like this: + +- `"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd...."`. + +Given a string `s`, return the number of **unique non-empty substrings** of `s` are present in `base`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "a" +Output: 1 +Explanation: Only the substring "a" of s is in base. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Unique Substrings in Wraparound String -```go ``` +Input: s = "cac" +Output: 2 +Explanation: There are two substrings ("a", "c") of s in base. +``` + +**Example 3:** +``` +Input: s = "zab" +Output: 6 +Explanation: There are six substrings ("z", "a", "b", "za", "ab", and "zab") of s in base. +``` ## 结语 diff --git a/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution.go b/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution.go index d115ccf5e..a5d57c6b2 100644 --- a/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution.go +++ b/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + length := len(s) + if length == 0 { + return 0 + } + + dp := make([]int, 26) + dp[s[0]-'a'] = 1 + c := 1 + for i := 1; i < length; i++ { + if s[i]-s[i-1] == 1 || s[i-1]-s[i] == 25 { + //ab, za + c++ + } else { + c = 1 + } + dp[s[i]-'a'] = max(dp[s[i]-'a'], c) + } + ans := 0 + for i := 0; i < 26; i++ { + ans += dp[i] + } + return ans } diff --git a/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution_test.go b/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution_test.go index 14ff50eb4..d15541060 100644 --- a/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution_test.go +++ b/leetcode/401-500/0467.Unique-Substrings-in-Wraparound-String/Solution_test.go @@ -10,12 +10,13 @@ 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", "a", 1}, + {"TestCase2", "zab", 6}, + {"TestCase3", "abcdefghijklmnopqrstuvwxyz", 351}, + {"TestCase4", "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyza", 1053}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 842f400124fb3e5cd78c56e14d4577173a4dbde5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 23 Jan 2024 20:51:14 +0800 Subject: [PATCH 111/253] Add solution and test-cases for problem 890 --- .../0890.Find-and-Replace-Pattern/README.md | 27 +++++++------ .../0890.Find-and-Replace-Pattern/Solution.go | 38 ++++++++++++++++++- .../Solution_test.go | 22 +++++------ 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/leetcode/801-900/0890.Find-and-Replace-Pattern/README.md b/leetcode/801-900/0890.Find-and-Replace-Pattern/README.md index 752fd9ea7..bcc93a361 100644 --- a/leetcode/801-900/0890.Find-and-Replace-Pattern/README.md +++ b/leetcode/801-900/0890.Find-and-Replace-Pattern/README.md @@ -1,28 +1,27 @@ # [890.Find and Replace 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 +Given a list of strings `words` and a string `pattern`, return a list of `words[i]` that match `pattern`. You may return the answer in **any order**. + +A word matches the pattern if there exists a permutation of letters `p` so that after replacing every letter `x` in the pattern with `p(x)`, we get the desired word. + +Recall that a permutation of letters is a bijection from letters to letters: every letter maps to another letter, and no two letters map to the same letter. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb" +Output: ["mee","aqq"] +Explanation: "mee" matches the pattern because there is a permutation {a -> m, b -> e, ...}. +"ccc" does not match the pattern because {a -> c, b -> c, ...} is not a permutation, since a and b map to the same letter. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find and Replace Pattern -```go ``` - +Input: words = ["a","b","c"], pattern = "a" +Output: ["a","b","c"] +``` ## 结语 diff --git a/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution.go b/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution.go index d115ccf5e..c6c24da39 100644 --- a/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution.go +++ b/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func uniquePattern(str string) []int { + cache := [26]int{} + i := 1 + cache[str[0]-'a'] = 1 + res := []int{1} + for idx := 1; idx < len(str); idx++ { + if r := cache[str[idx]-'a']; r != 0 { + res = append(res, r) + continue + } + i++ + res = append(res, i) + cache[str[idx]-'a'] = i + } + return res +} + +func Solution(words []string, pattern string) []string { + p := uniquePattern(pattern) + res := make([]string, 0) + for _, word := range words { + p1 := uniquePattern(word) + if len(p) != len(p1) { + continue + } + i := 0 + for ; i < len(p); i++ { + if p[i] != p1[i] { + break + } + } + if i == len(p) { + res = append(res, word) + } + } + return res } diff --git a/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution_test.go b/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution_test.go index 14ff50eb4..c732f2037 100644 --- a/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution_test.go +++ b/leetcode/801-900/0890.Find-and-Replace-Pattern/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []string + pattern string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"abc", "deq", "mee", "aqq", "dkd", "ccc"}, "abb", []string{"mee", "aqq"}}, + {"TestCase2", []string{"a", "b", "c"}, "a", []string{"a", "b", "c"}}, } // 开始测试 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 c96e9dcb3f199bff3ed51310ed8b5e6ae4ab7a08 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 24 Jan 2024 21:21:35 +0800 Subject: [PATCH 112/253] Add solution and test-cases for problem 937 --- .../0937.Reorder-Data-in-Log-Files/README.md | 37 ++++++++++++------- .../Solution.go | 31 +++++++++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 58 insertions(+), 23 deletions(-) diff --git a/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/README.md b/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/README.md index c687ec7ce..0408168cb 100644 --- a/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/README.md +++ b/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/README.md @@ -1,28 +1,37 @@ # [937.Reorder Data in Log Files][title] -> [!WARNING|style:flat] -> 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 `logs`. Each log is a space-delimited string of words, where the first word is the **identifier**. + +There are two types of logs: + +- **Letter-logs**: All words (except the identifier) consist of lowercase English letters. +- **Digit-logs**: All words (except the identifier) consist of digits. + +Reorder these logs so that: + +1. The **letter-logs** come before all **digit-logs**. +2. The **letter-logs** are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers. +3. The **digit-logs** maintain their relative ordering. + +Return the final order of the logs. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"] +Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"] +Explanation: +The letter-log contents are all different, so their ordering is "art can", "art zero", "own kit dig". +The digit-logs have a relative order of "dig1 8 1 5 1", "dig2 3 6". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reorder Data in Log Files -```go ``` - +Input: logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"] +Output: ["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"] +``` ## 结语 diff --git a/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/Solution.go b/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/Solution.go index d115ccf5e..8492b4586 100644 --- a/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/Solution.go +++ b/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func spaceIndex(str string) int { + i := 0 + for ; i < len(str) && str[i] != ' '; i++ { + } + return i +} +func Solution(logs []string) []string { + l := len(logs) + s, e := l-1, l + for ; s >= 0; s-- { + if r := logs[s][len(logs[s])-1]; r >= '0' && r <= '9' { + e-- + logs[s], logs[e] = logs[e], logs[s] + } + } + parts := logs[:e] + sort.Slice(parts, func(i, j int) bool { + ai := spaceIndex(logs[i]) + bi := spaceIndex(logs[j]) + if logs[i][ai+1:] == logs[j][bi+1:] { + return logs[i][:ai] < logs[j][:bi] + } + return logs[i][ai+1:] < logs[j][bi+1:] + }) + return logs } diff --git a/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/Solution_test.go b/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/Solution_test.go index 14ff50eb4..71151e01a 100644 --- a/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/Solution_test.go +++ b/leetcode/901-1000/0937.Reorder-Data-in-Log-Files/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{"dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"}, []string{"let1 art can", "let3 art zero", "let2 own kit dig", "dig1 8 1 5 1", "dig2 3 6"}}, + {"TestCase2", []string{"a1 9 2 3 1", "g1 act car", "zo4 4 7", "ab1 off key dog", "a8 act zoo"}, []string{"g1 act car", "a8 act zoo", "ab1 off key dog", "a1 9 2 3 1", "zo4 4 7"}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 904f4a75b92eb642c654dc6028360a81c48f3173 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 26 Jan 2024 22:13:25 +0800 Subject: [PATCH 113/253] Add solution and test-cases for problem 2023 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 17 +++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/README.md b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/README.md index f9ac380d8..18cf92f99 100755 --- a/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/README.md +++ b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/README.md @@ -1,28 +1,43 @@ # [2023.Number of Pairs of Strings With Concatenation 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 +Given an array of **digit** strings nums and a **digit** string `target`, return the number of pairs of indices `(i, j)` (where `i != j`) such that the **concatenation** of `nums[i] + nums[j]` equals `target`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = ["777","7","77","77"], target = "7777" +Output: 4 +Explanation: Valid pairs are: +- (0, 1): "777" + "7" +- (1, 0): "7" + "777" +- (2, 3): "77" + "77" +- (3, 2): "77" + "77" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Pairs of Strings With Concatenation Equal to Target -```go +``` +Input: nums = ["123","4","12","34"], target = "1234" +Output: 2 +Explanation: Valid pairs are: +- (0, 1): "123" + "4" +- (2, 3): "12" + "34" ``` +**Example 3:** + +``` +Input: nums = ["1","1","1"], target = "11" +Output: 6 +Explanation: Valid pairs are: +- (0, 1): "1" + "1" +- (1, 0): "1" + "1" +- (0, 2): "1" + "1" +- (2, 0): "1" + "1" +- (1, 2): "1" + "1" +- (2, 1): "1" + "1" +``` ## 结语 diff --git a/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution.go b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution.go index d115ccf5e..5472c9e43 100644 --- a/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution.go +++ b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []string, target string) int { + count := make(map[string]int) + for _, s := range nums { + count[s]++ + } + ans := 0 + for i := 1; i < len(target); i++ { + a, b := target[:i], target[i:] + if a != b { + ans += count[a] * count[b] + continue + } + ans += count[a] * (count[a] - 1) + } + return ans } diff --git a/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution_test.go b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution_test.go index 14ff50eb4..9ee7489b0 100644 --- a/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution_test.go +++ b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []string + target string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"777", "7", "77", "77"}, "7777", 4}, + {"TestCase2", []string{"123", "4", "12", "34"}, "1234", 2}, + {"TestCase3", []string{"1", "1", "1"}, "11", 6}, } // 开始测试 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.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.nums, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b92cf03110502660843d1cd9f74b4447505f8fb5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 27 Jan 2024 18:25:29 +0800 Subject: [PATCH 114/253] Add solution and test-cases for problem 629 --- .../0629.K-Inverse-Pairs-Array/README.md | 25 ++++++-------- .../0629.K-Inverse-Pairs-Array/Solution.go | 34 +++++++++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 53 insertions(+), 26 deletions(-) diff --git a/leetcode/601-700/0629.K-Inverse-Pairs-Array/README.md b/leetcode/601-700/0629.K-Inverse-Pairs-Array/README.md index b733b3373..947ef4132 100644 --- a/leetcode/601-700/0629.K-Inverse-Pairs-Array/README.md +++ b/leetcode/601-700/0629.K-Inverse-Pairs-Array/README.md @@ -1,28 +1,25 @@ # [629.K Inverse Pairs 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 +For an integer array `nums`, an **inverse pair** is a pair of integers `[i, j]` where `0 <= i < j < nums.length` and `nums[i] > nums[j]`. + +Given two integers n and k, return the number of different arrays consist of numbers from `1` to `n` such that there are exactly `k` **inverse pairs**. Since the answer can be huge, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, k = 0 +Output: 1 +Explanation: Only the array [1,2,3] which consists of numbers from 1 to 3 has exactly 0 inverse pairs. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -K Inverse Pairs Array -```go ``` - +Input: n = 3, k = 1 +Output: 2 +Explanation: The array [1,3,2] and [2,1,3] have exactly 1 inverse pair. +``` ## 结语 diff --git a/leetcode/601-700/0629.K-Inverse-Pairs-Array/Solution.go b/leetcode/601-700/0629.K-Inverse-Pairs-Array/Solution.go index d115ccf5e..831e0a583 100644 --- a/leetcode/601-700/0629.K-Inverse-Pairs-Array/Solution.go +++ b/leetcode/601-700/0629.K-Inverse-Pairs-Array/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +const mod629 = 1000000007 + +func Solution(n int, k int) int { + dp := [2][]int{} + sum := [2][]int{} + for i := 0; i < 2; i++ { + dp[i] = make([]int, k+1) + sum[i] = make([]int, k+1) + } + dp[1][0] = 1 + for i := 0; i <= k; i++ { + sum[1][i] = 1 + } + loop := 1 + for i := 2; i <= n; i++ { + for j := 0; j <= k; j++ { + dp[1-loop][j] = 0 + if i > j { + dp[1-loop][j] = (dp[1-loop][j] + sum[loop][j]) % mod629 + } else { + dp[1-loop][j] = (dp[1-loop][j] + sum[loop][j] - sum[loop][j-i]) % mod629 + } + + add := 0 + if j > 0 { + add = sum[1-loop][j-1] + } + sum[1-loop][j] = dp[1-loop][j] + add + } + loop = 1 - loop + } + return dp[loop][k] } diff --git a/leetcode/601-700/0629.K-Inverse-Pairs-Array/Solution_test.go b/leetcode/601-700/0629.K-Inverse-Pairs-Array/Solution_test.go index 14ff50eb4..97d7ea00a 100644 --- a/leetcode/601-700/0629.K-Inverse-Pairs-Array/Solution_test.go +++ b/leetcode/601-700/0629.K-Inverse-Pairs-Array/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", 3, 0, 1}, + {"TestCase", 4, 2, 5}, + {"TestCase3", 38, 36, 506617666}, } // 开始测试 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 e939fdf04051c5da10323a6267c27160995917db Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 28 Jan 2024 22:08:02 +0800 Subject: [PATCH 115/253] Add solution and test-cases for problem 525 --- .../501-600/0525.Contiguous-Array/README.md | 23 +++++++--------- .../501-600/0525.Contiguous-Array/Solution.go | 27 +++++++++++++++++-- .../0525.Contiguous-Array/Solution_test.go | 13 +++++---- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/leetcode/501-600/0525.Contiguous-Array/README.md b/leetcode/501-600/0525.Contiguous-Array/README.md index 487d9eab6..267ae2ad9 100644 --- a/leetcode/501-600/0525.Contiguous-Array/README.md +++ b/leetcode/501-600/0525.Contiguous-Array/README.md @@ -1,28 +1,23 @@ # [525.Contiguous 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 binary array `nums`, return the maximum length of a contiguous subarray with an equal number of `0` and `1`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,1] +Output: 2 +Explanation: [0, 1] is the longest contiguous subarray with an equal number of 0 and 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Contiguous Array -```go ``` - +Input: nums = [0,1,0] +Output: 2 +Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1. +``` ## 结语 diff --git a/leetcode/501-600/0525.Contiguous-Array/Solution.go b/leetcode/501-600/0525.Contiguous-Array/Solution.go index d115ccf5e..da32c115e 100644 --- a/leetcode/501-600/0525.Contiguous-Array/Solution.go +++ b/leetcode/501-600/0525.Contiguous-Array/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + sum := 0 + indies := make(map[int]int) + ans := 0 + // 0 0 1 0 0 1 1 + + // 0 1 0 + // -1:0 + // + indies[0] = -1 + for i := 0; i < len(nums); i++ { + add := 1 + if nums[i] == 0 { + add = -1 + } + sum += add + if idx, ok := indies[sum]; ok { + if r := i - idx; r > ans { + ans = r + } + continue + } + indies[sum] = i + } + return ans } diff --git a/leetcode/501-600/0525.Contiguous-Array/Solution_test.go b/leetcode/501-600/0525.Contiguous-Array/Solution_test.go index 14ff50eb4..38f261297 100644 --- a/leetcode/501-600/0525.Contiguous-Array/Solution_test.go +++ b/leetcode/501-600/0525.Contiguous-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{0, 1}, 2}, + {"TestCase2", []int{0, 1, 0}, 2}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 443ea788bb45904b23369d0ffa6c7029f07b07d0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 29 Jan 2024 11:00:22 +0800 Subject: [PATCH 116/253] Add solution and test-cases for problem 1004 --- .../1004.Max-Consecutive-Ones-III/README.md | 25 ++++----- .../1004.Max-Consecutive-Ones-III/Solution.go | 54 ++++++++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/README.md b/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/README.md index 79ba5de51..89f8ea8a9 100644 --- a/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/README.md +++ b/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/README.md @@ -1,28 +1,25 @@ # [1004.Max Consecutive Ones 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 binary array `nums` and an integer `k`, return the maximum number of consecutive `1`'s in the array if you can flip at most `k` `0`'s. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2 +Output: 6 +Explanation: [1,1,1,0,0,1,1,1,1,1,1] +Bolded numbers were flipped from 0 to 1. The longest subarray is underlined. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Max Consecutive Ones III -```go ``` - +Input: nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], k = 3 +Output: 10 +Explanation: [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1] +Bolded numbers were flipped from 0 to 1. The longest subarray is underlined. +``` ## 结语 diff --git a/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/Solution.go b/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/Solution.go index d115ccf5e..c629f37f8 100644 --- a/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/Solution.go +++ b/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/Solution.go @@ -1,5 +1,55 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) int { + zeros := make([]int, 0) + ones := make(map[int]int) + count := 0 + ans := 0 + for i, n := range nums { + if n == 1 { + count++ + if k == 0 { + if count > ans { + ans = count + } + continue + } + + idx := 0 + if len(zeros) > k { + idx = zeros[len(zeros)-k] + } + add := ones[idx] + if diff := i - idx + 1; diff+add > ans { + ans = diff + add + } + } else { + if k == 0 { + count = 0 + continue + } + if k == 1 { + diff := 1 + if len(zeros) > 0 { + diff = max(i - zeros[len(zeros)-1]) + } + if diff > ans { + ans = diff + } + } else { + idx := 0 + if len(zeros) > k-1 { + idx = zeros[len(zeros)-k+1] + } + add := ones[idx] + if diff := i - idx + 1; diff+add > ans { + ans = diff + add + } + } + zeros = append(zeros, i) + ones[i] = count + count = 0 + } + } + return ans } diff --git a/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/Solution_test.go b/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/Solution_test.go index 14ff50eb4..89d166b7a 100644 --- a/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/Solution_test.go +++ b/leetcode/1001-1100/1004.Max-Consecutive-Ones-III/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{1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0}, 2, 6}, + {"TestCase2", []int{0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1}, 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.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 2d14fa75a3c7091833249b9f6d392af7598d7c87 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 29 Jan 2024 20:57:28 +0800 Subject: [PATCH 117/253] Add solution and test-cases for problem 1785 --- .../README.md | 26 +++++++++---------- .../Solution.go | 18 +++++++++++-- .../Solution_test.go | 22 ++++++++-------- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/README.md b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/README.md index 6305cc84f..4fd944800 100755 --- a/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/README.md +++ b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/README.md @@ -1,28 +1,26 @@ # [1785.Minimum Elements to Add to Form a Given 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 two integers `limit` and `goal`. The array `nums` has an interesting property that `abs(nums[i]) <= limit`. + +Return the minimum number of elements you need to add to make the sum of the array equal to `goal`. The array must maintain its property that `abs(nums[i]) <= limit`. + +Note that `abs(x)` equals `x` if `x >= 0`, and `-x` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,-1,1], limit = 3, goal = -4 +Output: 2 +Explanation: You can add -2 and -3, then the sum of the array will be 1 - 1 + 1 - 2 - 3 = -4. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Elements to Add to Form a Given Sum -```go ``` - +Input: nums = [1,-10,9,1], limit = 100, goal = 0 +Output: 1 +``` ## 结语 diff --git a/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution.go b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution.go index d115ccf5e..547d7a3dc 100644 --- a/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution.go +++ b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, limit int, goal int) int { + diff := goal + for _, n := range nums { + diff -= n + } + if diff == 0 { + return 0 + } + if diff < 0 { + diff = -diff + } + a := diff / limit + if diff%limit != 0 { + a++ + } + return a } diff --git a/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution_test.go b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution_test.go index 14ff50eb4..fc264f0a0 100644 --- a/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution_test.go +++ b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/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 + limit, goal int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, -1, 1}, 3, -4, 2}, + {"TestCase2", []int{1, -10, 9, 1}, 100, 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.limit, 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 %v", + c.expect, got, c.nums, c.limit, c.goal) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5d76d9eb0349f08ffb3b47806b1d1f97528fe2ac Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 30 Jan 2024 20:33:04 +0800 Subject: [PATCH 118/253] Add solution and test-cases for problem 930 --- .../0930.Binary-Subarrays-With-Sum/README.md | 28 +++++++++---------- .../Solution.go | 20 +++++++++++-- .../Solution_test.go | 21 +++++++------- 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/README.md b/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/README.md index adc241f22..cb4e5b65d 100644 --- a/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/README.md +++ b/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/README.md @@ -1,28 +1,28 @@ # [930.Binary Subarrays With 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 a binary array `nums` and an integer `goal`, return the number of non-empty **subarrays** with a sum `goal`. + +A **subarray** is a contiguous part of the array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,0,1,0,1], goal = 2 +Output: 4 +Explanation: The 4 subarrays are bolded and underlined below: +[1,0,1,0,1] +[1,0,1,0,1] +[1,0,1,0,1] +[1,0,1,0,1] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Binary Subarrays With Sum -```go ``` - +Input: nums = [0,0,0,0,0], goal = 0 +Output: 15 +``` ## 结语 diff --git a/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution.go b/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution.go index d115ccf5e..c24f3b44b 100644 --- a/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution.go +++ b/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, goal int) int { + count := map[int]int{0: 1} + ans, sum := 0, 0 + for i := 0; i < len(nums); i++ { + sum += nums[i] + diff := goal - sum + if diff > 0 { + count[sum]++ + continue + } + diff = -diff + if r := count[diff]; r > 0 { + ans += r + } + count[sum]++ + } + + return ans } diff --git a/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution_test.go b/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution_test.go index 14ff50eb4..1bebecc87 100644 --- a/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution_test.go +++ b/leetcode/901-1000/0930.Binary-Subarrays-With-Sum/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + goal int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 0, 1, 0, 1}, 2, 4}, + {"TestCase2", []int{0, 0, 0, 0, 0}, 0, 15}, + {"TestCase3", []int{1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1}, 8, 20}, } // 开始测试 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.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.nums, c.goal) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4dac4527079e7e388da42c3dd381a24be989da1b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 31 Jan 2024 21:38:40 +0800 Subject: [PATCH 119/253] Add solution and test-cases for problem 1371 --- .../README.md | 35 +++++++++++++++++++ .../Solution.go | 21 +++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/README.md diff --git a/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/README.md b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/README.md new file mode 100644 index 000000000..676f78916 --- /dev/null +++ b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/README.md @@ -0,0 +1,35 @@ +# [1371.Find the Longest Substring Containing Vowels in Even Counts][title] + +## Description +Given the string `s`, return the size of the longest substring containing each vowel an even number of times. That is, 'a', 'e', 'i', 'o', and 'u' must appear an even number of times. + +**Example 1:** + +``` +Input: s = "eleetminicoworoep" +Output: 13 +Explanation: The longest substring is "leetminicowor" which contains two each of the vowels: e, i and o and zero of the vowels: a and u. +``` + +**Example 2:** + +``` +Input: s = "leetcodeisgreat" +Output: 5 +Explanation: The longest substring is "leetc" which contains two e's. +``` + +**Example 3:** + +``` +Input: s = "bcbcbc" +Output: 6 +Explanation: In this case, the given string "bcbcbc" is the longest because all vowels: a, e, i, o and u appear zero times. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-longest-substring-containing-vowels-in-even-counts +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution.go b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution.go index d115ccf5e..d6bc9c381 100755 --- a/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution.go +++ b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + ans := 0 + shift := map[byte]int{ + 'a': 0, 'e': 1, 'i': 2, 'o': 3, 'u': 4, + } + b := 0 + count := map[int]int{0: -1} + for i, c := range s { + if pos, ok := shift[byte(c)]; ok { + b ^= 1 << pos + if _, ok := count[b]; !ok { + count[b] = i + } + } + if r := i - count[b]; r > ans { + ans = r + } + } + return ans } diff --git a/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution_test.go b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution_test.go index 14ff50eb4..941627f87 100755 --- a/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution_test.go +++ b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/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", "eleetminicoworoep", 13}, + {"TestCase2", "leetcodeisgreat", 5}, + {"TestCase3", "bcbcbc", 6}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6299d0737524b20cc677115bcecd017877c628c7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 1 Feb 2024 09:18:06 +0800 Subject: [PATCH 120/253] add 2901-3000 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 +++++++++++++++++++ .../2906.Construct-Product-Matrix/README.md | 32 +++++++++++++++ .../2906.Construct-Product-Matrix/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 +++++++++++++++++++ .../2917.Find-the-K-or-of-an-Array/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 +++++++++++++++++++ .../2901-3000/2923.Find-Champion-I/README.md | 32 +++++++++++++++ .../2923.Find-Champion-I/Solution.go | 5 +++ .../2923.Find-Champion-I/Solution_test.go | 39 +++++++++++++++++++ .../2901-3000/2924.Find-Champion-II/README.md | 32 +++++++++++++++ .../2924.Find-Champion-II/Solution.go | 5 +++ .../2924.Find-Champion-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 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2932.Maximum-Strong-Pair-XOR-I/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2933.High-Access-Employees/README.md | 32 +++++++++++++++ .../2933.High-Access-Employees/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2935.Maximum-Strong-Pair-XOR-II/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2937.Make-Three-Strings-Equal/README.md | 32 +++++++++++++++ .../2937.Make-Three-Strings-Equal/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2939.Maximum-Xor-Product/README.md | 32 +++++++++++++++ .../2939.Maximum-Xor-Product/Solution.go | 5 +++ .../2939.Maximum-Xor-Product/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 +++++++++++++++++++ .../2901-3000/2951.Find-the-Peaks/README.md | 32 +++++++++++++++ .../2901-3000/2951.Find-the-Peaks/Solution.go | 5 +++ .../2951.Find-the-Peaks/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2953.Count-Complete-Substrings/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 +++++++++++++++++++ .../2974.Minimum-Number-Game/README.md | 32 +++++++++++++++ .../2974.Minimum-Number-Game/Solution.go | 5 +++ .../2974.Minimum-Number-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 +++++++++++++++++++ .../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 +++++++++++++++++++ 226 files changed, 5701 insertions(+) create mode 100755 leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/README.md create mode 100644 leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution.go create mode 100644 leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution_test.go create mode 100755 leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/README.md create mode 100644 leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/Solution.go create mode 100644 leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/Solution_test.go create mode 100755 leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/README.md create mode 100644 leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/Solution.go create mode 100644 leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/Solution_test.go create mode 100755 leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/README.md create mode 100644 leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/Solution.go create mode 100644 leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/Solution_test.go create mode 100755 leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/README.md create mode 100644 leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/Solution.go create mode 100644 leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/Solution_test.go create mode 100755 leetcode/2901-3000/2906.Construct-Product-Matrix/README.md create mode 100644 leetcode/2901-3000/2906.Construct-Product-Matrix/Solution.go create mode 100644 leetcode/2901-3000/2906.Construct-Product-Matrix/Solution_test.go create mode 100755 leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/README.md create mode 100644 leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/Solution.go create mode 100644 leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/Solution_test.go create mode 100755 leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/README.md create mode 100644 leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/Solution.go create mode 100644 leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/Solution_test.go create mode 100755 leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/README.md create mode 100644 leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution.go create mode 100644 leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution_test.go create mode 100755 leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/README.md create mode 100644 leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/Solution.go create mode 100644 leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/Solution_test.go create mode 100755 leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/README.md create mode 100644 leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/Solution.go create mode 100644 leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/Solution_test.go create mode 100755 leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/README.md create mode 100644 leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution.go create mode 100644 leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution_test.go create mode 100755 leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/README.md create mode 100644 leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/Solution.go create mode 100644 leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/Solution_test.go create mode 100755 leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/README.md create mode 100644 leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/Solution.go create mode 100644 leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/Solution_test.go create mode 100755 leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/README.md create mode 100644 leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/Solution.go create mode 100644 leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/Solution_test.go create mode 100755 leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/README.md create mode 100644 leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution.go create mode 100644 leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution_test.go create mode 100755 leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/README.md create mode 100644 leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution.go create mode 100644 leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution_test.go create mode 100755 leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/README.md create mode 100644 leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/Solution.go create mode 100644 leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/Solution_test.go create mode 100755 leetcode/2901-3000/2923.Find-Champion-I/README.md create mode 100644 leetcode/2901-3000/2923.Find-Champion-I/Solution.go create mode 100644 leetcode/2901-3000/2923.Find-Champion-I/Solution_test.go create mode 100755 leetcode/2901-3000/2924.Find-Champion-II/README.md create mode 100644 leetcode/2901-3000/2924.Find-Champion-II/Solution.go create mode 100644 leetcode/2901-3000/2924.Find-Champion-II/Solution_test.go create mode 100755 leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/README.md create mode 100644 leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/Solution.go create mode 100644 leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/Solution_test.go create mode 100755 leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/README.md create mode 100644 leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/Solution.go create mode 100644 leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/Solution_test.go create mode 100755 leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md create mode 100644 leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution.go create mode 100644 leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution_test.go create mode 100755 leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md create mode 100644 leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution.go create mode 100644 leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution_test.go create mode 100755 leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/README.md create mode 100644 leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/Solution.go create mode 100644 leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/Solution_test.go create mode 100755 leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/README.md create mode 100644 leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution.go create mode 100644 leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution_test.go create mode 100755 leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/README.md create mode 100644 leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/Solution.go create mode 100644 leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/Solution_test.go create mode 100755 leetcode/2901-3000/2933.High-Access-Employees/README.md create mode 100644 leetcode/2901-3000/2933.High-Access-Employees/Solution.go create mode 100644 leetcode/2901-3000/2933.High-Access-Employees/Solution_test.go create mode 100755 leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/README.md create mode 100644 leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/Solution.go create mode 100644 leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/Solution_test.go create mode 100755 leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/README.md create mode 100644 leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/Solution.go create mode 100644 leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/Solution_test.go create mode 100755 leetcode/2901-3000/2937.Make-Three-Strings-Equal/README.md create mode 100644 leetcode/2901-3000/2937.Make-Three-Strings-Equal/Solution.go create mode 100644 leetcode/2901-3000/2937.Make-Three-Strings-Equal/Solution_test.go create mode 100755 leetcode/2901-3000/2938.Separate-Black-and-White-Balls/README.md create mode 100644 leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution.go create mode 100644 leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution_test.go create mode 100755 leetcode/2901-3000/2939.Maximum-Xor-Product/README.md create mode 100644 leetcode/2901-3000/2939.Maximum-Xor-Product/Solution.go create mode 100644 leetcode/2901-3000/2939.Maximum-Xor-Product/Solution_test.go create mode 100755 leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/README.md create mode 100644 leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution.go create mode 100644 leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution_test.go create mode 100755 leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md create mode 100644 leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go create mode 100644 leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution_test.go create mode 100755 leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/README.md create mode 100644 leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/Solution.go create mode 100644 leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/Solution_test.go create mode 100755 leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/README.md create mode 100644 leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution.go create mode 100644 leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution_test.go create mode 100755 leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/README.md create mode 100644 leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution.go create mode 100644 leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution_test.go create mode 100755 leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/README.md create mode 100644 leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution.go create mode 100644 leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution_test.go create mode 100755 leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md create mode 100644 leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go create mode 100644 leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution_test.go create mode 100755 leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/README.md create mode 100644 leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution.go create mode 100644 leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution_test.go create mode 100755 leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/README.md create mode 100644 leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/Solution.go create mode 100644 leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/Solution_test.go create mode 100755 leetcode/2901-3000/2951.Find-the-Peaks/README.md create mode 100644 leetcode/2901-3000/2951.Find-the-Peaks/Solution.go create mode 100644 leetcode/2901-3000/2951.Find-the-Peaks/Solution_test.go create mode 100755 leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/README.md create mode 100644 leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution.go create mode 100644 leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution_test.go create mode 100755 leetcode/2901-3000/2953.Count-Complete-Substrings/README.md create mode 100644 leetcode/2901-3000/2953.Count-Complete-Substrings/Solution.go create mode 100644 leetcode/2901-3000/2953.Count-Complete-Substrings/Solution_test.go create mode 100755 leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/README.md create mode 100644 leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/Solution.go create mode 100644 leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/Solution_test.go create mode 100755 leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md create mode 100644 leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution.go create mode 100644 leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution_test.go create mode 100755 leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/README.md create mode 100644 leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/Solution.go create mode 100644 leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/Solution_test.go create mode 100755 leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/README.md create mode 100644 leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/Solution.go create mode 100644 leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/Solution_test.go create mode 100755 leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/README.md create mode 100644 leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution.go create mode 100644 leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution_test.go create mode 100755 leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/README.md create mode 100644 leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/Solution.go create mode 100644 leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/Solution_test.go create mode 100755 leetcode/2901-3000/2961.Double-Modular-Exponentiation/README.md create mode 100644 leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution.go create mode 100644 leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution_test.go create mode 100755 leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/README.md create mode 100644 leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution.go create mode 100644 leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution_test.go create mode 100755 leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/README.md create mode 100644 leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution.go create mode 100644 leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution_test.go create mode 100755 leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/README.md create mode 100644 leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution.go create mode 100644 leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution_test.go create mode 100755 leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/README.md create mode 100644 leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/Solution.go create mode 100644 leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/Solution_test.go create mode 100755 leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/README.md create mode 100644 leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution.go create mode 100644 leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution_test.go create mode 100755 leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/README.md create mode 100644 leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/Solution.go create mode 100644 leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/Solution_test.go create mode 100755 leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/README.md create mode 100644 leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/Solution.go create mode 100644 leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/Solution_test.go create mode 100755 leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md create mode 100644 leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go create mode 100644 leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution_test.go create mode 100755 leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/README.md create mode 100644 leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/Solution.go create mode 100644 leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/Solution_test.go create mode 100755 leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/README.md create mode 100644 leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/Solution.go create mode 100644 leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/Solution_test.go create mode 100755 leetcode/2901-3000/2974.Minimum-Number-Game/README.md create mode 100644 leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go create mode 100644 leetcode/2901-3000/2974.Minimum-Number-Game/Solution_test.go create mode 100755 leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/README.md create mode 100644 leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution.go create mode 100644 leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution_test.go create mode 100755 leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/README.md create mode 100644 leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution.go create mode 100644 leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution_test.go create mode 100755 leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/README.md create mode 100644 leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/Solution.go create mode 100644 leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/Solution_test.go create mode 100755 leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/README.md create mode 100644 leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/Solution.go create mode 100644 leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/Solution_test.go create mode 100755 leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/README.md create mode 100644 leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution.go create mode 100644 leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution_test.go create mode 100755 leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/README.md create mode 100644 leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution.go create mode 100644 leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution_test.go create mode 100755 leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/README.md create mode 100644 leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/Solution.go create mode 100644 leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/Solution_test.go create mode 100755 leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/README.md create mode 100644 leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/Solution.go create mode 100644 leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/Solution_test.go create mode 100755 leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/README.md create mode 100644 leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/Solution.go create mode 100644 leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/Solution_test.go create mode 100755 leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/README.md create mode 100644 leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/Solution.go create mode 100644 leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/Solution_test.go create mode 100755 leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md create mode 100644 leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution.go create mode 100644 leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution_test.go create mode 100755 leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md create mode 100644 leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution.go create mode 100644 leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution_test.go diff --git a/cmd/main.go b/cmd/main.go index 1f121363d..b4d841c69 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -32,6 +32,7 @@ func main() { //leetcode.MakeDirFromTo(problems, 2201, 2300) //leetcode.MakeDirFromTo(problems, 2301, 2400) //leetcode.MakeDirFromTo(problems, 2401, 2500) + //leetcode.MakeDirFromTo(problems, 2901, 3000) // leetcode.MakeDir(problems) 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 new file mode 100755 index 000000000..801bd5a44 --- /dev/null +++ b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Unequal Adjacent Groups Subsequence II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-unequal-adjacent-groups-subsequence-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-Subsequence-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2901.Longest-Unequal-Adjacent-Groups-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/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/README.md b/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/README.md new file mode 100755 index 000000000..fde7bd99d --- /dev/null +++ b/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/README.md @@ -0,0 +1,32 @@ +# [2902.Count of Sub-Multisets With Bounded 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 +> ... +Count of Sub-Multisets With Bounded Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-of-sub-multisets-with-bounded-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/Solution.go b/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/Solution_test.go b/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2902.Count-of-Sub-Multisets-With-Bounded-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/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/README.md b/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/README.md new file mode 100755 index 000000000..a1ff04d3d --- /dev/null +++ b/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/README.md @@ -0,0 +1,32 @@ +# [2903.Find Indices With Index and Value Difference 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 Indices With Index and Value Difference I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-indices-with-index-and-value-difference-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/Solution.go b/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/Solution_test.go b/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2903.Find-Indices-With-Index-and-Value-Difference-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/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/README.md b/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/README.md new file mode 100755 index 000000000..189a01e82 --- /dev/null +++ b/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/README.md @@ -0,0 +1,32 @@ +# [2904.Shortest and Lexicographically Smallest Beautiful 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 +> ... +Shortest and Lexicographically Smallest Beautiful String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shortest-and-lexicographically-smallest-beautiful-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/Solution.go b/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/Solution_test.go b/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2904.Shortest-and-Lexicographically-Smallest-Beautiful-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/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/README.md b/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/README.md new file mode 100755 index 000000000..0b842277c --- /dev/null +++ b/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/README.md @@ -0,0 +1,32 @@ +# [2905.Find Indices With Index and Value Difference 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 Indices With Index and Value Difference II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-indices-with-index-and-value-difference-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/Solution.go b/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/Solution_test.go b/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2905.Find-Indices-With-Index-and-Value-Difference-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/2901-3000/2906.Construct-Product-Matrix/README.md b/leetcode/2901-3000/2906.Construct-Product-Matrix/README.md new file mode 100755 index 000000000..08d4fc070 --- /dev/null +++ b/leetcode/2901-3000/2906.Construct-Product-Matrix/README.md @@ -0,0 +1,32 @@ +# [2906.Construct Product 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 +> ... +Construct Product Matrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-product-matrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2906.Construct-Product-Matrix/Solution.go b/leetcode/2901-3000/2906.Construct-Product-Matrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2906.Construct-Product-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2906.Construct-Product-Matrix/Solution_test.go b/leetcode/2901-3000/2906.Construct-Product-Matrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2906.Construct-Product-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/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/README.md b/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/README.md new file mode 100755 index 000000000..5d6dc1222 --- /dev/null +++ b/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/README.md @@ -0,0 +1,32 @@ +# [2908.Minimum Sum of Mountain 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 +> ... +Minimum Sum of Mountain Triplets I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-sum-of-mountain-triplets-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/Solution.go b/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/Solution_test.go b/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-Triplets-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2908.Minimum-Sum-of-Mountain-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/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/README.md b/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/README.md new file mode 100755 index 000000000..e58b621ea --- /dev/null +++ b/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/README.md @@ -0,0 +1,32 @@ +# [2909.Minimum Sum of Mountain 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 +> ... +Minimum Sum of Mountain Triplets II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-sum-of-mountain-triplets-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/Solution.go b/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/Solution_test.go b/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-Triplets-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2909.Minimum-Sum-of-Mountain-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/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/README.md b/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/README.md new file mode 100755 index 000000000..f56a04f5c --- /dev/null +++ b/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/README.md @@ -0,0 +1,32 @@ +# [2910.Minimum Number of Groups to Create a Valid Assignment][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Groups to Create a Valid Assignment +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-groups-to-create-a-valid-assignment/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution.go b/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution_test.go b/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2910.Minimum-Number-of-Groups-to-Create-a-Valid-Assignment/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/README.md b/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/README.md new file mode 100755 index 000000000..7f0206236 --- /dev/null +++ b/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/README.md @@ -0,0 +1,32 @@ +# [2911.Minimum Changes to Make K Semi-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 +> ... +Minimum Changes to Make K Semi-palindromes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-changes-to-make-k-semi-palindromes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/Solution.go b/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/Solution_test.go b/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-palindromes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2911.Minimum-Changes-to-Make-K-Semi-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/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/README.md b/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/README.md new file mode 100755 index 000000000..d02ac637c --- /dev/null +++ b/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/README.md @@ -0,0 +1,32 @@ +# [2913.Subarrays Distinct Element Sum of 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 +> ... +Subarrays Distinct Element Sum of Squares I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/subarrays-distinct-element-sum-of-squares-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/Solution.go b/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/Solution_test.go b/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-Squares-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2913.Subarrays-Distinct-Element-Sum-of-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/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 new file mode 100755 index 000000000..f0661fed0 --- /dev/null +++ b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Changes to Make Binary String Beautiful +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-changes-to-make-binary-string-beautiful/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2914.Minimum-Number-of-Changes-to-Make-Binary-String-Beautiful/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/README.md b/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/README.md new file mode 100755 index 000000000..b7a322a9c --- /dev/null +++ b/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/README.md @@ -0,0 +1,32 @@ +# [2915.Length of the Longest Subsequence That Sums 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 +> ... +Length of the Longest Subsequence That Sums to Target +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/length-of-the-longest-subsequence-that-sums-to-target/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/Solution.go b/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/Solution_test.go b/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-to-Target/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2915.Length-of-the-Longest-Subsequence-That-Sums-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/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/README.md b/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/README.md new file mode 100755 index 000000000..36e09d14a --- /dev/null +++ b/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/README.md @@ -0,0 +1,32 @@ +# [2916.Subarrays Distinct Element Sum of 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 +> ... +Subarrays Distinct Element Sum of Squares II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/subarrays-distinct-element-sum-of-squares-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/Solution.go b/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/Solution_test.go b/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-Squares-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2916.Subarrays-Distinct-Element-Sum-of-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/2901-3000/2917.Find-the-K-or-of-an-Array/README.md b/leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/README.md new file mode 100755 index 000000000..1c12c54cc --- /dev/null +++ b/leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/README.md @@ -0,0 +1,32 @@ +# [2917.Find the K-or 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the K-or of an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-k-or-of-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/Solution.go b/leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/Solution_test.go b/leetcode/2901-3000/2917.Find-the-K-or-of-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2917.Find-the-K-or-of-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/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 new file mode 100755 index 000000000..824091e70 --- /dev/null +++ b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Equal Sum of Two Arrays After Replacing Zeros +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-equal-sum-of-two-arrays-after-replacing-zeros/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-Zeros/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2918.Minimum-Equal-Sum-of-Two-Arrays-After-Replacing-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/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/README.md b/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/README.md new file mode 100755 index 000000000..731e12d2e --- /dev/null +++ b/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/README.md @@ -0,0 +1,32 @@ +# [2919.Minimum Increment Operations to Make Array 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Increment Operations to Make Array Beautiful +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-increment-operations-to-make-array-beautiful/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution.go b/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution_test.go b/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2919.Minimum-Increment-Operations-to-Make-Array-Beautiful/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/README.md b/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/README.md new file mode 100755 index 000000000..8cd482471 --- /dev/null +++ b/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/README.md @@ -0,0 +1,32 @@ +# [2920.Maximum Points After Collecting Coins From 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 +> ... +Maximum Points After Collecting Coins From All Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-points-after-collecting-coins-from-all-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/Solution.go b/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/Solution_test.go b/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-All-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2920.Maximum-Points-After-Collecting-Coins-From-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/2901-3000/2923.Find-Champion-I/README.md b/leetcode/2901-3000/2923.Find-Champion-I/README.md new file mode 100755 index 000000000..65e2e6a34 --- /dev/null +++ b/leetcode/2901-3000/2923.Find-Champion-I/README.md @@ -0,0 +1,32 @@ +# [2923.Find Champion 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 Champion I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-champion-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2923.Find-Champion-I/Solution.go b/leetcode/2901-3000/2923.Find-Champion-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2923.Find-Champion-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2923.Find-Champion-I/Solution_test.go b/leetcode/2901-3000/2923.Find-Champion-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2923.Find-Champion-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/2901-3000/2924.Find-Champion-II/README.md b/leetcode/2901-3000/2924.Find-Champion-II/README.md new file mode 100755 index 000000000..e70b0d4b0 --- /dev/null +++ b/leetcode/2901-3000/2924.Find-Champion-II/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Champion II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-champion-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2924.Find-Champion-II/Solution.go b/leetcode/2901-3000/2924.Find-Champion-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2924.Find-Champion-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2924.Find-Champion-II/Solution_test.go b/leetcode/2901-3000/2924.Find-Champion-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2924.Find-Champion-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/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/README.md b/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/README.md new file mode 100755 index 000000000..4f6655659 --- /dev/null +++ b/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/README.md @@ -0,0 +1,32 @@ +# [2925.Maximum Score After Applying Operations 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score After Applying Operations on a Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-after-applying-operations-on-a-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/Solution.go b/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/Solution_test.go b/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2925.Maximum-Score-After-Applying-Operations-on-a-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/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/README.md b/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/README.md new file mode 100755 index 000000000..80605486e --- /dev/null +++ b/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/README.md @@ -0,0 +1,32 @@ +# [2926.Maximum Balanced Subsequence 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 +> ... +Maximum Balanced Subsequence Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-balanced-subsequence-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/Solution.go b/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/Solution_test.go b/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2926.Maximum-Balanced-Subsequence-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/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md new file mode 100755 index 000000000..db6244dd4 --- /dev/null +++ b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Distribute Candies Among Children I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/distribute-candies-among-children-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2928.Distribute-Candies-Among-Children-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/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md new file mode 100755 index 000000000..9a3d29d09 --- /dev/null +++ b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Distribute Candies Among Children II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/distribute-candies-among-children-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2929.Distribute-Candies-Among-Children-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/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/README.md b/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/README.md new file mode 100755 index 000000000..0e983b216 --- /dev/null +++ b/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/README.md @@ -0,0 +1,32 @@ +# [2930.Number of Strings Which Can Be Rearranged to Contain 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 +> ... +Number of Strings Which Can Be Rearranged to Contain Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-strings-which-can-be-rearranged-to-contain-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/Solution.go b/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/Solution_test.go b/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2930.Number-of-Strings-Which-Can-Be-Rearranged-to-Contain-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/2901-3000/2931.Maximum-Spending-After-Buying-Items/README.md b/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/README.md new file mode 100755 index 000000000..4d0fb76fa --- /dev/null +++ b/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/README.md @@ -0,0 +1,32 @@ +# [2931.Maximum Spending After Buying Items][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Spending After Buying Items +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-spending-after-buying-items/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution.go b/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution_test.go b/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2931.Maximum-Spending-After-Buying-Items/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/README.md b/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/README.md new file mode 100755 index 000000000..48bfefdda --- /dev/null +++ b/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/README.md @@ -0,0 +1,32 @@ +# [2932.Maximum Strong Pair XOR 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 Strong Pair XOR I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-strong-pair-xor-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/Solution.go b/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/Solution_test.go b/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2932.Maximum-Strong-Pair-XOR-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/2901-3000/2933.High-Access-Employees/README.md b/leetcode/2901-3000/2933.High-Access-Employees/README.md new file mode 100755 index 000000000..6dc891c0d --- /dev/null +++ b/leetcode/2901-3000/2933.High-Access-Employees/README.md @@ -0,0 +1,32 @@ +# [2933.High-Access Employees][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +High-Access Employees +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/high-access-employees/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2933.High-Access-Employees/Solution.go b/leetcode/2901-3000/2933.High-Access-Employees/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2933.High-Access-Employees/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2933.High-Access-Employees/Solution_test.go b/leetcode/2901-3000/2933.High-Access-Employees/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2933.High-Access-Employees/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/README.md b/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/README.md new file mode 100755 index 000000000..6f1088535 --- /dev/null +++ b/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/README.md @@ -0,0 +1,32 @@ +# [2934.Minimum Operations to Maximize Last Elements in 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 +> ... +Minimum Operations to Maximize Last Elements in Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-maximize-last-elements-in-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/Solution.go b/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/Solution_test.go b/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-Arrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2934.Minimum-Operations-to-Maximize-Last-Elements-in-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/2901-3000/2935.Maximum-Strong-Pair-XOR-II/README.md b/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/README.md new file mode 100755 index 000000000..18207a8e7 --- /dev/null +++ b/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/README.md @@ -0,0 +1,32 @@ +# [2935.Maximum Strong Pair XOR 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 Strong Pair XOR II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-strong-pair-xor-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/Solution.go b/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/Solution_test.go b/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2935.Maximum-Strong-Pair-XOR-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/2901-3000/2937.Make-Three-Strings-Equal/README.md b/leetcode/2901-3000/2937.Make-Three-Strings-Equal/README.md new file mode 100755 index 000000000..bfc768a2a --- /dev/null +++ b/leetcode/2901-3000/2937.Make-Three-Strings-Equal/README.md @@ -0,0 +1,32 @@ +# [2937.Make Three 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Make Three Strings Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-three-strings-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2937.Make-Three-Strings-Equal/Solution.go b/leetcode/2901-3000/2937.Make-Three-Strings-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2937.Make-Three-Strings-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2937.Make-Three-Strings-Equal/Solution_test.go b/leetcode/2901-3000/2937.Make-Three-Strings-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2937.Make-Three-Strings-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/2901-3000/2938.Separate-Black-and-White-Balls/README.md b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/README.md new file mode 100755 index 000000000..2bcecf0ec --- /dev/null +++ b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Separate Black and White Balls +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/separate-black-and-white-balls/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2938.Separate-Black-and-White-Balls/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2938.Separate-Black-and-White-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/2901-3000/2939.Maximum-Xor-Product/README.md b/leetcode/2901-3000/2939.Maximum-Xor-Product/README.md new file mode 100755 index 000000000..01d40ec71 --- /dev/null +++ b/leetcode/2901-3000/2939.Maximum-Xor-Product/README.md @@ -0,0 +1,32 @@ +# [2939.Maximum Xor 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Xor Product +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-xor-product/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2939.Maximum-Xor-Product/Solution.go b/leetcode/2901-3000/2939.Maximum-Xor-Product/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2939.Maximum-Xor-Product/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2939.Maximum-Xor-Product/Solution_test.go b/leetcode/2901-3000/2939.Maximum-Xor-Product/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2939.Maximum-Xor-Product/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..b751ffef2 --- /dev/null +++ b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Building Where Alice and Bob Can Meet +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-building-where-alice-and-bob-can-meet/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2940.Find-Building-Where-Alice-and-Bob-Can-Meet/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md b/leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md new file mode 100755 index 000000000..5c7d45dd4 --- /dev/null +++ b/leetcode/2901-3000/2942.Find-Words-Containing-Character/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Words Containing Character +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-words-containing-character/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go b/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2942.Find-Words-Containing-Character/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/README.md b/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/README.md new file mode 100755 index 000000000..dd0acabdb --- /dev/null +++ b/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/README.md @@ -0,0 +1,32 @@ +# [2943.Maximize Area of Square Hole in 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 +> ... +Maximize Area of Square Hole in Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-area-of-square-hole-in-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/Solution.go b/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/Solution_test.go b/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2943.Maximize-Area-of-Square-Hole-in-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/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/README.md b/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/README.md new file mode 100755 index 000000000..62ce74f3e --- /dev/null +++ b/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/README.md @@ -0,0 +1,32 @@ +# [2944.Minimum Number of Coins for Fruits][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Coins for Fruits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-coins-for-fruits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution.go b/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution_test.go b/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2944.Minimum-Number-of-Coins-for-Fruits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/README.md b/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/README.md new file mode 100755 index 000000000..07124a835 --- /dev/null +++ b/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/README.md @@ -0,0 +1,32 @@ +# [2945.Find Maximum Non-decreasing Array Length][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Non-decreasing Array Length +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-maximum-non-decreasing-array-length/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution.go b/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution_test.go b/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2945.Find-Maximum-Non-decreasing-Array-Length/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/README.md b/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/README.md new file mode 100755 index 000000000..0704ade85 --- /dev/null +++ b/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/README.md @@ -0,0 +1,32 @@ +# [2946.Matrix Similarity After Cyclic Shifts][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Matrix Similarity After Cyclic Shifts +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/matrix-similarity-after-cyclic-shifts/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution.go b/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution_test.go b/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2946.Matrix-Similarity-After-Cyclic-Shifts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md new file mode 100755 index 000000000..d5c89744f --- /dev/null +++ b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Beautiful Substrings I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-beautiful-substrings-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2947.Count-Beautiful-Substrings-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/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 new file mode 100755 index 000000000..efc2d439c --- /dev/null +++ b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Make Lexicographically Smallest Array by Swapping Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-lexicographically-smallest-array-by-swapping-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2948.Make-Lexicographically-Smallest-Array-by-Swapping-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/2901-3000/2949.Count-Beautiful-Substrings-II/README.md b/leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/README.md new file mode 100755 index 000000000..40c4439e1 --- /dev/null +++ b/leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/README.md @@ -0,0 +1,32 @@ +# [2949.Count Beautiful Substrings 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 Beautiful Substrings II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-beautiful-substrings-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/Solution.go b/leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/Solution_test.go b/leetcode/2901-3000/2949.Count-Beautiful-Substrings-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2949.Count-Beautiful-Substrings-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/2901-3000/2951.Find-the-Peaks/README.md b/leetcode/2901-3000/2951.Find-the-Peaks/README.md new file mode 100755 index 000000000..2ef156713 --- /dev/null +++ b/leetcode/2901-3000/2951.Find-the-Peaks/README.md @@ -0,0 +1,32 @@ +# [2951.Find the Peaks][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Peaks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-peaks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2951.Find-the-Peaks/Solution.go b/leetcode/2901-3000/2951.Find-the-Peaks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2951.Find-the-Peaks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2951.Find-the-Peaks/Solution_test.go b/leetcode/2901-3000/2951.Find-the-Peaks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2951.Find-the-Peaks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/README.md b/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/README.md new file mode 100755 index 000000000..19bc05216 --- /dev/null +++ b/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/README.md @@ -0,0 +1,32 @@ +# [2952.Minimum Number of Coins to be Added][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Coins to be Added +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-coins-to-be-added/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution.go b/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution_test.go b/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2952.Minimum-Number-of-Coins-to-be-Added/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2953.Count-Complete-Substrings/README.md b/leetcode/2901-3000/2953.Count-Complete-Substrings/README.md new file mode 100755 index 000000000..ff36a6025 --- /dev/null +++ b/leetcode/2901-3000/2953.Count-Complete-Substrings/README.md @@ -0,0 +1,32 @@ +# [2953.Count Complete 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 Complete Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-complete-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2953.Count-Complete-Substrings/Solution.go b/leetcode/2901-3000/2953.Count-Complete-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2953.Count-Complete-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2953.Count-Complete-Substrings/Solution_test.go b/leetcode/2901-3000/2953.Count-Complete-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2953.Count-Complete-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/2901-3000/2954.Count-the-Number-of-Infection-Sequences/README.md b/leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/README.md new file mode 100755 index 000000000..c21c5fe2e --- /dev/null +++ b/leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/README.md @@ -0,0 +1,32 @@ +# [2954.Count the Number of Infection 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 Infection Sequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-infection-sequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/Solution.go b/leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/Solution_test.go b/leetcode/2901-3000/2954.Count-the-Number-of-Infection-Sequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2954.Count-the-Number-of-Infection-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/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md new file mode 100755 index 000000000..b9ac28e49 --- /dev/null +++ b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Common Elements Between Two Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-common-elements-between-two-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2956.Find-Common-Elements-Between-Two-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/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/README.md b/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/README.md new file mode 100755 index 000000000..228936c7b --- /dev/null +++ b/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/README.md @@ -0,0 +1,32 @@ +# [2957.Remove Adjacent Almost-Equal 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 +> ... +Remove Adjacent Almost-Equal Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-adjacent-almost-equal-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/Solution.go b/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/Solution_test.go b/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2957.Remove-Adjacent-Almost-Equal-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/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/README.md b/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/README.md new file mode 100755 index 000000000..c0e42abbf --- /dev/null +++ b/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/README.md @@ -0,0 +1,32 @@ +# [2958.Length of Longest Subarray With at Most K 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 +> ... +Length of Longest Subarray With at Most K Frequency +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/length-of-longest-subarray-with-at-most-k-frequency/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/Solution.go b/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/Solution_test.go b/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-Frequency/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2958.Length-of-Longest-Subarray-With-at-Most-K-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/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/README.md b/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/README.md new file mode 100755 index 000000000..4afca7876 --- /dev/null +++ b/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/README.md @@ -0,0 +1,32 @@ +# [2959.Number of Possible Sets of Closing Branches][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Possible Sets of Closing Branches +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-possible-sets-of-closing-branches/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution.go b/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution_test.go b/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2959.Number-of-Possible-Sets-of-Closing-Branches/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/README.md b/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/README.md new file mode 100755 index 000000000..edf373a4c --- /dev/null +++ b/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/README.md @@ -0,0 +1,32 @@ +# [2960.Count Tested Devices After Test 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 Tested Devices After Test Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-tested-devices-after-test-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/Solution.go b/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/Solution_test.go b/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2960.Count-Tested-Devices-After-Test-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/2901-3000/2961.Double-Modular-Exponentiation/README.md b/leetcode/2901-3000/2961.Double-Modular-Exponentiation/README.md new file mode 100755 index 000000000..182492649 --- /dev/null +++ b/leetcode/2901-3000/2961.Double-Modular-Exponentiation/README.md @@ -0,0 +1,32 @@ +# [2961.Double Modular Exponentiation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Double Modular Exponentiation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/double-modular-exponentiation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution.go b/leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution_test.go b/leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2961.Double-Modular-Exponentiation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/README.md b/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/README.md new file mode 100755 index 000000000..33dacd7dc --- /dev/null +++ b/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/README.md @@ -0,0 +1,32 @@ +# [2962.Count Subarrays Where Max Element Appears at Least 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:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Subarrays Where Max Element Appears at Least K Times +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-subarrays-where-max-element-appears-at-least-k-times/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution.go b/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution_test.go b/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2962.Count-Subarrays-Where-Max-Element-Appears-at-Least-K-Times/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/README.md b/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/README.md new file mode 100755 index 000000000..316682d53 --- /dev/null +++ b/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/README.md @@ -0,0 +1,32 @@ +# [2963.Count the Number of Good Partitions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Partitions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-good-partitions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution.go b/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution_test.go b/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2963.Count-the-Number-of-Good-Partitions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..ef1e2e001 --- /dev/null +++ b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Missing and Repeated Values +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-missing-and-repeated-values/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2965.Find-Missing-and-Repeated-Values/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/README.md b/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/README.md new file mode 100755 index 000000000..41c3e5d19 --- /dev/null +++ b/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/README.md @@ -0,0 +1,32 @@ +# [2966.Divide Array Into Arrays With Max 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 +> ... +Divide Array Into Arrays With Max Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/divide-array-into-arrays-with-max-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/Solution.go b/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/Solution_test.go b/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2966.Divide-Array-Into-Arrays-With-Max-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/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/README.md b/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/README.md new file mode 100755 index 000000000..c23f12070 --- /dev/null +++ b/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/README.md @@ -0,0 +1,32 @@ +# [2967.Minimum Cost to Make Array Equalindromic][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Array Equalindromic +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-make-array-equalindromic/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution.go b/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution_test.go b/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2967.Minimum-Cost-to-Make-Array-Equalindromic/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/README.md b/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/README.md new file mode 100755 index 000000000..0ebdfc7a2 --- /dev/null +++ b/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/README.md @@ -0,0 +1,32 @@ +# [2968.Apply Operations to Maximize Frequency 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 +> ... +Apply Operations to Maximize Frequency Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/apply-operations-to-maximize-frequency-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/Solution.go b/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/Solution_test.go b/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2968.Apply-Operations-to-Maximize-Frequency-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/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/README.md b/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/README.md new file mode 100755 index 000000000..8bceb41a0 --- /dev/null +++ b/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/README.md @@ -0,0 +1,32 @@ +# [2970.Count the Number of Incremovable 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 +> ... +Count the Number of Incremovable Subarrays I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-incremovable-subarrays-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/Solution.go b/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/Solution_test.go b/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-Subarrays-I/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2970.Count-the-Number-of-Incremovable-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/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md new file mode 100755 index 000000000..043aa2c02 --- /dev/null +++ b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md @@ -0,0 +1,32 @@ +# [2971.Find Polygon With the Largest Perimeter][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Polygon With the Largest Perimeter +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-polygon-with-the-largest-perimeter/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution_test.go b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/README.md b/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/README.md new file mode 100755 index 000000000..9aa9fce64 --- /dev/null +++ b/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/README.md @@ -0,0 +1,32 @@ +# [2972.Count the Number of Incremovable 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 +> ... +Count the Number of Incremovable Subarrays II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-incremovable-subarrays-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/Solution.go b/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/Solution_test.go b/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-Subarrays-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2972.Count-the-Number-of-Incremovable-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/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/README.md b/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/README.md new file mode 100755 index 000000000..334dc1024 --- /dev/null +++ b/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/README.md @@ -0,0 +1,32 @@ +# [2973.Find Number of Coins to Place in Tree 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 +> ... +Find Number of Coins to Place in Tree Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-number-of-coins-to-place-in-tree-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/Solution.go b/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/Solution_test.go b/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2973.Find-Number-of-Coins-to-Place-in-Tree-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/2901-3000/2974.Minimum-Number-Game/README.md b/leetcode/2901-3000/2974.Minimum-Number-Game/README.md new file mode 100755 index 000000000..dbf7beab5 --- /dev/null +++ b/leetcode/2901-3000/2974.Minimum-Number-Game/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go b/leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2974.Minimum-Number-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2974.Minimum-Number-Game/Solution_test.go b/leetcode/2901-3000/2974.Minimum-Number-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2974.Minimum-Number-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/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/README.md b/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/README.md new file mode 100755 index 000000000..82609cf18 --- /dev/null +++ b/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/README.md @@ -0,0 +1,32 @@ +# [2975.Maximum Square Area by Removing Fences From a Field][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Square Area by Removing Fences From a Field +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-square-area-by-removing-fences-from-a-field/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution.go b/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution_test.go b/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2975.Maximum-Square-Area-by-Removing-Fences-From-a-Field/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..8ba671eac --- /dev/null +++ b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Convert String I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-convert-string-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-String-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2976.Minimum-Cost-to-Convert-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/2901-3000/2977.Minimum-Cost-to-Convert-String-II/README.md b/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/README.md new file mode 100755 index 000000000..f626c1470 --- /dev/null +++ b/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/README.md @@ -0,0 +1,32 @@ +# [2977.Minimum Cost to Convert 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 +> ... +Minimum Cost to Convert String II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-convert-string-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/Solution.go b/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/Solution_test.go b/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-String-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2977.Minimum-Cost-to-Convert-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/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/README.md b/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/README.md new file mode 100755 index 000000000..b873ccb71 --- /dev/null +++ b/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/README.md @@ -0,0 +1,32 @@ +# [2980.Check if Bitwise OR Has Trailing 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 +> ... +Check if Bitwise OR Has Trailing Zeros +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-bitwise-or-has-trailing-zeros/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/Solution.go b/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/Solution_test.go b/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-Zeros/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2980.Check-if-Bitwise-OR-Has-Trailing-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/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 new file mode 100755 index 000000000..dea27366d --- /dev/null +++ b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Longest Special Substring That Occurs Thrice I +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-longest-special-substring-that-occurs-thrice-i/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2981.Find-Longest-Special-Substring-That-Occurs-Thrice-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/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 new file mode 100755 index 000000000..79c904a73 --- /dev/null +++ b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/README.md @@ -0,0 +1,32 @@ +# [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) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Longest Special Substring That Occurs Thrice II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-longest-special-substring-that-occurs-thrice-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2982.Find-Longest-Special-Substring-That-Occurs-Thrice-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/2901-3000/2983.Palindrome-Rearrangement-Queries/README.md b/leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/README.md new file mode 100755 index 000000000..9536e444e --- /dev/null +++ b/leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/README.md @@ -0,0 +1,32 @@ +# [2983.Palindrome Rearrangement 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 +> ... +Palindrome Rearrangement Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/palindrome-rearrangement-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/Solution.go b/leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/Solution_test.go b/leetcode/2901-3000/2983.Palindrome-Rearrangement-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2983.Palindrome-Rearrangement-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/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/README.md b/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/README.md new file mode 100755 index 000000000..c8253a48f --- /dev/null +++ b/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/README.md @@ -0,0 +1,32 @@ +# [2996.Smallest Missing Integer Greater Than Sequential Prefix 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 +> ... +Smallest Missing Integer Greater Than Sequential Prefix Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-missing-integer-greater-than-sequential-prefix-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/Solution.go b/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/Solution_test.go b/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2996.Smallest-Missing-Integer-Greater-Than-Sequential-Prefix-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/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/README.md b/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/README.md new file mode 100755 index 000000000..524b96794 --- /dev/null +++ b/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/README.md @@ -0,0 +1,32 @@ +# [2997.Minimum Number of Operations to Make Array XOR 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 Number of Operations to Make Array XOR Equal to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-array-xor-equal-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/Solution.go b/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/Solution_test.go b/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-Equal-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2997.Minimum-Number-of-Operations-to-Make-Array-XOR-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/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/README.md b/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/README.md new file mode 100755 index 000000000..530b4ec73 --- /dev/null +++ b/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/README.md @@ -0,0 +1,32 @@ +# [2998.Minimum Number of Operations to Make X and Y 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 Number of Operations to Make X and Y Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-x-and-y-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/Solution.go b/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/Solution_test.go b/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2998.Minimum-Number-of-Operations-to-Make-X-and-Y-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/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md new file mode 100755 index 000000000..d3f7f55d0 --- /dev/null +++ b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Powerful Integers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-powerful-integers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-Integers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/2999.Count-the-Number-of-Powerful-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/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md new file mode 100755 index 000000000..8608d0ffb --- /dev/null +++ b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Area of Longest Diagonal Rectangle +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-area-of-longest-diagonal-rectangle/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2901-3000/3000.Maximum-Area-of-Longest-Diagonal-Rectangle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, 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 c551b636c18e525461d42af75658fecbd926489b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 1 Feb 2024 20:36:56 +0800 Subject: [PATCH 121/253] Add solution and test-cases for problem 1524 --- .../README.md | 34 ++++++++++++------- .../Solution.go | 19 +++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/README.md b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/README.md index 8b3200054..2db5fdfc7 100755 --- a/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/README.md +++ b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/README.md @@ -1,28 +1,36 @@ # [1524.Number of Sub-arrays With Odd 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 integers `arr`, return the number of subarrays with an **odd** sum. + +Since the answer can be very large, return it modulo `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,3,5] +Output: 4 +Explanation: All subarrays are [[1],[1,3],[1,3,5],[3],[3,5],[5]] +All sub-arrays sum are [1,4,9,3,8,5]. +Odd sums are [1,9,3,5] so the answer is 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Sub-arrays With Odd Sum -```go +``` +Input: arr = [2,4,6] +Output: 0 +Explanation: All subarrays are [[2],[2,4],[2,4,6],[4],[4,6],[6]] +All sub-arrays sum are [2,6,12,4,10,6]. +All sub-arrays have even sum and the answer is 0. ``` +**Example 3:** + +``` +Input: arr = [1,2,3,4,5,6,7] +Output: 16 +``` ## 结语 diff --git a/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution.go b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution.go index d115ccf5e..5334965f3 100644 --- a/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution.go +++ b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +const mod1524 = 1000000007 + +func Solution(arr []int) int { + ans := 0 + e, o := 1, 0 + sum := 0 + for _, n := range arr { + sum += n + if sum&1 == 0 { + ans = (ans + o) % mod1524 + e++ + } else { + ans = (ans + e) % mod1524 + o++ + } + } + return ans } diff --git a/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution_test.go b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution_test.go index 14ff50eb4..14a01066e 100644 --- a/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution_test.go +++ b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-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{1, 3, 5}, 4}, + {"TestCase2", []int{2, 4, 6}, 0}, + {"TestCase3", []int{1, 2, 3, 4, 5, 6, 7}, 16}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4bf3a7384303fb929094ac420b0f1f7f47dde2f3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 2 Feb 2024 09:29:49 +0800 Subject: [PATCH 122/253] Add solution and test-cases for problem 1291 --- .../1291.Sequential-Digits/README.md | 23 ++++++++----------- .../1291.Sequential-Digits/Solution.go | 21 +++++++++++++++-- .../1291.Sequential-Digits/Solution_test.go | 21 ++++++++--------- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/leetcode/1201-1300/1291.Sequential-Digits/README.md b/leetcode/1201-1300/1291.Sequential-Digits/README.md index 596033b0b..3fe50657e 100644 --- a/leetcode/1201-1300/1291.Sequential-Digits/README.md +++ b/leetcode/1201-1300/1291.Sequential-Digits/README.md @@ -1,28 +1,23 @@ # [1291.Sequential 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 +An integer has sequential digits if and only if each digit in the number is one more than the previous digit. + +Return a **sorted** list of all the integers in the range `[low, high]` inclusive that have sequential digits. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: low = 100, high = 300 +Output: [123,234] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sequential Digits -```go ``` - +Input: low = 1000, high = 13000 +Output: [1234,2345,3456,4567,5678,6789,12345] +``` ## 结语 diff --git a/leetcode/1201-1300/1291.Sequential-Digits/Solution.go b/leetcode/1201-1300/1291.Sequential-Digits/Solution.go index d115ccf5e..f00849f10 100644 --- a/leetcode/1201-1300/1291.Sequential-Digits/Solution.go +++ b/leetcode/1201-1300/1291.Sequential-Digits/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(low int, high int) []int { + start := []int{12, 23, 34, 45, 56, 67, 78, 89} + ans := make([]int, 0) + for i, n := range start { + now, l := n, i+2 + for now < low && l < 10 { + l++ + now = now*10 + l + } + for now <= high && l < 10 { + ans = append(ans, now) + l++ + now = now*10 + l + } + } + sort.Ints(ans) + return ans } diff --git a/leetcode/1201-1300/1291.Sequential-Digits/Solution_test.go b/leetcode/1201-1300/1291.Sequential-Digits/Solution_test.go index 14ff50eb4..e4362521a 100644 --- a/leetcode/1201-1300/1291.Sequential-Digits/Solution_test.go +++ b/leetcode/1201-1300/1291.Sequential-Digits/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + low, high int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 100, 300, []int{123, 234}}, + {"TestCase2", 1000, 13000, []int{1234, 2345, 3456, 4567, 5678, 6789, 12345}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.low, c.high) 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.low, c.high) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4cc340641669ed864bb6fcc6b0bf7a9e4ba9686a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 2 Feb 2024 22:37:36 +0800 Subject: [PATCH 123/253] Add solution and test-cases for problem 1829 --- .../1829.Maximum-XOR-for-Each-Query/README.md | 41 +++++++++++++------ .../Solution.go | 24 ++++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 61 insertions(+), 25 deletions(-) diff --git a/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/README.md b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/README.md index e5d37500c..90b8cb037 100755 --- a/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/README.md +++ b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/README.md @@ -1,28 +1,43 @@ # [1829.Maximum XOR 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 **sorted** array `nums` of `n` non-negative integers and an integer `maximumBit`. You want to perform the following query `n` **times**: + +1. Find a non-negative integer `k < 2^maximumBit` such that `nums[0] XOR nums[1] XOR ... XOR nums[nums.length-1] XOR k` is **maximized**. k is the answer to the ith query. +2. Remove the **last** element from the current array `nums`. + +Return an array `answer`, where `answer[i]` is the answer to the ith query. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,1,1,3], maximumBit = 2 +Output: [0,3,2,3] +Explanation: The queries are answered as follows: +1st query: nums = [0,1,1,3], k = 0 since 0 XOR 1 XOR 1 XOR 3 XOR 0 = 3. +2nd query: nums = [0,1,1], k = 3 since 0 XOR 1 XOR 1 XOR 3 = 3. +3rd query: nums = [0,1], k = 2 since 0 XOR 1 XOR 2 = 3. +4th query: nums = [0], k = 3 since 0 XOR 3 = 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum XOR for Each Query -```go ``` +Input: nums = [2,3,4,7], maximumBit = 3 +Output: [5,2,6,5] +Explanation: The queries are answered as follows: +1st query: nums = [2,3,4,7], k = 5 since 2 XOR 3 XOR 4 XOR 7 XOR 5 = 7. +2nd query: nums = [2,3,4], k = 2 since 2 XOR 3 XOR 4 XOR 2 = 7. +3rd query: nums = [2,3], k = 6 since 2 XOR 3 XOR 6 = 7. +4th query: nums = [2], k = 5 since 2 XOR 5 = 7. +``` + +**Example 3:** +``` +Input: nums = [0,1,2,2,5,7], maximumBit = 3 +Output: [4,3,6,4,6,7] +``` ## 结语 diff --git a/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution.go b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution.go index d115ccf5e..6a89355bc 100644 --- a/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution.go +++ b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, maximumBit int) []int { + length := len(nums) + ans := make([]int, length) + xor := 0 + for _, n := range nums { + xor ^= n + } + + limit := 1 << maximumBit + for i := 0; i < length; i++ { + cur := 1 << 31 + curAns := 0 + for j := 31; j >= 0; j, cur = j-1, cur>>1 { + if cur >= limit || cur&xor != 0 { + continue + } + curAns |= cur + } + ans[i] = curAns + xor ^= nums[length-1-i] + } + return ans } diff --git a/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution_test.go b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution_test.go index 14ff50eb4..e45c6c835 100644 --- a/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution_test.go +++ b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + mb int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 1, 3}, 2, []int{0, 3, 2, 3}}, + {"TestCase2", []int{2, 3, 4, 7}, 3, []int{5, 2, 6, 5}}, + {"TestCase3", []int{0, 1, 2, 2, 5, 7}, 3, []int{4, 3, 6, 4, 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.nums, c.mb) 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.mb) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 96200cc8dfeff8eed0938c71bf7699f1513dbe0a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 3 Feb 2024 09:19:02 +0800 Subject: [PATCH 124/253] Add solution and test-cases for problem 1043 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 23 +++++++++++++-- .../Solution_test.go | 21 +++++++------- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/README.md b/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/README.md index 6074a6f1b..76ca1f2e1 100644 --- a/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/README.md +++ b/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/README.md @@ -1,28 +1,31 @@ # [1043.Partition Array for 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 +Given an integer array `arr`, partition the array into (contiguous) subarrays of length **at most** `k`. After partitioning, each subarray has their values changed to become the maximum value of that subarray. + +Return the largest sum of the given array after partitioning. Test cases are generated so that the answer fits in a **32-bit** integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,15,7,9,2,5,10], k = 3 +Output: 84 +Explanation: arr becomes [15,15,15,9,10,10,10] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Partition Array for Maximum Sum -```go +``` +Input: arr = [1,4,1,5,7,3,6,1,9,9,3], k = 4 +Output: 83 ``` +**Example 3:** + +``` +Input: arr = [1], k = 1 +Output: 1 +``` ## 结语 diff --git a/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/Solution.go b/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/Solution.go index d115ccf5e..1e7792d87 100644 --- a/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/Solution.go +++ b/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, k int) int { + dp := make([]int, len(arr)) + dp[0] = arr[0] + for i := 1; i < len(arr); i++ { + m := 0 + for pre := i; pre >= 0 && pre > i-k; pre-- { + if arr[pre] > m { + m = arr[pre] + } + l := i - pre + 1 + sum := m * l + add := 0 + if pre > 1 { + add = dp[pre-1] + } + if r := sum + add; r > dp[i] { + dp[i] = r + } + } + } + return dp[len(arr)-1] } diff --git a/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/Solution_test.go b/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/Solution_test.go index 14ff50eb4..fb1cedb0d 100644 --- a/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/Solution_test.go +++ b/leetcode/1001-1100/1043.Partition-Array-for-Maximum-Sum/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, 15, 7, 9, 2, 5, 10}, 3, 84}, + {"TestCase2", []int{1, 4, 1, 5, 7, 3, 6, 1, 9, 9, 3}, 4, 83}, + {"TestCase3", []int{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.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 849528c4aa5ce310e4ee11b57ba236a0b489f275 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 4 Feb 2024 17:19:35 +0800 Subject: [PATCH 125/253] Add solution and test-cases for problem 386 --- .../0386.Lexicographical-Numbers/README.md | 23 ++++++++----------- .../0386.Lexicographical-Numbers/Solution.go | 19 +++++++++++++-- .../Solution_test.go | 13 +++++------ 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/leetcode/301-400/0386.Lexicographical-Numbers/README.md b/leetcode/301-400/0386.Lexicographical-Numbers/README.md index 015406357..4691173e9 100644 --- a/leetcode/301-400/0386.Lexicographical-Numbers/README.md +++ b/leetcode/301-400/0386.Lexicographical-Numbers/README.md @@ -1,28 +1,23 @@ # [386.Lexicographical 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 +Given an integer `n`, return all the numbers in the range `[1, n]` sorted in lexicographical order. + +You must write an algorithm that runs in `O(n)` time and uses `O(1)` extra space. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 13 +Output: [1,10,11,12,13,2,3,4,5,6,7,8,9] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Lexicographical Numbers -```go ``` - +Input: n = 2 +Output: [1,2] +``` ## 结语 diff --git a/leetcode/301-400/0386.Lexicographical-Numbers/Solution.go b/leetcode/301-400/0386.Lexicographical-Numbers/Solution.go index d115ccf5e..dce607a43 100644 --- a/leetcode/301-400/0386.Lexicographical-Numbers/Solution.go +++ b/leetcode/301-400/0386.Lexicographical-Numbers/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) []int { + ans := make([]int, 0) + var dfs func(int, int) + dfs = func(i int, j int) { + cur := j*10 + i + if cur > n { + return + } + ans = append(ans, cur) + for k := 0; k < 10; k++ { + dfs(k, cur) + } + } + for i := 1; i < 10; i++ { + dfs(i, 0) + } + return ans } diff --git a/leetcode/301-400/0386.Lexicographical-Numbers/Solution_test.go b/leetcode/301-400/0386.Lexicographical-Numbers/Solution_test.go index 14ff50eb4..5674fbc9b 100644 --- a/leetcode/301-400/0386.Lexicographical-Numbers/Solution_test.go +++ b/leetcode/301-400/0386.Lexicographical-Numbers/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", 13, []int{1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9}}, + {"TestCase2", 2, []int{1, 2}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5bdb1a5ce3d26ec81bed5f04a93da2b00180c724 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 5 Feb 2024 14:51:10 +0800 Subject: [PATCH 126/253] Add solution and test-cases for problem 1023 --- .../1023.Camelcase-Matching/README.md | 34 ++++++++++++------- .../1023.Camelcase-Matching/Solution.go | 26 ++++++++++++-- .../1023.Camelcase-Matching/Solution_test.go | 23 +++++++------ 3 files changed, 57 insertions(+), 26 deletions(-) diff --git a/leetcode/1001-1100/1023.Camelcase-Matching/README.md b/leetcode/1001-1100/1023.Camelcase-Matching/README.md index 4125ce2af..82dd797a7 100644 --- a/leetcode/1001-1100/1023.Camelcase-Matching/README.md +++ b/leetcode/1001-1100/1023.Camelcase-Matching/README.md @@ -1,28 +1,36 @@ # [1023.Camelcase Matching][title] -> [!WARNING|style:flat] -> 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 strings `queries` and a string `pattern`, return a boolean array `answer` where `answer[i]` is `true` if `queries[i]` matches `pattern`, and `false` otherwise. + +A query word `queries[i]` matches `pattern` if you can insert lowercase English letters pattern so that it equals the query. You may insert each character at any position and you may not insert any characters. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB" +Output: [true,false,true,true,false] +Explanation: "FooBar" can be generated like this "F" + "oo" + "B" + "ar". +"FootBall" can be generated like this "F" + "oot" + "B" + "all". +"FrameBuffer" can be generated like this "F" + "rame" + "B" + "uffer". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Camelcase Matching -```go +``` +Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa" +Output: [true,false,true,false,false] +Explanation: "FooBar" can be generated like this "Fo" + "o" + "Ba" + "r". +"FootBall" can be generated like this "Fo" + "ot" + "Ba" + "ll". ``` +**Example 3:** + +``` +Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT" +Output: [false,true,false,false,false] +Explanation: "FooBarTest" can be generated like this "Fo" + "o" + "Ba" + "r" + "T" + "est". +``` ## 结语 diff --git a/leetcode/1001-1100/1023.Camelcase-Matching/Solution.go b/leetcode/1001-1100/1023.Camelcase-Matching/Solution.go index d115ccf5e..e9cb04403 100644 --- a/leetcode/1001-1100/1023.Camelcase-Matching/Solution.go +++ b/leetcode/1001-1100/1023.Camelcase-Matching/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func isMatch1023(str, pattern string) bool { + pi := 0 + for i := 0; i < len(str); i++ { + if str[i] >= 'A' && str[i] <= 'Z' { + if pi == len(pattern) || str[i] != pattern[pi] { + return false + } + pi++ + continue + } + + if pi != len(pattern) && str[i] == pattern[pi] { + pi++ + } + } + return pi == len(pattern) +} + +func Solution(queries []string, pattern string) []bool { + ans := make([]bool, len(queries)) + for i, s := range queries { + ans[i] = isMatch1023(s, pattern) + } + return ans } diff --git a/leetcode/1001-1100/1023.Camelcase-Matching/Solution_test.go b/leetcode/1001-1100/1023.Camelcase-Matching/Solution_test.go index 14ff50eb4..2e71331ef 100644 --- a/leetcode/1001-1100/1023.Camelcase-Matching/Solution_test.go +++ b/leetcode/1001-1100/1023.Camelcase-Matching/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + queries []string + pattern string + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"}, "FB", []bool{true, false, true, true, false}}, + {"TestCase2", []string{"FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"}, "FoBa", []bool{true, false, true, false, false}}, + {"TestCase3", []string{"FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"}, "FoBaT", []bool{false, true, false, 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.queries, 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.queries, c.pattern) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6c696ad60ea3e96a65030ebc249b8ef203634414 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 5 Feb 2024 16:18:48 +0800 Subject: [PATCH 127/253] Add solution and test-cases for problem 2261 --- .../README.md | 38 +++++++++------ .../Solution.go | 46 ++++++++++++++++++- .../Solution_test.go | 21 +++++---- 3 files changed, 79 insertions(+), 26 deletions(-) diff --git a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md index d9f7c71ea..b4a2db030 100755 --- a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md +++ b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md @@ -1,28 +1,38 @@ # [2261.K Divisible Elements 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 two integers `k` and `p`, return the number of **distinct subarrays**, which have **at most** `k` elements that are divisible by `p`. + +Two arrays `nums1` and `nums2` are said to be **distinct** if: + +- They are of **different** lengths, or +- There exists **at least** one index `i` where `nums1[i] != nums2[i]`. + +A **subarray** is defined as a **non-empty** contiguous sequence of elements in an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,3,3,2,2], k = 2, p = 2 +Output: 11 +Explanation: +The elements at indices 0, 3, and 4 are divisible by p = 2. +The 11 distinct subarrays which have at most k = 2 elements divisible by 2 are: +[2], [2,3], [2,3,3], [2,3,3,2], [3], [3,3], [3,3,2], [3,3,2,2], [3,2], [3,2,2], and [2,2]. +Note that the subarrays [2] and [3] occur more than once in nums, but they should each be counted only once. +The subarray [2,3,3,2,2] should not be counted because it has 3 elements that are divisible by 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -K Divisible Elements Subarrays -```go ``` - +Input: nums = [1,2,3,4], k = 4, p = 1 +Output: 10 +Explanation: +All element of nums are divisible by p = 1. +Also, every subarray of nums will have at most 4 elements that are divisible by 1. +Since all subarrays are distinct, the total number of subarrays satisfying all the constraints is 10. +``` ## 结语 diff --git a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go index d115ccf5e..3829810b1 100644 --- a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go +++ b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +func hash2261(nums []int, start, end int) uint64 { + h := uint64(0) + for i := start; i < end; i++ { + h = h*211 + uint64(nums[i]) + } + return h +} + +func Solution(nums []int, k int, p int) int { + ans := 0 + count := make([]int, len(nums)) + check := make(map[uint64]struct{}) + check[hash2261(nums, 0, 1)] = struct{}{} + ans++ + if nums[0]%p == 0 { + count[0] = 1 + } + // 6,20,5,18 + for i := 1; i < len(nums); i++ { + add := 0 + if nums[i]%p == 0 { + add = 1 + } + // 1, 2, 3, 4 + count[i] = count[i-1] + add + for pre := i; pre >= 0; pre-- { + cut := 0 + if pre > 0 { + cut = count[pre-1] + } + + diff := count[i] - cut + if diff > k { + break + } + key := hash2261(nums, pre, i+1) + if _, ok := check[key]; ok { + continue + } + check[key] = struct{}{} + ans++ + } + } + return ans } diff --git a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution_test.go b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution_test.go index 14ff50eb4..3d5f08f4d 100644 --- a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution_test.go +++ b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k, p int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 3, 3, 2, 2}, 2, 2, 11}, + {"TestCase2", []int{1, 2, 3, 4}, 4, 1, 10}, + {"TestCase3", []int{6, 20, 5, 18}, 3, 14, 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.k, 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.k, c.p) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 69a277ac44876bfb68d0be660823ea7355c27692 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 6 Feb 2024 10:09:33 +0800 Subject: [PATCH 128/253] Add solution and test-cases for problem 1233 --- .../README.md | 34 ++++++++------ .../Solution.go | 46 ++++++++++++++++++- .../Solution_test.go | 16 ++++--- 3 files changed, 74 insertions(+), 22 deletions(-) diff --git a/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/README.md b/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/README.md index da28a99a2..5ac0155c2 100644 --- a/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/README.md +++ b/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/README.md @@ -1,28 +1,36 @@ # [1233.Remove Sub-Folders from the Filesystem][title] -> [!WARNING|style:flat] -> 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 list of folders `folder`, return the folders after removing all **sub-folders** in those folders. You may return the answer in **any order**. + +If a `folder[i]` is located within another `folder[j]`, it is called a **sub-folder** of it. + +The format of a path is one or more concatenated strings of the form: `'/'` followed by one or more lowercase English letters. + +0 For example, `"/leetcode"` and `"/leetcode/problems"` are valid paths while an empty string and `"/"` are not. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"] +Output: ["/a","/c/d","/c/f"] +Explanation: Folders "/a/b" is a subfolder of "/a" and "/c/d/e" is inside of folder "/c/d" in our filesystem. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Remove Sub-Folders from the Filesystem -```go ``` +Input: folder = ["/a","/a/b/c","/a/b/d"] +Output: ["/a"] +Explanation: Folders "/a/b/c" and "/a/b/d" will be removed because they are subfolders of "/a". +``` + +**Example 3:** +``` +Input: folder = ["/a/b/c","/a/b/ca","/a/b/d"] +Output: ["/a/b/c","/a/b/ca","/a/b/d"] +``` ## 结语 diff --git a/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/Solution.go b/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/Solution.go index d115ccf5e..913f40511 100644 --- a/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/Solution.go +++ b/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" + "strings" +) + +type filePathNode struct { + end bool + data map[string]*filePathNode +} + +func insertFolder(root *filePathNode, path string) bool { + walker := root + paths := strings.Split(path, "/") + for i := 1; i < len(paths); i++ { + p := paths[i] + _, ok := walker.data[p] + if !ok { + walker.data[p] = &filePathNode{end: false, data: make(map[string]*filePathNode)} + } + if i == len(paths)-1 { + walker.data[p].end = true + continue + } + if walker.data[p].end { + return false + } + walker = walker.data[p] + } + return true +} + +func Solution(folder []string) []string { + sort.Slice(folder, func(i, j int) bool { + return len(folder[i]) < len(folder[j]) + }) + + root := &filePathNode{end: false, data: make(map[string]*filePathNode)} + ans := make([]string, 0) + for _, str := range folder { + if insertFolder(root, str) { + ans = append(ans, str) + } + } + return ans } diff --git a/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/Solution_test.go b/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/Solution_test.go index 14ff50eb4..7b0216fe6 100644 --- a/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/Solution_test.go +++ b/leetcode/1201-1300/1233.Remove-Sub-Folders-from-the-Filesystem/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 []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"/a", "/a/b", "/c/d", "/c/d/e", "/c/f"}, []string{"/a", "/c/d", "/c/f"}}, + {"TestCase2", []string{"/a", "/a/b/c", "/a/b/d"}, []string{"/a"}}, + {"TestCase3", []string{"/a/b/c", "/a/b/ca", "/a/b/d"}, []string{"/a/b/c", "/a/b/ca", "/a/b/d"}}, } // 开始测试 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 d0bac48d1e540bb55194c7188d1337fd41dcc129 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 6 Feb 2024 14:12:42 +0800 Subject: [PATCH 129/253] Add solution and test-cases for problem 1268 --- .../1268.Search-Suggestions-System/README.md | 29 ++++---- .../Solution.go | 67 ++++++++++++++++++- .../Solution_test.go | 33 ++++++--- 3 files changed, 103 insertions(+), 26 deletions(-) diff --git a/leetcode/1201-1300/1268.Search-Suggestions-System/README.md b/leetcode/1201-1300/1268.Search-Suggestions-System/README.md index 2e12cfa8d..ff7edc684 100644 --- a/leetcode/1201-1300/1268.Search-Suggestions-System/README.md +++ b/leetcode/1201-1300/1268.Search-Suggestions-System/README.md @@ -1,28 +1,29 @@ # [1268.Search Suggestions 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 are given an array of strings `products` and a string `searchWord`. + +Design a system that suggests at most three product names from `products` after each character of `searchWord` is typed. Suggested products should have common prefix with `searchWord`. If there are more than three products with a common prefix return the three lexicographically minimums products. + +Return a list of lists of the suggested products after each character of `searchWord` is typed. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord = "mouse" +Output: [["mobile","moneypot","monitor"],["mobile","moneypot","monitor"],["mouse","mousepad"],["mouse","mousepad"],["mouse","mousepad"]] +Explanation: products sorted lexicographically = ["mobile","moneypot","monitor","mouse","mousepad"]. +After typing m and mo all products match and we show user ["mobile","moneypot","monitor"]. +After typing mou, mous and mouse the system suggests ["mouse","mousepad"]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Search Suggestions System -```go ``` - +Input: products = ["havana"], searchWord = "havana" +Output: [["havana"],["havana"],["havana"],["havana"],["havana"],["havana"]] +Explanation: The only word "havana" will be always suggested while typing the search word. +``` ## 结语 diff --git a/leetcode/1201-1300/1268.Search-Suggestions-System/Solution.go b/leetcode/1201-1300/1268.Search-Suggestions-System/Solution.go index d115ccf5e..b07bc4f69 100644 --- a/leetcode/1201-1300/1268.Search-Suggestions-System/Solution.go +++ b/leetcode/1201-1300/1268.Search-Suggestions-System/Solution.go @@ -1,5 +1,68 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +type trieNode1268 struct { + end bool + child [26]*trieNode1268 +} + +func insertString(root *trieNode1268, str string) { + w := root + for i, b := range str { + child := w.child[b-'a'] + if child == nil { + w.child[b-'a'] = &trieNode1268{end: false, child: [26]*trieNode1268{}} + } + if i == len(str)-1 { + w.child[b-'a'].end = true + } + w = w.child[b-'a'] + } +} + +func prefixNode(root *trieNode1268, prefix string) *trieNode1268 { + w := root + for _, b := range prefix { + child := w.child[b-'a'] + if child == nil { + return nil + } + w = child + } + return w +} +func searchWords(root *trieNode1268, base string, count *int, res *[]string) { + if *count == 0 { + return + } + if root.end { + *res = append(*res, base) + *count-- + } + for i := 0; i < 26; i++ { + if root.child[i] != nil { + c := fmt.Sprintf("%s%c", base, i+'a') + searchWords(root.child[i], c, count, res) + } + } +} +func Solution(products []string, searchWord string) [][]string { + l := len(searchWord) + root := &trieNode1268{end: false, child: [26]*trieNode1268{}} + for _, p := range products { + insertString(root, p) + } + + result := make([][]string, l) + for i := 0; i < l; i++ { + base := searchWord[:i+1] + tailNode := prefixNode(root, base) + if tailNode == nil { + continue + } + count := 3 + searchWords(tailNode, base, &count, &result[i]) + } + return result } diff --git a/leetcode/1201-1300/1268.Search-Suggestions-System/Solution_test.go b/leetcode/1201-1300/1268.Search-Suggestions-System/Solution_test.go index 14ff50eb4..6782f7dd9 100644 --- a/leetcode/1201-1300/1268.Search-Suggestions-System/Solution_test.go +++ b/leetcode/1201-1300/1268.Search-Suggestions-System/Solution_test.go @@ -10,30 +10,43 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + p []string + s string + expect [][]string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"mobile", "mouse", "moneypot", "monitor", "mousepad"}, "mouse", [][]string{ + {"mobile", "moneypot", "monitor"}, + {"mobile", "moneypot", "monitor"}, + {"mouse", "mousepad"}, + {"mouse", "mousepad"}, + {"mouse", "mousepad"}, + }}, + {"TestCase2", []string{"havana"}, "havana", [][]string{ + {"havana"}, + {"havana"}, + {"havana"}, + {"havana"}, + {"havana"}, + {"havana"}, + }}, } // 开始测试 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.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.p, c.s) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cf97ac6adfc6dc19652b31c7d47d561f020d147a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 7 Feb 2024 15:40:31 +0800 Subject: [PATCH 130/253] Add solution and test-cases for problem 313 --- .../301-400/0313.Super-Ugly-Number/README.md | 27 +++++++++---------- .../0313.Super-Ugly-Number/Solution.go | 21 +++++++++++++-- .../0313.Super-Ugly-Number/Solution_test.go | 20 +++++++------- 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/leetcode/301-400/0313.Super-Ugly-Number/README.md b/leetcode/301-400/0313.Super-Ugly-Number/README.md index ef9211cc6..4da7e7342 100644 --- a/leetcode/301-400/0313.Super-Ugly-Number/README.md +++ b/leetcode/301-400/0313.Super-Ugly-Number/README.md @@ -1,28 +1,27 @@ # [313.Super Ugly 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 **super ugly number** is a positive integer whose prime factors are in the array `primes`. + +Given an integer `n` and an array of integers `primes`, return the nth **super ugly number**. + +The nth **super ugly number** is **guaranteed** to fit in a **32-bit** signed integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 12, primes = [2,7,13,19] +Output: 32 +Explanation: [1,2,4,7,8,13,14,16,19,26,28,32] is the sequence of the first 12 super ugly numbers given primes = [2,7,13,19]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Super Ugly Number -```go ``` - +Input: n = 1, primes = [2,3,5] +Output: 1 +Explanation: 1 has no prime factors, therefore all of its prime factors are in the array primes = [2,3,5]. +``` ## 结语 diff --git a/leetcode/301-400/0313.Super-Ugly-Number/Solution.go b/leetcode/301-400/0313.Super-Ugly-Number/Solution.go index d115ccf5e..f0191ebbb 100644 --- a/leetcode/301-400/0313.Super-Ugly-Number/Solution.go +++ b/leetcode/301-400/0313.Super-Ugly-Number/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, primes []int) int { + //2,3,5 Ugly Number Extensions + indies := make([]int, len(primes)) + ans := make([]int, n) + ans[0] = 1 + for i := 1; i < n; i++ { + x := ans[indies[0]] * primes[0] + for j := 1; j < len(indies); j++ { + x = min(x, ans[indies[j]]*primes[j]) + } + + ans[i] = x + for k := 0; k < len(indies); k++ { + if ans[indies[k]]*primes[k] <= x { + indies[k]++ + } + } + } + return ans[n-1] } diff --git a/leetcode/301-400/0313.Super-Ugly-Number/Solution_test.go b/leetcode/301-400/0313.Super-Ugly-Number/Solution_test.go index 14ff50eb4..df0c4620c 100644 --- a/leetcode/301-400/0313.Super-Ugly-Number/Solution_test.go +++ b/leetcode/301-400/0313.Super-Ugly-Number/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + primes []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 12, []int{2, 7, 13, 19}, 32}, + {"TestCase2", 1, []int{2, 3, 5}, 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.primes) 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.primes) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2a3f79d307631e0d5244543e27093ea113022353 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 8 Feb 2024 20:48:36 +0800 Subject: [PATCH 131/253] Add solution and test-cases for problem 721 --- .../701-800/0721.Accounts-Merge/README.md | 30 +++++---- .../701-800/0721.Accounts-Merge/Solution.go | 66 ++++++++++++++++++- .../0721.Accounts-Merge/Solution_test.go | 47 +++++++++++-- 3 files changed, 120 insertions(+), 23 deletions(-) diff --git a/leetcode/701-800/0721.Accounts-Merge/README.md b/leetcode/701-800/0721.Accounts-Merge/README.md index 1c1c2dc1f..027f7f52b 100644 --- a/leetcode/701-800/0721.Accounts-Merge/README.md +++ b/leetcode/701-800/0721.Accounts-Merge/README.md @@ -1,28 +1,30 @@ # [721.Accounts Merge][title] -> [!WARNING|style:flat] -> 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 list of `accounts` where each element `accounts[i]` is a list of strings, where the first element `accounts[i][0]` is a name, and the rest of the elements are **emails** representing emails of the account. + +Now, we would like to merge these accounts. Two accounts definitely belong to the same person if there is some common email to both accounts. Note that even if two accounts have the same name, they may belong to different people as people could have the same name. A person can have any number of accounts initially, but all of their accounts definitely have the same name. + +After merging the accounts, return the accounts in the following format: the first element of each account is the name, and the rest of the elements are emails **in sorted order**. The accounts themselves can be returned in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: accounts = [["John","johnsmith@mail.com","john_newyork@mail.com"],["John","johnsmith@mail.com","john00@mail.com"],["Mary","mary@mail.com"],["John","johnnybravo@mail.com"]] +Output: [["John","john00@mail.com","john_newyork@mail.com","johnsmith@mail.com"],["Mary","mary@mail.com"],["John","johnnybravo@mail.com"]] +Explanation: +The first and second John's are the same person as they have the common email "johnsmith@mail.com". +The third John and Mary are different people as none of their email addresses are used by other accounts. +We could return these lists in any order, for example the answer [['Mary', 'mary@mail.com'], ['John', 'johnnybravo@mail.com'], +['John', 'john00@mail.com', 'john_newyork@mail.com', 'johnsmith@mail.com']] would still be accepted. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Accounts Merge -```go ``` - +Input: accounts = [["Gabe","Gabe0@m.co","Gabe3@m.co","Gabe1@m.co"],["Kevin","Kevin3@m.co","Kevin5@m.co","Kevin0@m.co"],["Ethan","Ethan5@m.co","Ethan4@m.co","Ethan0@m.co"],["Hanzo","Hanzo3@m.co","Hanzo1@m.co","Hanzo0@m.co"],["Fern","Fern5@m.co","Fern1@m.co","Fern0@m.co"]] +Output: [["Ethan","Ethan0@m.co","Ethan4@m.co","Ethan5@m.co"],["Gabe","Gabe0@m.co","Gabe1@m.co","Gabe3@m.co"],["Hanzo","Hanzo0@m.co","Hanzo1@m.co","Hanzo3@m.co"],["Kevin","Kevin0@m.co","Kevin3@m.co","Kevin5@m.co"],["Fern","Fern0@m.co","Fern1@m.co","Fern5@m.co"]] +``` ## 结语 diff --git a/leetcode/701-800/0721.Accounts-Merge/Solution.go b/leetcode/701-800/0721.Accounts-Merge/Solution.go index d115ccf5e..be1a011fe 100644 --- a/leetcode/701-800/0721.Accounts-Merge/Solution.go +++ b/leetcode/701-800/0721.Accounts-Merge/Solution.go @@ -1,5 +1,67 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type unionFind721 struct { + father []int +} + +func (u *unionFind721) find(x int) int { + if u.father[x] != x { + u.father[x] = u.find(u.father[x]) + } + return u.father[x] +} +func (u *unionFind721) union(x, y int) { + fx := u.find(x) + fy := u.find(y) + if fx < fy { + u.father[fy] = fx + } else { + u.father[fx] = fy + } + +} +func Solution(accounts [][]string) [][]string { + u := unionFind721{father: make([]int, len(accounts))} + for i := 0; i < len(accounts); i++ { + u.father[i] = i + } + email2index := make(map[string]int) + tmp := make([]map[string]struct{}, len(accounts)) + for idx, emails := range accounts { + temp := map[string]struct{}{} + for i := 1; i < len(emails); i++ { + temp[emails[i]] = struct{}{} + if targetIndex, ok := email2index[emails[i]]; ok { + u.union(idx, targetIndex) + continue + } + email2index[emails[i]] = idx + } + tmp[idx] = temp + } + for i := range accounts { + f := u.find(i) + if f != i { + for key := range tmp[i] { + tmp[f][key] = struct{}{} + } + } + } + result := make([][]string, 0) + for i := range accounts { + f := u.find(i) + if f == i { + result = append(result, []string{accounts[i][0]}) + next := make([]string, 0) + for key := range tmp[i] { + next = append(next, key) + } + sort.Strings(next) + idx := len(result) - 1 + result[idx] = append(result[idx], next...) + } + } + return result } diff --git a/leetcode/701-800/0721.Accounts-Merge/Solution_test.go b/leetcode/701-800/0721.Accounts-Merge/Solution_test.go index 14ff50eb4..3bf853141 100644 --- a/leetcode/701-800/0721.Accounts-Merge/Solution_test.go +++ b/leetcode/701-800/0721.Accounts-Merge/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,50 @@ 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{{"John", "johnsmith@mail.com", "john_newyork@mail.com"}, {"John", "johnsmith@mail.com", "john00@mail.com"}, {"Mary", "mary@mail.com"}, {"John", "johnnybravo@mail.com"}}, + [][]string{{"John", "john00@mail.com", "john_newyork@mail.com", "johnsmith@mail.com"}, {"John", "johnnybravo@mail.com"}, {"Mary", "mary@mail.com"}}}, + {"TestCase2", [][]string{ + {"Gabe", "Gabe0@m.co", "Gabe3@m.co", "Gabe1@m.co"}, + {"Kevin", "Kevin3@m.co", "Kevin5@m.co", "Kevin0@m.co"}, + {"Ethan", "Ethan5@m.co", "Ethan4@m.co", "Ethan0@m.co"}, + {"Hanzo", "Hanzo3@m.co", "Hanzo1@m.co", "Hanzo0@m.co"}, + {"Fern", "Fern5@m.co", "Fern1@m.co", "Fern0@m.co"}, + }, [][]string{ + {"Ethan", "Ethan0@m.co", "Ethan4@m.co", "Ethan5@m.co"}, + {"Fern", "Fern0@m.co", "Fern1@m.co", "Fern5@m.co"}, + {"Gabe", "Gabe0@m.co", "Gabe1@m.co", "Gabe3@m.co"}, + {"Hanzo", "Hanzo0@m.co", "Hanzo1@m.co", "Hanzo3@m.co"}, + {"Kevin", "Kevin0@m.co", "Kevin3@m.co", "Kevin5@m.co"}, + }}, + {"TestCase3", [][]string{ + {"Alex", "Alex5@m.co", "Alex4@m.co", "Alex0@m.co"}, + {"Ethan", "Ethan3@m.co", "Ethan3@m.co", "Ethan0@m.co"}, + {"Kevin", "Kevin4@m.co", "Kevin2@m.co", "Kevin2@m.co"}, + {"Gabe", "Gabe0@m.co", "Gabe3@m.co", "Gabe2@m.co"}, + {"Gabe", "Gabe3@m.co", "Gabe4@m.co", "Gabe2@m.co"}, + }, [][]string{ + {"Alex", "Alex0@m.co", "Alex4@m.co", "Alex5@m.co"}, + {"Ethan", "Ethan0@m.co", "Ethan3@m.co"}, + {"Gabe", "Gabe0@m.co", "Gabe2@m.co", "Gabe3@m.co", "Gabe4@m.co"}, + {"Kevin", "Kevin2@m.co", "Kevin4@m.co"}, + }}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { got := Solution(c.inputs) + sort.Slice(got, func(i, j int) bool { + a := got[i][0] + b := got[j][0] + if a == b { + return len(got[i]) > len(got[j]) + } + return a < b + }) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +63,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7ac5a5afa08d97676ed3ddedcd62581db887c42a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 9 Feb 2024 12:37:27 +0800 Subject: [PATCH 132/253] Add solution and test-cases for problem 1738 --- .../README.md | 33 +++++++----- .../Solution.go | 53 ++++++++++++++++++- .../Solution_test.go | 27 ++++++---- 3 files changed, 89 insertions(+), 24 deletions(-) diff --git a/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md index fe8b09ef7..372f18462 100755 --- a/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md +++ b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md @@ -1,28 +1,35 @@ # [1738.Find Kth Largest XOR Coordinate 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 +You are given a 2D `matrix` of size `m x n`, consisting of non-negative integers. You are also given an integer `k`. + +The **value** of coordinate `(a, b)` of the matrix is the XOR of all `matrix[i][j]` where `0 <= i <= a < m` and `0 <= j <= b < n` **(0-indexed)**. + +Find the kth largest value **(1-indexed)** of all the coordinates of `matrix`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[5,2],[1,6]], k = 1 +Output: 7 +Explanation: The value of coordinate (0,1) is 5 XOR 2 = 7, which is the largest value. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Kth Largest XOR Coordinate Value -```go ``` +Input: matrix = [[5,2],[1,6]], k = 2 +Output: 5 +Explanation: The value of coordinate (0,0) is 5 = 5, which is the 2nd largest value. +``` + +**Example 3:** +``` +Input: matrix = [[5,2],[1,6]], k = 3 +Output: 4 +Explanation: The value of coordinate (1,0) is 5 XOR 1 = 4, which is the 3rd largest value. +``` ## 结语 diff --git a/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution.go b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution.go index d115ccf5e..0b222d977 100644 --- a/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution.go +++ b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution.go @@ -1,5 +1,56 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type heap1738 []int + +func (h *heap1738) Len() int { + return len(*h) +} + +func (h *heap1738) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap1738) Less(i, j int) bool { + return (*h)[i] < (*h)[j] +} + +func (h *heap1738) Push(x interface{}) { + *h = append(*h, x.(int)) +} + +func (h *heap1738) Pop() interface{} { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution(matrix [][]int, k int) int { + rows := len(matrix) + cols := len(matrix[0]) + cache := make([][]int, rows+1) + for i := 0; i <= rows; i++ { + cache[i] = make([]int, cols+1) + } + h := heap1738{} + for r := 1; r <= rows; r++ { + for c := 1; c <= cols; c++ { + cache[r][c] = matrix[r-1][c-1] ^ cache[r-1][c] ^ cache[r][c-1] ^ cache[r-1][c-1] + if h.Len() != k { + heap.Push(&h, cache[r][c]) + continue + } + top := heap.Pop(&h).(int) + if top < cache[r][c] { + top = cache[r][c] + } + heap.Push(&h, top) + } + } + return h[0] +} diff --git a/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution_test.go b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution_test.go index 14ff50eb4..28addb787 100644 --- a/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution_test.go +++ b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + matrix [][]int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {5, 2}, {1, 6}, + }, 1, 7}, + {"TestCase2", [][]int{ + {5, 2}, {1, 6}, + }, 2, 5}, + {"TestCase3", [][]int{ + {5, 2}, {1, 6}, + }, 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.matrix, 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.matrix, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8d2879479ac5987d365666c2f59eabf8bbda8a56 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 9 Feb 2024 20:53:10 +0800 Subject: [PATCH 133/253] Add solution and test-cases for problem 1105 --- .../1105.Filling-Bookcase-Shelves/README.md | 38 +++++++------ .../1105.Filling-Bookcase-Shelves/Solution.go | 27 +++++++++- .../Solution_test.go | 51 ++++++++++++++---- .../1105.Filling-Bookcase-Shelves/shelves.png | Bin 0 -> 13399 bytes 4 files changed, 88 insertions(+), 28 deletions(-) create mode 100644 leetcode/1101-1200/1105.Filling-Bookcase-Shelves/shelves.png diff --git a/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/README.md b/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/README.md index d4771bf94..5e18ee7af 100644 --- a/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/README.md +++ b/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/README.md @@ -1,28 +1,36 @@ # [1105.Filling Bookcase Shelves][title] -> [!WARNING|style:flat] -> 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 `books` where `books[i] = [thicknessi, heighti]` indicates the thickness and height of the ith book. You are also given an integer `shelfWidth`. -**Example 1:** +We want to place these books in order onto bookcase shelves that have a total width `shelfWidth`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +We choose some of the books to place on this shelf such that the sum of their thickness is less than or equal to `shelfWidth`, then build another level of the shelf of the bookcase so that the total height of the bookcase has increased by the maximum height of the books we just put down. We repeat this process until there are no more books to place. + +Note that at each step of the above process, the order of the books we place is the same order as the given sequence of books. + +- For example, if we have an ordered list of `5` books, we might place the first and second book onto the first shelf, the third book on the second shelf, and the fourth and fifth book on the last shelf. -## 题意 -> ... +Return the minimum possible height that the total bookshelf can be after placing shelves in this manner. -## 题解 +**Example 1:** -### 思路1 -> ... -Filling Bookcase Shelves -```go +![1](./shelves.png) + +``` +Input: books = [[1,1],[2,3],[2,3],[1,1],[1,1],[1,1],[1,2]], shelfWidth = 4 +Output: 6 +Explanation: +The sum of the heights of the 3 shelves is 1 + 3 + 2 = 6. +Notice that book number 2 does not have to be on the first shelf. ``` +**Example 2:** + +``` +Input: books = [[1,3],[2,4],[3,2]], shelfWidth = 6 +Output: 4 +``` ## 结语 diff --git a/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution.go b/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution.go index d115ccf5e..1838b1dee 100644 --- a/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution.go +++ b/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(books [][]int, shelfWidth int) int { + dp := make([]int, len(books)) + dp[0] = books[0][1] + for i := 1; i < len(books); i++ { + dp[i] = books[i][1] + dp[i-1] + tmpMax := books[i][1] + curWidth := books[i][0] + for pre := i - 1; pre >= 0; pre-- { + curWidth += books[pre][0] + if curWidth > shelfWidth { + break + } + if books[pre][1] > tmpMax { + tmpMax = books[pre][1] + } + add := 0 + if pre > 0 { + add = dp[pre-1] + } + if r := add + tmpMax; r < dp[i] { + dp[i] = r + } + } + } + return dp[len(books)-1] } diff --git a/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution_test.go b/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution_test.go index 14ff50eb4..55592fc2d 100644 --- a/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution_test.go +++ b/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/Solution_test.go @@ -9,31 +9,60 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + books [][]int + shelfWidth int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 1}, + {2, 3}, + {2, 3}, + }, 4, 4}, + {"TestCase2", [][]int{ + {1, 1}, + {2, 3}, + }, 4, 3}, + {"TestCase3", [][]int{ + {1, 1}, + {2, 3}, + {2, 3}, + {1, 1}, + {1, 1}, + {1, 1}, + {1, 2}, + }, 4, 6}, + {"TestCase4", [][]int{ + {1, 2}, + }, 1, 2}, + {"TestCase5", [][]int{ + {1, 1}, + {2, 3}, + {2, 3}, + {1, 1}, + {1, 1}, + {1, 1}, + {1, 2}, + {3, 2}, + }, 5, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.books, c.shelfWidth) 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.books, c.shelfWidth) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/shelves.png b/leetcode/1101-1200/1105.Filling-Bookcase-Shelves/shelves.png new file mode 100644 index 0000000000000000000000000000000000000000..897d408ce5b57c7232aacf6c198e1baf93708935 GIT binary patch literal 13399 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 Date: Sat, 10 Feb 2024 21:46:28 +0800 Subject: [PATCH 134/253] Add solution and test-cases for problem 1366 --- .../1366.Rank-Teams-by-Votes/README.md | 46 +++++++++++++++++++ .../1366.Rank-Teams-by-Votes/Solution.go | 33 ++++++++++++- .../1366.Rank-Teams-by-Votes/Solution_test.go | 25 ++++++---- 3 files changed, 93 insertions(+), 11 deletions(-) create mode 100644 leetcode/1301-1400/1366.Rank-Teams-by-Votes/README.md diff --git a/leetcode/1301-1400/1366.Rank-Teams-by-Votes/README.md b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/README.md new file mode 100644 index 000000000..e4099f1fa --- /dev/null +++ b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/README.md @@ -0,0 +1,46 @@ +# [1366.Rank Teams by Votes][title] + +## Description +In a special ranking system, each voter gives a rank from highest to lowest to all teams participating in the competition. + +The ordering of teams is decided by who received the most position-one votes. If two or more teams tie in the first position, we consider the second position to resolve the conflict, if they tie again, we continue this process until the ties are resolved. If two or more teams are still tied after considering all positions, we rank them alphabetically based on their team letter. + +You are given an array of strings votes which is the votes of all voters in the ranking systems. Sort all teams according to the ranking system described above. + +Return a string of all teams **sorted** by the ranking system. + +**Example 1:** + +``` +Input: votes = ["ABC","ACB","ABC","ACB","ACB"] +Output: "ACB" +Explanation: +Team A was ranked first place by 5 voters. No other team was voted as first place, so team A is the first team. +Team B was ranked second by 2 voters and ranked third by 3 voters. +Team C was ranked second by 3 voters and ranked third by 2 voters. +As most of the voters ranked C second, team C is the second team, and team B is the third. +``` + +**Example 2:** + +``` +Input: votes = ["WXYZ","XYZW"] +Output: "XWYZ" +Explanation: +X is the winner due to the tie-breaking rule. X has the same votes as W for the first position, but X has one vote in the second position, while W does not have any votes in the second position. +``` + +**Example 3:** + +``` +Input: votes = ["ZMNAGUEDSJYLBOPHRQICWFXTVK"] +Output: "ZMNAGUEDSJYLBOPHRQICWFXTVK" +Explanation: Only one voter, so their votes are used for the ranking. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rank-teams-by-votes +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go index d115ccf5e..290af5d6c 100755 --- a/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go +++ b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func Solution(votes []string) string { + count := [26][]int{} + l := len(votes[0]) + sorter := []byte(votes[0]) + for i := 0; i < 26; i++ { + count[i] = make([]int, l) + } + for _, vote := range votes { + for i, c := range vote { + count[c-'A'][i]++ + } + } + + sort.Slice(sorter, func(i, j int) bool { + ci := sorter[i] + cj := sorter[j] + for k := 0; k < l; k++ { + if count[ci-'A'][k] < count[cj-'A'][k] { + return false + } + if count[ci-'A'][k] > count[cj-'A'][k] { + return true + } + } + return ci < cj + }) + return string(sorter) } diff --git a/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution_test.go b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution_test.go index 14ff50eb4..fc9044901 100755 --- a/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution_test.go +++ b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + votes []string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{ + "ABC", "ACB", "ABC", "ACB", "ACB", + }, "ACB"}, + {"TestCase2", []string{"WXYZ", "XYZW"}, "XWYZ"}, + {"TestCase3", []string{ + "ZMNAGUEDSJYLBOPHRQICWFXTVK", + }, "ZMNAGUEDSJYLBOPHRQICWFXTVK"}, + {"TestCase4", []string{ + "FVSHJIEMNGYPTQOURLWCZKAX", "AITFQORCEHPVJMXGKSLNZWUY", "OTERVXFZUMHNIYSCQAWGPKJL", "VMSERIJYLZNWCPQTOKFUHAXG", "VNHOZWKQCEFYPSGLAMXJIUTR", "ANPHQIJMXCWOSKTYGULFVERZ", "RFYUXJEWCKQOMGATHZVILNSP", "SCPYUMQJTVEXKRNLIOWGHAFZ", "VIKTSJCEYQGLOMPZWAHFXURN", "SVJICLXKHQZTFWNPYRGMEUAO", "JRCTHYKIGSXPOZLUQAVNEWFM", "NGMSWJITREHFZVQCUKXYAPOL", "WUXJOQKGNSYLHEZAFIPMRCVT", "PKYQIOLXFCRGHZNAMJVUTWES", "FERSGNMJVZXWAYLIKCPUQHTO", "HPLRIUQMTSGYJVAXWNOCZEKF", "JUVWPTEGCOFYSKXNRMHQALIZ", "MWPIAZCNSLEYRTHFKQXUOVGJ", "EZXLUNFVCMORSIWKTYHJAQPG", "HRQNLTKJFIEGMCSXAZPYOVUW", "LOHXVYGWRIJMCPSQENUAKTZF", "XKUTWPRGHOAQFLVYMJSNEIZC", "WTCRQMVKPHOSLGAXZUEFYNJI", + }, "VWFHSJARNPEMOXLTUKICZGYQ"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.votes) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + c.expect, got, c.votes) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 10b456123e7cf42eba09cc19d5d19df9bcae74dd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 11 Feb 2024 16:43:11 +0800 Subject: [PATCH 135/253] Add solution and test-cases for problem 1463 --- .../1401-1500/1463.Cherry-Pickup-II/README.md | 50 ++++++++++++++++++ .../1463.Cherry-Pickup-II/Solution.go | 42 ++++++++++++++- .../1463.Cherry-Pickup-II/Solution_test.go | 21 +++++--- .../1463.Cherry-Pickup-II/sample_1_1802.png | Bin 0 -> 27561 bytes .../1463.Cherry-Pickup-II/sample_2_1802.png | Bin 0 -> 27876 bytes 5 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 leetcode/1401-1500/1463.Cherry-Pickup-II/README.md create mode 100644 leetcode/1401-1500/1463.Cherry-Pickup-II/sample_1_1802.png create mode 100644 leetcode/1401-1500/1463.Cherry-Pickup-II/sample_2_1802.png diff --git a/leetcode/1401-1500/1463.Cherry-Pickup-II/README.md b/leetcode/1401-1500/1463.Cherry-Pickup-II/README.md new file mode 100644 index 000000000..ce9bf8ff5 --- /dev/null +++ b/leetcode/1401-1500/1463.Cherry-Pickup-II/README.md @@ -0,0 +1,50 @@ +# [1463.Cherry Pickup II][title] + +## Description +You are given a `rows x cols` matrix `grid` representing a field of cherries where `grid[i][j]` represents the number of cherries that you can collect from the `(i, j)` cell. + +You have two robots that can collect cherries for you: + +- **Robot #1** is located at the **top-left corner** `(0, 0)`, and +- **Robot #2** is located at the **top-right corner** `(0, cols - 1)`. + +Return the maximum number of cherries collection using both robots by following the rules below: + +- From a cell `(i, j)`, robots can move to cell `(i + 1, j - 1)`, `(i + 1, j)`, or `(i + 1, j + 1)`. +- When any robot passes through a cell, It picks up all cherries, and the cell becomes an empty cell. +- When both robots stay in the same cell, only one takes the cherries. +- Both robots cannot move outside of the grid at any moment. +- Both robots should reach the bottom row in `grid`. + +**Example 1:** + +![1](./sample_1_1802.png) + +``` +Input: grid = [[3,1,1],[2,5,1],[1,5,5],[2,1,1]] +Output: 24 +Explanation: Path of robot #1 and #2 are described in color green and blue respectively. +Cherries taken by Robot #1, (3 + 2 + 5 + 2) = 12. +Cherries taken by Robot #2, (1 + 5 + 5 + 1) = 12. +Total of cherries: 12 + 12 = 24. +``` + +**Example 2:** + +![2](./sample_2_1802.png) + +``` +Input: grid = [[1,0,0,0,0,0,1],[2,0,0,0,0,3,0],[2,0,9,0,0,0,0],[0,3,0,5,4,0,0],[1,0,2,3,0,0,6]] +Output: 28 +Explanation: Path of robot #1 and #2 are described in color green and blue respectively. +Cherries taken by Robot #1, (1 + 9 + 5 + 2) = 17. +Cherries taken by Robot #2, (1 + 3 + 4 + 3) = 11. +Total of cherries: 17 + 11 = 28. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/cherry-pickup-ii +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go b/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go index d115ccf5e..72ebc5d10 100755 --- a/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go +++ b/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + rows, cols := len(grid), len(grid[0]) + cache := make([][][]int, rows) + for r := 0; r < rows; r++ { + cache[r] = make([][]int, cols) + for c := 0; c < cols; c++ { + cache[r][c] = make([]int, cols) + for k := 0; k < cols; k++ { + cache[r][c][k] = -1 + } + } + } + + var dfs func(int, int, int) int + dfs = func(row, x1, x2 int) int { + if row >= rows || x1 < 0 || x1 >= cols || x2 < 0 || x2 >= cols { + return 0 + } + if cache[row][x1][x2] != -1 { + return cache[row][x1][x2] + } + /* + x1 x2 + a b c d e f + */ + ans := -1 + add := grid[row][x1] + if x2 != x1 { + add += grid[row][x2] + } + for _, nx1 := range []int{x1 - 1, x1, x1 + 1} { + for _, nx2 := range []int{x2 - 1, x2, x2 + 1} { + ans = max(ans, dfs(row+1, nx1, nx2)+add) + } + } + cache[row][x1][x2] = ans + return ans + } + dfs(0, 0, cols-1) + return cache[0][0][cols-1] } diff --git a/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution_test.go b/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution_test.go index 14ff50eb4..94dd03789 100755 --- a/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution_test.go +++ b/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution_test.go @@ -10,12 +10,19 @@ 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, 1, 1}, {2, 5, 1}, {1, 5, 5}, {2, 1, 1}, + }, 24}, + {"TestCase2", [][]int{ + {1, 0, 0, 0, 0, 0, 1}, + {2, 0, 0, 0, 0, 3, 0}, + {2, 0, 9, 0, 0, 0, 0}, + {0, 3, 0, 5, 4, 0, 0}, + {1, 0, 2, 3, 0, 0, 6}, + }, 28}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1401-1500/1463.Cherry-Pickup-II/sample_1_1802.png b/leetcode/1401-1500/1463.Cherry-Pickup-II/sample_1_1802.png new file mode 100644 index 0000000000000000000000000000000000000000..e42fdaabfad6fa1a9023781b4d4b0d856367107c GIT binary patch literal 27561 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 F{{S@{A(j9D literal 0 HcmV?d00001 diff --git a/leetcode/1401-1500/1463.Cherry-Pickup-II/sample_2_1802.png b/leetcode/1401-1500/1463.Cherry-Pickup-II/sample_2_1802.png new file mode 100644 index 0000000000000000000000000000000000000000..e739bb54ec6a5fa8f33a084897dd9429f56006ea GIT binary patch literal 27876 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 xbyGV1`Q>Bq>6iG(sM`I%{3 Date: Sun, 11 Feb 2024 19:31:46 +0800 Subject: [PATCH 136/253] update some dep --- go.mod | 34 +++++++++++------------ go.sum | 86 ++++++++++++++++++++++++---------------------------------- 2 files changed, 52 insertions(+), 68 deletions(-) diff --git a/go.mod b/go.mod index d8f45d24d..3b79913f3 100644 --- a/go.mod +++ b/go.mod @@ -1,36 +1,34 @@ module awesome-golang-algorithm -go 1.21 +go 1.22 require ( - github.com/imroc/req/v3 v3.42.1 + github.com/imroc/req/v3 v3.42.3 github.com/stretchr/testify v1.8.4 ) require ( - github.com/andybalholm/brotli v1.0.6 // indirect - github.com/cloudflare/circl v1.3.6 // indirect + github.com/andybalholm/brotli v1.1.0 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/gaukas/godicttls v0.0.4 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect - github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a // indirect + github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/klauspost/compress v1.17.2 // indirect + github.com/klauspost/compress v1.17.6 // indirect github.com/kr/pretty v0.1.0 // indirect - github.com/onsi/ginkgo/v2 v2.13.0 // indirect + github.com/onsi/ginkgo/v2 v2.15.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/qtls-go1-20 v0.4.1 // indirect - github.com/quic-go/quic-go v0.40.0 // indirect - github.com/refraction-networking/utls v1.5.4 // indirect - go.uber.org/mock v0.3.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.14.0 // indirect + github.com/quic-go/quic-go v0.41.0 // indirect + github.com/refraction-networking/utls v1.6.2 // indirect + go.uber.org/mock v0.4.0 // indirect + golang.org/x/crypto v0.19.0 // indirect + golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 // indirect + golang.org/x/mod v0.15.0 // indirect + golang.org/x/net v0.21.0 // indirect + golang.org/x/sys v0.17.0 // indirect golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.14.0 // indirect + golang.org/x/tools v0.17.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 18df48ab0..22a24c292 100644 --- a/go.sum +++ b/go.sum @@ -1,80 +1,66 @@ -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= -github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +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.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/gaukas/godicttls v0.0.4 h1:NlRaXb3J6hAnTmWdsEKb9bcSBD6BvcIjdGdeb0zfXbk= -github.com/gaukas/godicttls v0.0.4/go.mod h1:l6EenT4TLWgTdwslVb4sEMOCf7Bv0JAK67deKr9/NCI= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b h1:RMpPgZTSApbPf7xaVel+QkoGPRLFLrwFO89uDUHEGf0= -github.com/google/pprof v0.0.0-20231023181126-ff6d637d2a7b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= -github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5XqmmYsTLzJp/TO9Lhy39gkverk= -github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +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-20240207164012-fb44976bdcd5 h1:E/LAvt58di64hlYjx7AsNS6C/ysHWYo+2qPCZKTQhRo= +github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= 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.42.1 h1:g82SouLvX7pqwqJjpQJYrVvuI+LOycWhyuwxtLlyQJk= -github.com/imroc/req/v3 v3.42.1/go.mod h1:W7dOrfQORA9nFoj+CafIZ6P5iyk+rWdbp2sffOAvABU= -github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= -github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/imroc/req/v3 v3.42.3 h1:ryPG2AiwouutAopwPxKpWKyxgvO8fB3hts4JXlh3PaE= +github.com/imroc/req/v3 v3.42.3/go.mod h1:Axz9Y/a2b++w5/Jht3IhQsdBzrG1ftJd1OJhu21bB2Q= +github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= +github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= 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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= -github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= +github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= 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/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= -github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -github.com/quic-go/quic-go v0.39.3 h1:o3YB6t2SR+HU/pgwF29kJ6g4jJIJEwEZ8CKia1h1TKg= -github.com/quic-go/quic-go v0.39.3/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= -github.com/quic-go/quic-go v0.40.0 h1:GYd1iznlKm7dpHD7pOVpUvItgMPo/jrMgDWZhMCecqw= -github.com/quic-go/quic-go v0.40.0/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= -github.com/refraction-networking/utls v1.5.4 h1:9k6EO2b8TaOGsQ7Pl7p9w6PUhx18/ZCeT0WNTZ7Uw4o= -github.com/refraction-networking/utls v1.5.4/go.mod h1:SPuDbBmgLGp8s+HLNc83FuavwZCFoMmExj+ltUHiHUw= +github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k= +github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA= +github.com/refraction-networking/utls v1.6.2 h1:iTeeGY0o6nMNcGyirxkD5bFIsVctP5InGZ3E0HrzS7k= +github.com/refraction-networking/utls v1.6.2/go.mod h1:yil9+7qSl+gBwJqztoQseO6Pr3h62pQoY1lXiNR/FPs= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= -go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= -golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +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.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 h1:/RIbNt/Zr7rVhIkQhooTxCxFcdWLGIKnZA4IXNFSrvo= +golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= -golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From ea2ccfe8b34f133a2d4cf22975d1ad2d5fe690c3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 12 Feb 2024 16:02:48 +0800 Subject: [PATCH 137/253] Add solution and test-cases for problem 1079 --- .../1079.Letter-Tile-Possibilities/README.md | 29 ++++++++++--------- .../Solution.go | 22 ++++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/leetcode/1001-1100/1079.Letter-Tile-Possibilities/README.md b/leetcode/1001-1100/1079.Letter-Tile-Possibilities/README.md index fb41ada8f..1e7f88704 100644 --- a/leetcode/1001-1100/1079.Letter-Tile-Possibilities/README.md +++ b/leetcode/1001-1100/1079.Letter-Tile-Possibilities/README.md @@ -1,28 +1,31 @@ # [1079.Letter Tile Possibilities][title] -> [!WARNING|style:flat] -> 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` `tiles`, where each tile has one letter `tiles[i]` printed on it. + +Return the number of possible non-empty sequences of letters you can make using the letters printed on those `tiles`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: tiles = "AAB" +Output: 8 +Explanation: The possible sequences are "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Letter Tile Possibilities -```go +``` +Input: tiles = "AAABBC" +Output: 188 ``` +**Example 3:** + +``` +Input: tiles = "V" +Output: 1 +``` ## 结语 diff --git a/leetcode/1001-1100/1079.Letter-Tile-Possibilities/Solution.go b/leetcode/1001-1100/1079.Letter-Tile-Possibilities/Solution.go index d115ccf5e..c9d052aac 100644 --- a/leetcode/1001-1100/1079.Letter-Tile-Possibilities/Solution.go +++ b/leetcode/1001-1100/1079.Letter-Tile-Possibilities/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(tiles string) int { + count := [26]int{} + for _, c := range tiles { + count[c-'A']++ + } + var dfs func() int + dfs = func() int { + r := 1 + for i := 0; i < 26; i++ { + if count[i] == 0 { + continue + } + count[i]-- + r += dfs() + count[i]++ + } + return r + + } + return dfs() - 1 } diff --git a/leetcode/1001-1100/1079.Letter-Tile-Possibilities/Solution_test.go b/leetcode/1001-1100/1079.Letter-Tile-Possibilities/Solution_test.go index 14ff50eb4..df49413a1 100644 --- a/leetcode/1001-1100/1079.Letter-Tile-Possibilities/Solution_test.go +++ b/leetcode/1001-1100/1079.Letter-Tile-Possibilities/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", 8}, + {"TestCase2", "AAABBC", 188}, + {"TestCase3", "V", 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c60f304ce8401d6b09cb93b89e150d01b8b20520 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 12 Feb 2024 21:25:10 +0800 Subject: [PATCH 138/253] Add solution and test-cases for problem 1090 --- .../1090.Largest-Values-From-Labels/README.md | 38 ++++++++++----- .../Solution.go | 47 ++++++++++++++++++- .../Solution_test.go | 23 ++++----- 3 files changed, 83 insertions(+), 25 deletions(-) diff --git a/leetcode/1001-1100/1090.Largest-Values-From-Labels/README.md b/leetcode/1001-1100/1090.Largest-Values-From-Labels/README.md index 1411f43de..54ede47d1 100644 --- a/leetcode/1001-1100/1090.Largest-Values-From-Labels/README.md +++ b/leetcode/1001-1100/1090.Largest-Values-From-Labels/README.md @@ -1,28 +1,40 @@ # [1090.Largest Values From Labels][title] -> [!WARNING|style:flat] -> 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 set of `n` items. You are given two integer arrays `values` and `values` where the value and the label of the ith element are `values[i]` and `labels[i]` respectively. You are also given two integers `numWanted` and `useLimit`. + +Choose a subset `s` of the `n` elements such that: + +- The size of the subset `s` is **less than or equal to** `numWanted`. +- There are **at most** `useLimit` items with the same label in `s`. + +The **score** of a subset is the sum of the values in the subset. + +Return the maximum **score** of a subset `s`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: values = [5,4,3,2,1], labels = [1,1,2,2,3], numWanted = 3, useLimit = 1 +Output: 9 +Explanation: The subset chosen is the first, third, and fifth items. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Largest Values From Labels -```go ``` +Input: values = [5,4,3,2,1], labels = [1,3,3,3,2], numWanted = 3, useLimit = 2 +Output: 12 +Explanation: The subset chosen is the first, second, and third items. +``` + +**Example 3:** +``` +Input: values = [9,8,8,7,6], labels = [0,0,0,1,1], numWanted = 3, useLimit = 1 +Output: 16 +Explanation: The subset chosen is the first and fourth items. +``` ## 结语 diff --git a/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution.go b/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution.go index d115ccf5e..7cf5ff8e9 100644 --- a/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution.go +++ b/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type heap1090 struct { + values []int + data []int +} + +func (h *heap1090) Len() int { + return len(h.data) +} + +func (h *heap1090) Less(i, j int) bool { + return h.values[h.data[i]] > h.values[h.data[j]] +} +func (h *heap1090) Swap(i, j int) { + h.data[i], h.data[j] = h.data[j], h.data[i] +} +func (h *heap1090) Push(x interface{}) { + h.data = append(h.data, x.(int)) +} +func (h *heap1090) Pop() interface{} { + old := h.data + l := len(old) + x := old[l-1] + h.data = old[:l-1] return x } + +func Solution(values []int, labels []int, numWanted int, useLimit int) int { + group := make(map[int]int) + h := heap1090{data: make([]int, 0), values: values} + for i := 0; i < len(values); i++ { + heap.Push(&h, i) + } + ans := 0 + for h.Len() > 0 && numWanted > 0 { + top := heap.Pop(&h).(int) + if group[labels[top]] >= useLimit { + continue + } + ans += values[top] + group[labels[top]]++ + numWanted-- + } + return ans +} diff --git a/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution_test.go b/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution_test.go index 14ff50eb4..558d0c9e9 100644 --- a/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution_test.go +++ b/leetcode/1001-1100/1090.Largest-Values-From-Labels/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + values, labels []int + numWanted, useLimit int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 4, 3, 2, 1}, []int{1, 1, 2, 2, 3}, 3, 1, 9}, + {"TestCase2", []int{5, 4, 3, 2, 1}, []int{1, 3, 3, 3, 2}, 3, 2, 12}, + {"TestCase3", []int{9, 8, 8, 7, 6}, []int{0, 0, 0, 1, 1}, 3, 1, 16}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.values, c.labels, c.numWanted, c.useLimit) 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.values, c.labels, c.numWanted, c.useLimit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d9258dbf1d0a37cee0b992c267a7bd9bdf06dd52 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 13 Feb 2024 15:26:32 +0800 Subject: [PATCH 139/253] Add solution and test-cases for problem 2108 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 12 +++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/README.md b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/README.md index f7e85a4fd..87737dd22 100755 --- a/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/README.md +++ b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/README.md @@ -1,28 +1,34 @@ # [2108.Find First Palindromic String 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 +Given an array of strings `words`, return the first **palindromic** string in the array. If there is no such string, return an **empty string** `""`. + +A string is **palindromic** if it reads the same forward and backward. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["abc","car","ada","racecar","cool"] +Output: "ada" +Explanation: The first string that is palindromic is "ada". +Note that "racecar" is also palindromic, but it is not the first. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find First Palindromic String in the Array -```go +``` +Input: words = ["notapalindrome","racecar"] +Output: "racecar" +Explanation: The first and only string that is palindromic is "racecar". ``` +**Example 3:** + +``` +Input: words = ["def","ghi"] +Output: "" +Explanation: There are no palindromic strings, so the empty string is returned. +``` ## 结语 diff --git a/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution.go b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution.go index d115ccf5e..53ea68964 100644 --- a/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution.go +++ b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words []string) string { + for _, str := range words { + s, e := 0, len(str)-1 + for ; s < e && str[s] == str[e]; s, e = s+1, e-1 { + } + if s >= e { + return str + } + } + return "" } diff --git a/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution_test.go b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution_test.go index 14ff50eb4..6ea316c19 100644 --- a/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution_test.go +++ b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-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{"abc", "car", "ada", "racecar", "cool"}, "ada"}, + {"TestCase2", []string{"notapalindrome", "racecar"}, "racecar"}, + {"TestCase3", []string{"def", "ghi"}, ""}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 588a076873b16444cf9b2da41e440bb82375cf0f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 13 Feb 2024 16:01:57 +0800 Subject: [PATCH 140/253] Add solution and test-cases for problem 869 --- .../0869.Reordered-Power-of-2/README.md | 23 +++++------- .../0869.Reordered-Power-of-2/Solution.go | 35 +++++++++++++++++-- .../Solution_test.go | 13 +++---- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0869.Reordered-Power-of-2/README.md b/leetcode/801-900/0869.Reordered-Power-of-2/README.md index 75fb5d8f8..faae836f3 100644 --- a/leetcode/801-900/0869.Reordered-Power-of-2/README.md +++ b/leetcode/801-900/0869.Reordered-Power-of-2/README.md @@ -1,28 +1,23 @@ # [869.Reordered Power of 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 +You are given an integer `n`. We reorder the digits in any order (including the original order) such that the leading digit is not zero. + +Return `true` if and only if we can do this so that the resulting number is a power of two. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 1 +Output: true ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reordered Power of 2 -```go ``` - +Input: n = 10 +Output: false +``` ## 结语 diff --git a/leetcode/801-900/0869.Reordered-Power-of-2/Solution.go b/leetcode/801-900/0869.Reordered-Power-of-2/Solution.go index d115ccf5e..3fb514487 100644 --- a/leetcode/801-900/0869.Reordered-Power-of-2/Solution.go +++ b/leetcode/801-900/0869.Reordered-Power-of-2/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +func toKey(n int) [10]int { + tmp := [10]int{} + for n > 0 { + cur := n % 10 + tmp[cur]++ + n /= 10 + } + return tmp +} +func Solution(n int) bool { + if n&(n-1) == 0 { + return true + } + + cache := map[[10]int]struct{}{} + key := toKey(n) + end := 0 + for i := 9; i >= 0; i-- { + count := key[i] + for ; count > 0; count-- { + end = end*10 + i + } + } + shift := 0 + cur := 1 + for cur <= end { + t := toKey(cur) + cache[t] = struct{}{} + shift++ + cur = 1 << shift + } + _, ok := cache[toKey(n)] + return ok } diff --git a/leetcode/801-900/0869.Reordered-Power-of-2/Solution_test.go b/leetcode/801-900/0869.Reordered-Power-of-2/Solution_test.go index 14ff50eb4..66ea6f045 100644 --- a/leetcode/801-900/0869.Reordered-Power-of-2/Solution_test.go +++ b/leetcode/801-900/0869.Reordered-Power-of-2/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", 1, true}, + {"TestCase2", 10, false}, + {"TestCase3", 46, true}, + {"TestCase4", 125, true}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 409735be82ecbf52d8be1f6b97011e68b738183e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 14 Feb 2024 10:22:41 +0800 Subject: [PATCH 141/253] Add solution and test-cases for problem 945 --- .../README.md | 28 ++++++++--------- .../Solution.go | 30 +++++++++++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/README.md b/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/README.md index c721e0095..b57e15f3d 100644 --- a/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/README.md +++ b/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/README.md @@ -1,28 +1,28 @@ # [945.Minimum Increment to Make Array Unique][title] -> [!WARNING|style:flat] -> 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 pick an index `i` where `0 <= i < nums.length` and increment `nums[i]` by `1`. + +Return the minimum number of moves to make every value in `nums` **unique**. + +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: nums = [1,2,2] +Output: 1 +Explanation: After 1 move, the array could be [1, 2, 3]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Increment to Make Array Unique -```go ``` - +Input: nums = [3,2,1,2,1,7] +Output: 6 +Explanation: After 6 moves, the array could be [3, 4, 1, 2, 5, 7]. +It can be shown with 5 or less moves that it is impossible for the array to have all unique values. +``` ## 结语 diff --git a/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/Solution.go b/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/Solution.go index d115ccf5e..5774ee365 100644 --- a/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/Solution.go +++ b/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + count := make(map[int]int) + mn := -1 + for _, n := range nums { + count[n]++ + if mn == -1 || mn > n { + mn = n + } + } + need := len(nums) + steps := 0 + cur := mn + for need > 0 { + if count[cur] == 1 || count[cur] == 0 { + if count[cur] != 0 { + need-- + } + cur++ + continue + } + next := cur + 1 + step := count[cur] - 1 + steps += step + count[next] += step + cur = next + need-- + } + return steps } diff --git a/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/Solution_test.go b/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/Solution_test.go index 14ff50eb4..d4b20f4aa 100644 --- a/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/Solution_test.go +++ b/leetcode/901-1000/0945.Minimum-Increment-to-Make-Array-Unique/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}, 1}, + {"TestCase2", []int{3, 2, 1, 2, 1, 7}, 6}, + {"TestCase3", []int{1, 2, 3, 3, 3, 3, 2, 4, 4, 4, 45, 5}, 32}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e52473fd492cf5a180a4ace33d53996747337e7e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 15 Feb 2024 08:53:17 +0800 Subject: [PATCH 142/253] Add solution and test-cases for problem 2971 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 26 ++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md index 043aa2c02..cbee569a9 100755 --- a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md +++ b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/README.md @@ -1,28 +1,41 @@ # [2971.Find Polygon With the Largest Perimeter][title] -> [!WARNING|style:flat] -> 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 **positive** integers `nums` of length `n`. + +A **polygon** is a closed plane figure that has at least 3 sides. The **longest side** of a polygon is **smaller** than the sum of its other sides. + +Conversely, if you have `k` (`k >= 3`) **positive** real numbers `a1`, `a2`, `a3`, ..., `ak` where `a1 <= a2 <= a3 <= ... <= ak` and `a1 + a2 + a3 + ... + ak-1 > ak`, then there **always** exists a polygon with `k` sides whose lengths are `a1`, `a2`, `a3`, ..., `ak`. + +The **perimeter** of a polygon is the sum of lengths of its sides. + +Return the **largest** possible **perimeter** of a **polygon** whose sides can be formed from `nums`, or `-1` if it is not possible to create a polygon. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [5,5,5] +Output: 15 +Explanation: The only possible polygon that can be made from nums has 3 sides: 5, 5, and 5. The perimeter is 5 + 5 + 5 = 15. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find Polygon With the Largest Perimeter -```go ``` +Input: nums = [1,12,1,2,5,50,3] +Output: 12 +Explanation: The polygon with the largest perimeter which can be made from nums has 5 sides: 1, 1, 2, 3, and 5. The perimeter is 1 + 1 + 2 + 3 + 5 = 12. +We cannot have a polygon with either 12 or 50 as the longest side because it is not possible to include 2 or more smaller sides that have a greater sum than either of them. +It can be shown that the largest possible perimeter is 12. +``` + +**Example 3:** +``` +Input: nums = [5,5,50] +Output: -1 +Explanation: There is no possible way to form a polygon from nums, as a polygon has at least 3 sides and 50 > 5 + 5. +``` ## 结语 diff --git a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go index d115ccf5e..18ee71495 100644 --- a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go +++ b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int64 { + + sort.Ints(nums) + sum := make([]int, len(nums)) + sum[0] = nums[0] + for i := 1; i < len(nums); i++ { + sum[i] = sum[i-1] + nums[i] + } + + ans := int64(-1) + for end := len(nums) - 1; end >= 2; end-- { + idx := sort.Search(end, func(i int) bool { + return sum[i] > nums[end] + }) + if idx == end { + continue + } + if r := int64(nums[end] + sum[end-1]); r > ans { + ans = r + } + } + return ans } diff --git a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution_test.go b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution_test.go index 14ff50eb4..3ff56b6ca 100644 --- a/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/Solution_test.go +++ b/leetcode/2901-3000/2971.Find-Polygon-With-the-Largest-Perimeter/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{5, 5, 5}, 15}, + {"TestCase2", []int{1, 12, 1, 2, 5, 50, 3}, 12}, + {"TestCase3", []int{5, 5, 50}, -1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cdd8435b00df113a8146e4a2f486a5cac7186cb3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 16 Feb 2024 14:53:27 +0800 Subject: [PATCH 143/253] Add solution and test-cases for problem 1481 --- .../README.md | 27 ++++++ .../Solution.go | 84 ++++++++++++++++++- .../Solution_test.go | 25 +++--- 3 files changed, 125 insertions(+), 11 deletions(-) create mode 100644 leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/README.md diff --git a/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/README.md b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/README.md new file mode 100644 index 000000000..4af3e2e5e --- /dev/null +++ b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/README.md @@ -0,0 +1,27 @@ +# [1481.Least Number of Unique Integers after K Removals][title] + +## Description +Given an array of integers `arr` and an integer `k`. Find the least number of unique integers after removing **exactly** `k` elements. + +**Example 1:** + +``` +Input: arr = [5,5,4], k = 1 +Output: 1 +Explanation: Remove the single 4, only 5 is left. +``` + +**Example 2:** + +``` +Input: arr = [4,3,1,1,3,3,2], k = 3 +Output: 2 +Explanation: Remove 4, 2 and either one of the two 1s or three 3s. 1 and 3 will be left. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/least-number-of-unique-integers-after-k-removals +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution.go b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution.go index d115ccf5e..ead53942d 100755 --- a/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution.go +++ b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution.go @@ -1,5 +1,87 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type eleCount struct { + n, c int +} + +type eleCountList []eleCount + +func (e *eleCountList) Len() int { + return len(*e) +} + +func (e *eleCountList) Less(i, j int) bool { + return (*e)[i].c < (*e)[j].c +} +func (e *eleCountList) Swap(i, j int) { + (*e)[i], (*e)[j] = (*e)[j], (*e)[i] +} + +func (e *eleCountList) Push(x interface{}) { + *e = append(*e, x.(eleCount)) +} + +func (e *eleCountList) Pop() interface{} { + old := *e + l := len(old) + x := old[l-1] + *e = old[:l-1] return x } +func Solution(arr []int, k int) int { + nodeCache := make(map[int]int) + list := eleCountList{} + for _, n := range arr { + idx, ok := nodeCache[n] + if !ok { + list = append(list, eleCount{n: n, c: 1}) + p := len(list) - 1 + nodeCache[n] = p + continue + } + list[idx].c++ + } + heap.Init(&list) + add := 0 + for k > 0 && list.Len() > 0 { + top := heap.Pop(&list).(eleCount) + if top.c >= k { + if top.c != k { + add = 1 + } + break + } + k -= top.c + } + return list.Len() + add +} + +func Solution2(arr []int, k int) int { + count := make(map[int]int) + for _, n := range arr { + count[n]++ + } + cc := [100001]int{} + for _, c := range count { + cc[c]++ + } + remove := 0 + for i := 1; i <= 100000; i++ { + if cc[i] == 0 { + continue + } + + a := k / i + if a < cc[i] { + remove += a + break + } + k -= cc[i] * i + remove += cc[i] + } + return len(count) - remove +} diff --git a/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution_test.go b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution_test.go index 14ff50eb4..b97039564 100755 --- a/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution_test.go +++ b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution_test.go @@ -10,30 +10,35 @@ 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{5, 5, 1}, 1, 1}, + {"TestCase2", []int{4, 3, 1, 1, 3, 3, 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.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) + } + got = Solution2(c.arr, c.k) + if !reflect.DeepEqual(got, c.expect) { + 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 d695cb8d9c97e6d05aa76d0bd8496fa1cf2b094d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 17 Feb 2024 15:35:54 +0800 Subject: [PATCH 144/253] Add solution and test-cases for problem 1642 --- .../README.md | 44 +++++++---- .../Solution.go | 73 +++++++++++++++++- .../Solution_test.go | 24 +++--- .../q4.gif | Bin 0 -> 519577 bytes 4 files changed, 115 insertions(+), 26 deletions(-) create mode 100644 leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/q4.gif diff --git a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md index 6e8daa77f..9f52fdf40 100755 --- a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md +++ b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md @@ -1,28 +1,44 @@ # [1642.Furthest Building You Can Reach][title] -> [!WARNING|style:flat] -> 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 `heights` representing the heights of buildings, some `bricks`, and some `ladders`. + +You start your journey from building `0` and move to the next building by possibly using bricks or ladders. + +While moving from building `i` to building `i+1` (**0-indexed**), + +- If the current building's height is **greater than or equal** to the next building's height, you do **not** need a ladder or bricks. +- If the current building's height is **less than** the next building's height, you can either use **one ladder** or `(h[i+1] - h[i])` **bricks**. +Return the furthest building index (0-indexed) you can reach if you use the given ladders and bricks optimally. + +**Example 1:** -**Example 1:** +![1](./q4.gif) ``` -Input: a = "11", b = "1" -Output: "100" +Input: heights = [4,2,7,6,9,14,12], bricks = 5, ladders = 1 +Output: 4 +Explanation: Starting at building 0, you can follow these steps: +- Go to building 1 without using ladders nor bricks since 4 >= 2. +- Go to building 2 using 5 bricks. You must use either bricks or ladders because 2 < 7. +- Go to building 3 without using ladders nor bricks since 7 >= 6. +- Go to building 4 using your only ladder. You must use either bricks or ladders because 6 < 9. +It is impossible to go beyond building 4 because you do not have any more bricks or ladders. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Furthest Building You Can Reach -```go ``` +Input: heights = [4,12,2,7,3,18,20,3,19], bricks = 10, ladders = 2 +Output: 7 +``` + +**Example 3:** +``` +Input: heights = [14,3,19,3], bricks = 17, ladders = 0 +Output: 3 +``` ## 结语 diff --git a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution.go b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution.go index d115ccf5e..c10801da9 100644 --- a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution.go +++ b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution.go @@ -1,5 +1,76 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +func Solution(heights []int, bricks int, ladders int) int { + // 1 2 3 4 5 6 + // 4 0 1 1 1 9996 diff bsearchr+judge???? + // b=4, l=1 + diff := make([]int, len(heights)) + for i := 1; i < len(heights); i++ { + if r := heights[i] - heights[i-1]; r > 0 { + diff[i] = r + } + } + l, r := 0, len(heights) + for l < r { + mid := (l + r) / 2 + tmp := make([]int, mid+1) + for i := 0; i <= mid; i++ { + tmp[i] = diff[i] + } + if isOk1642(tmp, bricks, ladders) { + l = mid + 1 + } else { + r = mid + } + } + if l != 0 { + l-- + } + return l +} + +type heap1642 []int + +func (h *heap1642) Len() int { + return len(*h) +} + +func (h *heap1642) Less(i, j int) bool { + return (*h)[i] < (*h)[j] +} +func (h *heap1642) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} +func (h *heap1642) Push(x interface{}) { + *h = append(*h, x.(int)) +} + +func (h *heap1642) Pop() interface{} { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } +func isOk1642(diffs []int, b, l int) bool { + h := heap1642(diffs) + heap.Init(&h) + for h.Len() > 0 { + top := heap.Pop(&h).(int) + if top <= 0 { + continue + } + if top <= b { + b -= top + continue + } + if l > 0 { + l-- + continue + } + return false + } + return true +} diff --git a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution_test.go b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution_test.go index 14ff50eb4..6b7ad3317 100644 --- a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution_test.go +++ b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + heights []int + bricks, ladders int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 2, 7, 6, 9, 14, 12}, 5, 1, 4}, + {"TestCase2", []int{4, 12, 2, 7, 3, 18, 20, 3, 19}, 10, 2, 7}, + {"TestCase3", []int{14, 3, 19, 3}, 17, 0, 3}, + {"TestCase4", []int{7, 5, 13}, 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.heights, c.bricks, c.ladders) 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.heights, c.bricks, c.ladders) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/q4.gif b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/q4.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9118152fdfce7a226730b837de51846496ebe32 GIT binary patch literal 519577 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�gxmU;et_1r@D= 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�NdFZCB9ONl^_p3c&KRsqAsAz|m8p3RifH_X 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

FwW8`+ahi05NP_udf;Z( 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

h1CGKf~5j#u>+o8s=#HCff7PZmz5k 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%0AIqg=NCfc1n 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
ZWfRf;Rtj%eRCdPOHmbQ;kx%0gZrO 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
?filE-R!yT(&SgSDuumF4KT9|{OfypjNTe|fY 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